由前文我们知道如何制作qemu虚拟盘了,那么对于UEFI的开发者,也可以通过虚拟盘来模拟启动过程,或者方便自己uefi app的调试。当我们制作好了虚拟盘之后,后续可以通过编译生成uefi app,然后把app放到虚拟盘中并更新,即可快速调试和验证,这种方式的优点是不用重复编译整个UEFI OVMF系统。
QEMU可以支持很多种文件格式,下面将以qcow2和raw两种格式的镜像为例进行讲解。需要特别注意的是,UEFI能识别到的文件系统类型比较有限,我们建议格式化镜像时都使用VFAT格式。注意这里的VFAT和前面说的qcow2和raw并不冲突,两者一个是镜像中的文件系统,一个是镜像的封装格式。
- qcow2格式的镜像文件
sudo modprobe nbd max_part=16
qemu-img create -f qcow2 hda.img 10M #创建qcow2虚拟盘
sudo qemu-nbd -c /dev/nbd0 ~/hda.img #映射nbd设备
mkfs -t vfat /dev/nbd0 #格式化该设备为vfat格式
sudo mount /dev/nbd0 /mnt/image #挂载nbd设备
......(work in mnt dir)
sudo umount /mnt/image #卸载nbd设备
sudo qemu-nbd -d /dev/nbd0 #解除nbd映射
- 采用dd命令生成的镜像文件(raw镜像)
dd if=/dev/zero of=~/hda.img bs=1 count=10M
mkfs -t vfat ~/hda.img
losetup /dev/loop0 ~/hda.img #映射loop设备
sudo mount /dev/loop0 /mnt/image #挂载loop设备
......(work in mnt dir)
umount /mnt/image #卸载loop设备
losetup -d /dev/loop0 #解除loop映射
- 使用qemu加载对应的虚拟盘
这里我们使用虚拟OVMF.fd作为uefi调试固件:
qemu-system-x86_64 -bios "path/to/OVMF.fd" -hda hda.img
运行的效果图如下: