问题标签 [edk2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
135 浏览

c - MSVC 手动链接标准库

目前我正在尝试在我的 EDK2 项目中使用 C 标准库。由于我的 Visual Studio 2019 没有自动添加必要的包含目录,我手动将以下文件夹添加到我的包含目录中:

由于这修复了我缺少的#include指令,剩下的唯一事情就是手动将缺少的库添加到链接器参数中。

我这样做如下:

1.)在快速谷歌搜索后,我发现我必须将我的应用程序与libucrt.lib链接,然后我尝试通过执行简单的搜索在我的 Windows 10 SDK 中找到它,这产生了以下结果:

结果,我将此目录添加到 Visual Studio 2019 中的库目录中。不要忘记,我还添加了libucrt.lib链接器库

我的问题是,在编译我的项目后,我仍然从链接器中得到一个错误: 链接器错误

我已经尝试过使用不同的包含目录以及不同的 Windows SDK 版本,但似乎没有一个能解决我的问题。

我很感激任何形式的帮助,谢谢。

0 投票
0 回答
152 浏览

firmware - 您如何在 EDK2 中构建胶囊,以及如何将 UEFI 图像放入该胶囊中?

我正在使用 Tianocore ( https://github.com/tianocore/edk2 ) 的 EDK2 进行测试,我可以构建 BIOS 映像以及 UEFI 应用程序和驱动程序,但是在构建 UEFI 胶囊时,我不确定如何去做这件事。

https://uefi.org/sites/default/files/resources/UEFI%20Fall%202018%20Intel%20UEFI%20Capsules.pdf这指向了一些想法,但我不确定在这里采取的确切路径。

我看到两种可能性:

https://github.com/tianocore/edk2/tree/master/FmpDevicePkg这是上面 PDF 链接中提到的包,PDF 还提到了用于制作胶囊的集成构建管道。它还提到了一个独立的 python 脚本,它是选项二。

https://github.com/tianocore/edk2/tree/c640186ec8aae6164123ee38de6409aed69eab12/BaseTools/Source/Python/GenFds有独立的脚本可以在这个位置制作这些图像和工件,如胶囊和标题,但我不确定这些是否是有意的按原样使用或仅用作更大构建管道的一部分。

我的最终目标是生成一个 UEFI 封装,并将 UEFI 驱动程序作为有效负载放置在其中,因此我们将不胜感激任何提示或帮助。

0 投票
1 回答
58 浏览

c - DebugPrint 推送空行(串行连接)

在决定写一个简单的“Hello World!” 在 EDK2 程序中,我偶然发现了以下问题:

当我使用串行连接进行调试时,调试功能(如DebugPrint )的输出成功地重定向到我的串行终端(在本例中为 PuTTY)

在 UEFI shell 中编译执行以下程序后,我只是得到一个空行。但是在再次执行相同的二进制文件后,该行被成功打印出来了。

这是我运行的程序的源代码:

串行输出:

在此处输入图像描述

注意:我将我的程序与IoLibSerialPortLibDebugLib 相关联

什么可能导致此问题?

0 投票
0 回答
42 浏览

makefile - 使用 make -j4 编译项目时出错,但使用 make j1 编译时通过

我正在 ubuntu v20.4 上编译一个 C 语言项目,但它失败了。但是当我在 ubuntu v18.04 上构建相同的项目时,它会通过'''make -j 4'''。但是当我使用 '''make -j 1''' 构建时,也会构建 ubuntu v20.04 的通行证。

还验证了制作版本,即 ubuntu v18.04 的 4.1 和 ubuntu v20.04 的 4.2。但在 make v4.2 上没有添加任何功能更改。

因此,我很困惑从哪里开始研究。

0 投票
0 回答
25 浏览

makefile - 我可以使用目录作为排除子目录的 makefile 目标的先决条件吗?

我目前有一个基于edk2的程序来编译相关的BaseTools、ovmf.fd和BootX64.efi文件,并在此基础上运行以下执行。

但是,随着 edk2 的更新,我可能需要手动重建它们。因此我想问是否有办法让makefile根据edk2的更新执行相关的构建指令。

问题是这些目标的构建将在 edk2 目录内创建输出,并导致 make 文件的递归先决条件。

因此,我想问是否有一种方法可以设置基于 edk2 目录更新的 makefile 先决条件并忽略 git 忽略的文件。

0 投票
1 回答
815 浏览

networking - 未加载 Realtek UEFI UNDI 驱动程序

我正在开发应该与网络一起使用的 efi 应用程序。为了方便起见,我将EFI\Boot\bootx64.efi文件更改为 efi shell,以便在系统启动时默认启动 efi shell。当 shell 启动时,我运行命令ifconfig -l来查看可用的网络接口设置。

我面临以下行为。

当系统默认启动我的 shell ( EFI\Boot\bootx64.efi) 时,我看不到任何网络接口,正在运行 command ifconfig -l。但。如果我EFI\Boot\bootx64.efi使用(在 HP 笔记本电脑上测试)“引导菜单/从文件引导”手动引导相同的文件 (),shell 将启动并ifconfig -l显示网络接口eth0

因此,使用默认系统启动或从启动菜单手动加载相同的 efi 文件会给我不同的网络可用性结果。

我决定比较两种情况下加载的驱动程序列表。我注意到,当系统以默认模式启动时(不是通过从启动菜单手动指定设备)驱动程序Realtek UEFI UNDI Driver不存在。当我从文件 ( ) 手动启动时EFI\Boot\bootx64.efi,它已加载。

我认为缺少此驱动程序“Realtek UEFI UNDI Driver”是原因。为了检查这一点,我做了以下测试:

  1. 从网络下载的 Realtek UNDI 驱动程序 ( RtkUndiDxe.efi)
  2. 将其复制到 efi 引导文件夹 ( EFI\Boot\)
  3. 系统默认启动进入shell并通过命令手动加载Realter UNDI驱动load 'RtkUndiDxe.efi 结果出现网络接口。

有人可以解释一下,为什么默认系统启动Realtek UEFI UNDI 驱动程序未加载?或者我如何让系统Realtek UEFI UNDI Driver从我自己的 efi 应用程序/驱动程序中加载它自己的?

0 投票
0 回答
37 浏览

uefi - 不会为“PcdsDynamic”部分下的 PCD 生成令牌值

我正在尝试了解 EDK2 中的动态 PCD。

我已将此代码添加到我的包 DEC 文件中:

并将此代码添加到我的 UEFI 应用程序 INF 文件中:

我正在尝试在我的应用程序中使用 PCD,如下所示:

但是当我尝试编译时,令牌号不会填充到 AutoGen.h:

因此,我在第一次通话中得到 0,PcdGet32并且我的应用程序在通话时冻结PcdSet32S

但是如果我在我的包中更改[PcdsDynamic][PcdsDynamicEx]DEC 文件令牌值将被填充:

我的错误是什么?为什么[PcdsDynamic]使用时没有填充令牌值?

0 投票
0 回答
34 浏览

uefi - 构建时固定的布尔 PCD 和 PCD 功能标志之间的区别

构建时固定的布尔 PCD 和 edk2 中的 PCD 功能标志有什么区别?

我正在查看 AutoGen 文件,这两个 PCD 的结果实际上是相同的。

AutoGen.c

自动生成器

这两种定义 PCD 的方法之间是否有任何实际差异?或者PcdsFeatureFlag只是一种语法糖?

0 投票
0 回答
19 浏览

edk2 - Edk2 驱动绑定问题

我是 EDK2 的新手。在 Linux 上,我构建了 edk2/MdeModulePkg/Bus/Pci/NvmExpressDxe 驱动程序并将其部署到我的 NVME 驱动器的 Option ROM 中。当系统启动时,我的驱动程序加载并绑定到我的 NVME 驱动器并且驱动器工作正常。

但是,如果我将我的 NVME 驱动器与来自三星/英特尔的另一个 NVME 驱动器一起插入,我的驱动程序会加载但不会绑定到我的驱动器。事实上,NvmExpressDriverBindingSupported() 被多次调用,但从未使用 NVME 驱动器的类代码。我什至将驱动程序绑定版本从 0x10 提高到 0x11,但这并没有帮助。

我在这里做错了什么,我该如何解决这个问题?

提前致谢

0 投票
1 回答
26 浏览

edk2 - 如何使用 edk2 创建多进程?

我已经创建了一个这样的计时器,它可以工作,但是当我想创建两个计时器一起工作时,只有一个计时器的回调函数可以工作,请帮助,谢谢:

如果我创建两个计时器,我将创建另一个 TimeoutSelf 函数。也。