Step to UEFI (68) ----- 编译一个能在 QEMU 上跑的BIOS

最近在看 《UEFI 原理与编程》,上面提到一款虚拟机可以运行指定的BIOS,那就是 QEMU (之前我也研究过如何替换 VirtualBox 的BIOS,结果非常沮丧,他不支持独立的 BIOS ,这意味即便是要在ASL中修改一些代码也要花费几个小时重新编译整个VirtualBox)。
书中对于如何在QEMU中跑起来没有详述,我花了一点时间搞定了,下面介绍一下方法:

第1步:下载最主要的软件

1.1 你需要下载 QEMU 这个虚拟机,下载的地址是

http://qemu.weilnetz.de/

我下载的版本是 qemu-w32-setup-20150925.exe

1.2 还要下载一套能够编译出供虚拟机使用的BIOS,这套代码的名字是 OVMF (刚开始我以为普通的EDK2代码即可,研究一段才发现理解错误)

下载的地址是

http://sourceforge.net/p/tianocore/edk2/ci/master/tarball?path=/OvmfPkg

第2步,编译 (大环境来说就是我一直用来编译使用 UDK2014 的环境)

2.1 解压 1.1 的代码 (我解压在名为 "OVMF" 的文件夹中)

2.2 运行 edk2setup.bat (此外还有一个 edksetup.bat ,我不清楚有什么差别)

会提示无法找到关于 python 的设置,我索性在 edk2setup.bat 开始处加入

set PYTHONHOME=C:\Python27 (当然,你需要先安装一套 python2.7 才行)

直接在批处理中添加语句,对整个编译环境没有影响

2.3 编译命令

build -a IA32 -p OvmfPkg\OvmfPkgIa32.dsc

遇到的第一个错误是无法找到 nasm ,我大概看了一下,这套代码的编译除了vc的ml还用到了 nasm 来处理汇编语言。

在 http://www.nasm.us/ 下载,我使用的版本是 nasm-2.11.08-win32。其中有用的只是 nasm.exe 我把它直接放在

C:\ovmf\BaseTools\Bin\Win32 目录下面,这个位置在编译过程中会加入到 path 中,所以一定能访问到。

遇到的第二个错误是无法找到 \asl\iasl.exe

在 https://acpica.org/downloads 可以下载到, 将 iasl.exe 放在 c:\asl\ 下面即可。

按照上述方法设置之后,即可正常编译

ovmf

2.4 运行方法

在 build 下面找到 ovmf.fd ,拷贝到 qemu 的安装目录下

命令行中运行

qemu-system-x86_64.exe -bios "OVMF.fd"

ovmf2

ovmf3

工作的视频

上面提到的工具,我放在Baidu网盘上,可以从这里下载 http://pan.baidu.com/s/1sjsZhr3 密码:uav4

如果你在具体操作中遇到任何问题可以直接给我留言,我会长期维护本文。

Step to UEFI (68) ----- 编译一个能在 QEMU 上跑的BIOS》上有 4 条评论

  1. krishna

    Hi,我研究了一下,有更好使用方式:

    //支持debug的build:
    build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -D DEBUG_ON_SERIAL_PORT

    //command:
    //-pflas bios --your bios bin
    //-serial stdio --redirect debug-message to stdio
    //-hda fat:rw:myFATdir --指向Fat32分区的某文件夹,这里我插了个Fat32的U盘
    //-net none --do not try PXE-boot
    qemu-system-x86_64.exe -pflash OVMF.fd -serial stdio -hda fat:rw:K:\temp -net none

    这样,debug也有了,也可以访问主机硬盘,不过,shell下del file不会真的删掉 。。。
    有点麻烦,不过感觉比build run的仿真程度要高。

    回复
    1. Hecmay

      想请教一下,我想判断一个DXE Driver是否启动失败,在下面添加了DEBUG(xxxxx)的信息。这个DEBUG宏输出信息从哪里可以看啊? 我用QEMU串口输出的信息只有启动UEFI Shell之后的信息,之前的根本看不到...

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注