使用 Visual Studio 构建 UEFI 驱动程序

2024-03-06

我正在寻找有关如何使用 Visual Studio 2012 项目通过 EDK2 SDK 构建 UEFI 驱动程序的建议。我试图静态链接 UefiLib.lib 但惨败。我已将该库添加到链接器下的附加依赖项中。

#include  <Uefi.h>
#include  <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
 Print((CHAR16 *)L"Welcome to the world of EDK II.\n");
 return EFI_SUCCESS;
}

错误是

test.obj : error LNK2001: unresolved external symbol "unsigned __int64 __cdecl Print(unsigned short const *,...)" (?Print@@YA_KPEBGZZ)

现在我已经使用 DUMPBIN 来确保 Print 存在于库中,但它不是作为导出或导入存在,而是作为存档成员存在。我不确定这是否是问题所在。


您无法单独构建 UEFI 驱动程序或应用程序,必须在 EDK2 源代码树中完成,该源代码树具有编译和链接 EDK2 组件所需的大量头文件和库。 EDK2 组件必须使用 EDK2 构建工具构建,C 编译器/链接器只是 EDK2 构建过程中的一个步骤。您应该从使用命令行构建开始,以确保环境设置正确,然后您可以尝试将要开发的组件引入 Visual Studio。

在 Visual Studio 中,您可以从创建 Makefile 项目开始 - 这是指定所有自定义构建步骤所必需的。例如,转到项目的属性页,在配置属性 -> NMake -> 常规 -> 构建命令行下。将以下代码放入构建命令行中;它将允许您构建整个 AppPkg 包,其中包括您尝试构建的 Hello 应用程序。

cd C:\src\edk2
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
call edksetup.bat
build.exe -p c:\src\edk2\AppPkg\AppPkg.dsc -t VS2012x86  -b DEBUG

如果您只想构建 Hello,则必须自定义 AppPkg.dsc 文件,该文件用于构建 AppPkg 包。有多种方法可以通过使用更高级的命令行开关和 build.exe 实用程序来进一步调整构建过程 - 您必须研究 TianoCore.org 上提供的 EDK2 手册。

