【edk2 】【01】【HelloWorld工程编译】

【edk2 】【01】【HelloWorld工程编译】

1. 新建HelloWorldPkg工程

  • edk2根目录下新建HelloWorldPkg文件夹
  • 新建HelloWorld.c文件:
#include <Uefi.h>
#include <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain(
    EFI_HANDLE ImageHandle,
    EFI_SYSTEM_TABLE *SystemTable
)
{
    Print(L"Hello world!\n");
    return 0;
}
  • 新建HelloWorld.inf文件:
[Defines]
    INF_VERSION = 0x00010006
    BASE_NAME = HelloWorld
    FILE_GUID = 3171ADAF-8527-140F-8193-946061EBAF5A
    MODULE_TYPE = UEFI_APPLICATION
    VERSION_STRING = 1.0
    ENTRY_POINT = UefiMain

[Sources]
    HelloWorld.c

[Packages]
    MdePkg/MdePkg.dec

[LibraryClasses]
    UefiApplicationEntryPoint
    UefiLib

2. 在vs环境尝试编译HelloWorldPkg

  • 将HelloWorld工程添加到EmulatorPkg工程一起编译,修改EmulatorPkg/EmulatorPkg.dsc,在Components中添加HelloWorld.inf
[Components]
    HelloWorldPkg\HelloWorld.inf
!if "IA32" in $(ARCH) || "X64" in $(ARCH)
  • 还是先进vs编译环境,修改Conf/target.txt
ACTIVE_PLATFORM       = EmulatorPkg/EmulatorPkg.dsc
  • 尝试build,报错:
NMAKE : fatal error U1077: "D:\IASLiasl.exe"  -pe:\edk2\Build\OvmfX64\DEBUG_VS2019\X64\MdeModulePkg\Universal\Disk\RamDiskDxe\RamDiskDxe\OUTPUT\.\RamDisk.aml e:\edk2\Build\OvmfX64\DEBUG_VS2019\X64\MdeModulePkg\Universal\Disk\RamDiskDxe\RamDiskDxe\OUTPUT\.\RamDisk.iiii: ش롰0x1
Stop.
  • 显然这里的iasl.exe路径有问题,进系统环境变量重新设置D:\IASL\iasl.exe
  • 编译成功后在Build\EmulatorX64\DEBUG_VS2019\X64下得到HelloWorld.efi,这就是可以直接在UEFI启动阶段运行的固件

3. 编译UEFI固件OVMF.fd

  • 按照类似方法编译OvmfX64工程,在Build\OvmfX64\DEBUG_VS2019\FV下得到OVMF.fd启动固件

4. 利用qemu运行编译得到的固件

  • .\qemu-system-x86_64.exe -pflash E:\edk2\Build\OVMF.fd -hda fat:rw:E:\edk2\Build -net none
  • 在启动阶段输入ESC,fs0:,然后ls一下就能看到挂载的HelloWorld.efi文件,然后直接运行就能看到打印了
posted @ 2024-09-30 02:54  SunshineBooming  阅读(121)  评论(0)    收藏  举报