一个非常简单的UEFI Application开发框架

通常情况下,我们需要使用 EDK2 来进行 UEFI Shell Application 的开发。这次介绍的是一个用来开发 UEFI Shell Application的框架。项目地址如下:

https://github.com/VioletGiraffe/UEFI-Bootloader

从名字可以看出,作者的目标是用来开发BootLoader,类似的我们可以用来开发UEFI Shell Application。

相比EDK2,这种方法的优点主要是:

  1. 小巧简单。容量只有十几兆,编译起来非常快,另外方便我们研究具体的实现;
  2. 编译环境时 Visual Studio,方便我们阅读代码

具体使用方法是:

1.在 https://github.com/VioletGiraffe/UEFI-Bootloader 下载代码

2.在https://github.com/VioletGiraffe/UEFI-CPP-headers 下载需要的头文件

3.将2下载的内容解压到 UEFI-CPP-headers目录下

4.Visual Studio 打开bootloader.sln文件

5.这个项目作者使用 VS2017,所以需要修改一下 Platform Toolset 为你当前使用的编译器。这里我是用的是 VS2019,修改如下:

6.直接 Build即可生成 BootX64.efi

在WinHost 模拟环境中运行这个程序可以看到屏幕上输出了信息:

有兴趣的朋友可以直接去前面提到的项目主页或者在这里直接下载:


2023年11月9日

同样这个框架,研究了一下如何在命令行下编译,以 X64 为例,具体操作如下:

1.代码上只需要准备 gfx.c 和 UEFI-CPP-headers 目录

2.打开 X64 Native Tools Command Prompt for VS2019 (如果你要build IA32 的 EFI 则需要使用 X86 的窗口)

3.下面命令生成 gfx.obj

cl /c /I"C:\\BuildBs\\CppStudy\\1\\UEFI-CPP-headers" /Zi /W4 /WX- /diagnostics:column /Od /D _UNICODE /D UNICODE /D HAVE_USE_MS_ABI /D GNU_EFI_USE_EXTERNAL_STDARG /D _UNICODE /D UNICODE /Gm- /MDd /GS- /fp:precise /permissive- /Zc:wchar_t /Zc:forScope /Zc:inline /std:c++17 /Fo"C:\\BuildBs\\CppStudy\\1\\" /Fd"C:\\BuildBs\\CppStudy\\1\\vc142.pdb" /external:W4 /Gd /TP /wd4229 /FC /errorReport:prompt /Oi- gfx.cpp

4. Link 生成 EFI 文件

link "/OUT:C:\\BuildBs\\CppStudy\\1\\bootx64.efi" /VERBOSE /INCREMENTAL:NO "/LIBPATH:C:\\BuildBs\\CppStudy\\1\\" libcmtd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /NODEFAULTLIB /MANIFEST:NO /DEBUG:FULL "/PDB:C:\\BuildBs\\CppStudy\\1\\bootx64.pdb" /SUBSYSTEM:EFI_APPLICATION /OPT:REF /TLBID:1 "/ENTRY:efi_main" /NXCOMPAT:NO "/IMPLIB:C:\\BuildBs\\CppStudy\\1\\bootx64.lib" /MACHINE:X64 "C:\\BuildBs\\CppStudy\\1\\gfx.obj"

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注