问题描述
决定写一个简单的“Hello World!” EDK2中的程序, 我偶然发现了以下问题:
当我使用串行连接进行调试时,DebugPrint 等调试函数的输出成功重定向到我的串行终端(在本例中为 PuTTY),差不多。
在 UEFI shell 中编译执行以下程序后,我只是得到 结果是一个空行。 但是再次执行相同的二进制文件后,该行成功打印出来,非常漂亮。
这是我运行的程序的源代码:
#include <Uefi.h>
#include <Library/DebugLib.h>
EFI_STATUS
efi_main(EFI_HANDLE ImageHandle,EFI_SYstem_TABLE* SystemTable
)
{
DebugPrint(DEBUG_INFO,"Hello World!\n");
return EFI_SUCCESS;
}
串行输出:
注意:我将我的程序链接到 IoLib、SerialPortLib 和 DebugLib
可能导致此问题的原因是什么?
解决方法
经过大量摆弄后我意识到,我手动指定了主函数的入口点 (efi_main
),当使用 UefiDriverEntryPoint_ModuleEntryPoint /strong> 来自 EDK2 的库。
这立即解决了我的问题:)