使用 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 驱动程序 的相关文章

  • 如何在SSRS VS2008中为多个数据集应用父组

    我已经与这个问题斗争了好几天 但没有成功 我需要实现一种非常棘手的报告格式 但最主要的是所有数据集都需要按 1 个父级进行分组 我将尝试解释 假设我们有数据集1 数据集2 两者都有 AccountNumber 作为公共字段 父级 我需要在报
  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率

随机推荐

  • 为 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