UEFI使用OVMF執行EFI
阿新 • • 發佈:2020-12-30
技術標籤:UEFI
1. 建立虛擬盤
dd if=/dev/zero of=~/hda.img bs=1 count=10M #1、建立img檔案
mkfs -t vfat ~/hda.img #2、將檔案重置為FAT格式
sudo losetup /dev/loop0 ~/hda.img #3、對映到loop裝置
2. HelloWorld例項
- HelloWorld/HelloWorld.c
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
//ShellCEntryLib call user interface ShellAppMain
EFI_STATUS
EFIAPI
HelloWorldEntry(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status = EFI_SUCCESS;
Print (L"[Console] HelloWorldEntry Start..\n");
Print (L"[Console] HelloWorldEntry End ... \n");
return Status;
}
- HelloWorld/HelloWorld.inf
[Defines] INF_VERSION = 0x00010007 BASE_NAME = HelloWorld FILE_GUID = 69A6DE6D-FA9F-485E-9A4E-EA70FDCFD82F MODULE_TYPE = UEFI_APPLICATION VERSION_STRING = 1.0 ENTRY_POINT = HelloWorldEntry [Sources] HelloWorld.c [Packages] MdePkg/MdePkg.dec ShellPkg/ShellPkg.dec MdeModulePkg/MdeModulePkg.dec [LibraryClasses] ShellCEntryLib BaseLib BaseMemoryLib DebugLib PrintLib UefiBootServicesTableLib MemoryAllocationLib UefiLib
- OvmfPkgX64.dsc
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
- OvmfPkgX64.fdf
INF OvmfPkg/HelloWorld/HelloWorld.inf
3編譯
build -a X64 -p OvmfPkg/OvmfPkgX64.dsc
cp HelloWorld.efi /media/fan/1173-7859/ #我電腦掛載裝置名為1173-7859(每次都不一樣)
sudo qemu-system-x86_64 -bios OVMF.fd -hda /dev/loop0
結論
重啟電腦之後會列印成功,不知道是因為什麼引起的。後面有時間再來討論