一、 编写源代码
-
编写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]
中