上述步骤应该可以帮助您开始在 Visual Studio 中构建 UEFI 应用程序/驱动程序,但您可能希望使用 Visual Studio 来使用其强大的 IntelliSense 和调试功能。为此,您应该从构建 Nt32Pkg 软件包开始,该软件包在 Windows 中创建 EFI 模拟环境,并允许您像常规 Windows 应用程序一样单步执行代码并调试 UEFI 驱动程序/应用程序。设置 Visual Studio 项目来执行此操作有点棘手,除非您使用专门的 VS 扩展来进行 UEFI 开发,为您自动执行所有这些工作,例如 Phoenix Core Architect。但是,可以手动完成,您只需手动将 EDK2 源文件/文件夹结构的部分或全部导入到 VS 解决方案资源管理器中即可。 Nt32Pkg 构建的结果是 Windows 应用程序 C:\src\edk2\Build\NT32IA32\DEBUG_VS2012x86\IA32\SecMain.exe - 它应该帮助您在 Windows 环境中开始并向您介绍 UEFI。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Visual Studio 构建 UEFI 驱动程序 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 为 UIView 子类加载 Nib 的正确方法

    我知道这个问题以前曾被问过 但答案是矛盾的 我很困惑 所以请不要攻击我 我想要一个可重复使用的UIView整个我的应用程序的子类 我想使用 nib 文件来描述界面 现在假设它是一个加载指示器视图 其中有一个活动指示器 我希望在某些事件中实例
  • GCD和回调-并发问题

    我注册了一个回调处理程序 用于侦听 iOS 地址簿中的更改 由于某些奇怪的原因 已提交错误 当应用程序从后台返回时 有时会多次调用此回调 我希望我的回调处理程序只运行一次逻辑 即使回调被多次调用 这就是我注册回调的方式 ABAddressB
  • 在经典 ASP 中使用 ODBC 连接器时,MySQL“max_execution_time”默认为 30000ms,并且无法更改

    这个问题已经困扰我几个月了 而且我还没有找到解决方案 默认max execution time在经典 ASP 应用程序中使用 MySQL ODBC 连接器 8 0 时 设置为 30000 毫秒 30 秒 但我不知道如何增加它 我有一个大表
  • 如何获取 Twitter 当前用户的性别

    我已经查看了 Twitter 文档 anywhere 我可以在其中使用用户对象属性 但在用户数据中我找不到性别属性 当您创建 Twitter 帐户时 它从不询问性别 因此您无法通过 API 获取性别 你需要某种人工智能来确定它
  • 将 Fig.legend 与 matplotlib 中的子图结合起来

    免责声明 我知道在这个简单的示例中使用子图是无关紧要的 后者仅用于显示我的问题 我希望能够使用fig legend with fig subfigures1 我目前正在探索新的子图 https matplotlib org stable g
  • Android如何通过复选框识别列表视图中的项目

    我真的被困在这里了 我想要的并不简单 对我来说 但是我已经编写 Android 一年了 我想要的是一个列表视图 每行都有一个图像视图 一个文本视图 一个复选框和另一个文本视图 让我们首先在布局中添加一个文本视图和一个复选框 基于this h
  • 如何包含 Angular 5 的 ag-grid 样式?

    我正在使用 Angular 5 和 ag grid 17 x 我只是尝试做一个简单的 hello world 类型的示例 但无法正确显示网格 我的模板中有以下 HTML div style width 100 height 500px cl
  • WebClient().DownloadString() 返回旧数据[重复]

    这个问题在这里已经有答案了 我正在使用此代码从 URL 获取返回字符串 webClient Encoding Encoding UTF8 response webClient DownloadString http somesite com
  • 如何删除 Grails 生成的 Content-Type 标头中的 charset=utf-8

    我正在尝试将 json 数据作为 grails 中的响应正文发送 我尝试使用以下方法将 Content Type 标头设置为 application json render status httpServletResponse text r
  • 如何在两个设备(android,iphone)之间传输“数据”?

    如何在两个设备之间传输数据 我想在不同平台 android iphone 之间传输数据 主要是图像文件 是否可以使用 p2p 或者我应该使用客户端服务器 任何帮助将不胜感激 你看过吗高通的 AllJoyn 库 https developer
  • 将 ffmpeg 应用于多个文件

    我写了一个简单的脚本 bin bash find name m4a while read filename do new filename echo filename sed s m4a 1flac g if f new filename
  • 为什么在ReactJS中按钮的onClick事件中传递函数引用而不是方法?

    每当我在按钮的 onClick 中传递函数括号时 即使不单击按钮 它也会在页面加载时自动调用 但是 当我不在按钮的 onClick 中传递函数括号时 它仅在单击按钮时调用 在函数调用中传递括号
  • 有人可以解释一下 Git 中使用的内容跟踪和其他 SCM 中使用的文件跟踪之间的区别吗

    我已经使用 Git 一段时间了 喜欢它所提供的功能和工作流程的灵活性 尽早并经常做出承诺的能力对我来说意义重大 而且非常适合我的工作方式 我曾多次听说过 Git 的一个功能 但我还没有弄清楚这一点 那就是它跟踪内容而不是文件历史记录 这应该
  • 返回 WCF 自定义错误异常

    我在从 wcf 服务返回自定义错误异常时遇到了一些问题 与 wcf 服务通信的客户端应用程序收到 合同不匹配错误 这是我在服务中定义的错误契约 public partial class Fault string codeField stri
  • 无法连接到 Raspberry Pi 上的 BLE 设备

    我正在尝试连接到 Raspberry Pi 2 上的 BLE 设备 心率传感器 Polar H7 我使用此处找到的最新版本的 bluez 5 35 http www bluez org download http www bluez org
  • Oracle 11g 支持的 JDBC、JDK 版本

    我们正在将数据库从 oracle 10g 升级到 11g 希望我们现在的JDK1 6能够支持这个 Oracle 11g 的理想 JDBC 版本是什么 目前我们使用的是ojdbc 14 jar 它支持11g吗 请确认我 根据甲骨文常见问题解答
  • 如何在 npm 模块上使用 Web Worker

    我正在编写一个 JavaScript 库 并且正在使用一个网络工作者 我正在使用 webpack 带有worker loader 来创建我的构建 图书馆一切正常 webpack config js test app worker ts in
  • 如何将QT国际化集成到CMake中?

    大家好 我正在尝试将 QT 国际化与 CMake 结合使用 我的 cmake 文件配置如下 Internalization this should generate core jp ts SET rinzo core TRANSLATION
  • 用于在函数上插入值的 cin 命令

    我怎样才能使用cin为函数插入值 cin gt gt addNumber cout lt lt addNumber lt lt endl 我不确定我是否正确使用了上面的这些行 我应该使用什么命令 单词或任何名称才能做到这一点 我正在尝试为变
  • 使用 Visual Studio 构建 UEFI 驱动程序

    我正在寻找有关如何使用 Visual Studio 2012 项目通过 EDK2 SDK 构建 UEFI 驱动程序的建议 我试图静态链接 UefiLib lib 但惨败 我已将该库添加到链接器下的附加依赖项中 include