一、 编写源代码
-
编写C:\edkii\OvmfPkg\MyHelloWorldDXEDriver\MyHelloWorldDXEDriver.c
#include <uefi.h> #include <Library/UefiLib.h> #include <Library/BaseLib.h> #include <Library/DebugLib.h> #include <Library/BaseMemoryLib.h> #include <Library/UefiDriverEntryPoint.h> #include <Library/UefiBootServicesTableLib.h> EFI_STATUS EFIAPI MyHelloWorldDXEDriverEntry( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status = EFI_SUCCESS; DEBUG ((EFI_D_ERROR , "MyHelloWorldDXEDriverEntry Start..\n")); DEBUG ((EFI_D_ERROR ,"MyHelloWorldDXEDriverEntry Endt..\n")); return Status; } -
编写C:\edkii\OvmfPkg\MyHelloWorldDXEDriver\MyHelloWorldDXEDriver.inf
[Defines] INF_VERSION = 0x00010006 BASE_NAME = MyHelloWorldDXEDriver FILE_GUID = 6AE7DE6E-F0AF-485f-9937-EB70FDCFC82F MODULE_TYPE = UEFI_DRIVER VERSION_STRING = 1.0 ENTRY_POINT = MyHelloWorldDXEDriverEntry [Sources] MyHelloWorldDXEDriver.c [Packages] MdePkg/MdePkg.dec ShellPkg/ShellPkg.dec MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint BaseLib BaseMemoryLib DebugLib DevicePathLib UefiBootServicesTableLib MemoryAllocationLib UefiLib [depex] TRUE -
修改C:\edkii\OvmfPkg\OvmfPkgX64.dsc
[Components] ... # # DXE Phase modules # OvmfPkg/MyHelloWorldDXEDriver/MyHelloWorldDXEDriver.inf ... -
修改C:\edkii\OvmfPkg\OvmfPkgX64.fdf
[FV.DXEFV] ... # # DXE Phase modules # INF OvmfPkg/MyHelloWorldDXEDriver/MyHelloWorldDXEDriver.inf ...
二、 编译生成EFI文件
运行edksetup.bat编译整个OvmfPkg Package
三、 运行HelloWorld DXE Driver
- 拷贝 C:\edkii\Build\OvmfX64\DEBUG_VS2013x86\FV\OVMF.fd 到C:\qemu
- 执行
setup-qemu-x64.bat| findstr MyHelloWorldDXEDriver,如下

四、 小结
UEFI DXE和UEFI PEIM的写法区别:
- INF文件中的MODULE_TYPE不同(
PEIM、UEFI_DRIVER) FDF文件中放置位置不同
PEIM需要放在[FV.PEIFV]下,而DXE放在[FV.DXEFV]中
本文详细介绍了如何从零开始创建并运行一个UEFI DXE阶段驱动程序。包括了编写源代码、配置INF和FDF文件、编译生成EFI文件及在QEMU上运行的全过程。对比了UEFI DXE和PEIM的写法区别,为UEFI驱动开发者提供了实用指导。
945





