UEFI使用OVMF运行EFI

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设备

补:
或者

	qemu-img create ~/hda.img 10M
	mkfs -t vfat ~/hda.img 						#2、将文件重置为FAT格式
	mkdir ovmf_boot 
	chmod 0777 ovmf_boot
	sudo mount ~/hda.img ~/ovmf_boot			#之后要进行操作直接对ovmf_boot操作就行了
	#每次对ovmf_boot操作都需要重新挂载一次,不然img里的内容无法更新,或者efi无法正常运行,知道原理的可以在下面留言
	sudo umount ~/ovmf_boot
	sudo mount ~/hda.img ~/ovmf_boot

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

在这里插入图片描述

结论

重启电脑之后会打印成功,不知道是因为什么引起的。后面有时间再来讨论

补:

上面的原因就是img格式的问题或者没有更新啥的
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值