UEFI开发学习14 – 使用QEMU

前言

平常我们测试efi app使用的是NT32,Linux下则是Emulator,它们都只是简单的模拟出一个UEFI的环境而已,如果我们要装一个OS,那它们就做不到了。下面介绍一个既可以模拟UEFI也可以当虚拟机的工具:QEMU。

QEMU区别于virtual box和WMware的就是它是一个可定制化的虚拟机,包括它使用的BIOS。而且还可以模拟多种硬件平台,比如AARCH64,MIPS,ARM等。基于此,我们就可以用它来作UEFI开发学习使用。

认识QEMU

QEMU官网下载最新安装包安装,安装完毕后打开安装目录。目录中主要有两部分需要了解。

1.固件部分

这是各平台对应的UEFI固件,启动QEMU的时候可选择加载。

2.QEMU程序

以qemu-system命名前缀的是模拟各个平台程序的入口,如要模拟ARM平台,则运行qemu-system-arm.exe。

启动QEMU

1.在该目录打开一个命令行窗口或Power Shell,运行qemu-system-x86_64.exe,运行后如下:

这种情况下QEMU加载的是Legacy BIOS,位于目录下的bios-256k.bin,如果将该文件改名,就会提示找不到此文件,QEMU便启动不了。

这个BIOS也是一个开源项目,

地址:https://github.com/qemu/seabios

官网:https://www.seabios.org/SeaBIOS

2.接下来使用UEFI固件启动,可通过-pflash指定,

qemu-system-x86_64.exe -pflash .\edk2-x86_64-code.fd

启动后会使用默认的PXE启动,时间比较久,通过参数-net none可移除PXE启动,即

qemu-system-x86_64.exe -pflash .\edk2-x86_64-code.fd -net none

这样很快就进入Shell了。

此时怎么像nt32那样可以将某个目录当作磁盘来访问呢?可以用<-hda fat:rw:目录>来指定,如:

qemu-system-x86_64.exe -pflash .\edk2-x86_64-code.fd -net none -hda fat:rw:C:\ASL

这里我设置的是C:\ASL,注意一定要有目录名

启动后便可看到fs0,这样就可以像nt32那样使用了。

3.自己编译一个UEFI固件。在UDK2018或最新的EDK2源码中,都含有一个OvmfPkg,这就是为QEMU虚拟硬件定制的UEFI固件,编译后就可以在QEMU中启动。编译命令:

build -p OvmfPkg/OvmfPkgX64.dsc

这是RELEASE版本,DEBUG版本需要加上参数-D DEBUG_ON_SERIAL_PORT ,即:

build -p OvmfPkg/OvmfPkgX64.dsc -D DEBUG_ON_SERIAL_PORT

DEBUG版本运行的时候也要加参数才会有打印,如下:

qemu-system-x86_64.exe -pflash .\Ovmf.fd -net none -hda fat:rw:C:\ASL -serial stdio

为了更真实模拟串口打印,可以使用虚拟串口工具添加两个串口,一个供QEMU使用,一个用来接收串口数据。QEMU启动参数也要修改,由-serial  stdio改为-serial  COMx,COMx为串口号。

安装系统

这里举例安装一个Windows 7

1.创建一个20G的虚拟磁盘

qemu-img.exe create -f qcow G:\Workspace\VB\win7.img 20G

2.加载ISO镜像启动安装

qemu-system-x86_64.exe ^
-cpu Skylake-Client-v1 ^
-cdrom G:\Workspace\OS\Win7\cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso ^
-hda G:\Workspace\VB\win7.img ^
-m 2048 ^
-net nic ^
-net user ^
-pflash edk2-x86_64-code.fd

将以上命令中的目录修改下,保存成bat文件,然后在命令行运行即可,“^” 在bat文件中用于换行连接

参数说明:

-cpu 选择虚拟的CPU型号,具体型号可加参数-cpu help查询

-cdrom 虚拟光驱文件(ISO)路径

-hda 加载虚拟硬盘

-m 分配内存

-net 网络设置

启动后便可安装了,我的这里大概30分钟可安装完毕。

如果要复制文件到OS,可用UltraISO制作成ISO加载即可。

至此本篇结束

附件

UltraISO:https://wwa.lanzoui.com/i1kUZnifabc

Windows7镜像:https://msdn.itellyou.cn/

虚拟串口:https://wwa.lanzoui.com/iYdzSnj94bg

版权声明:
作者:bin
链接:https://ay123.net/mystudy/uefi/1004/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
UEFI开发学习14 – 使用QEMU
前言 平常我们测试efi app使用的是NT32,Linux下则是Emulator,它们都只是简单的模拟出一个UEFI的环境而已,如果我们要装一个OS,那它们就做不到了。下面介绍……
<<上一篇
下一篇>>