1. 程式人生 > 其它 >UEFI使用OVMF執行EFI

UEFI使用OVMF執行EFI

技術標籤: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例項

  1. 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; }
  1. 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
  1. OvmfPkgX64.dsc
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
  1. 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

在這裡插入圖片描述

結論

重啟電腦之後會列印成功,不知道是因為什麼引起的。後面有時間再來討論