![aaf96a2b4c674d645f66f4d8d0c87e3b.png](https://img-blog.csdnimg.cn/img_convert/aaf96a2b4c674d645f66f4d8d0c87e3b.png)
说到UEFI开发,我相信大部分人能想到的场景是,一个工程师,面对着硕大的屏幕满满的代码,主机上连着一个DediProg SPI烧写器,旁边放着的,要么是一台测试机器,要么干脆就是奇丑无比的开发板,工程师不停地修改着代码,编译,等待,用镊子小心地从测试机上拿出SPI ROM,放到DediProg上,点击烧写,等待,烧写完成后,用镊子小心地把SPI ROM放到测试机上,检查无误之后上电,打开log窗口,等待。。。分析。。。
以上是一个UEFI工程师最常见的工作场景,每一次验证,都要花费大量的时间,通常都在十分钟以上,如果机器编译速度不够,二三十分钟也是有可能的。如果每天工作八小时,也就意味着只能做十几次试验,基本上很多时间都用来等待了。
![9d1f0ba8e12e7070f89e24f0cc5b2538.png](https://img-blog.csdnimg.cn/img_convert/9d1f0ba8e12e7070f89e24f0cc5b2538.png)
实际上,如果只是开发一个软件,而不是调试硬件相关功能的话,其实是不需要用测试机或者开发板的。尽管我没有统计数据,但是实际上据我观察,除Intel/AMD这样的芯片厂之外,其他大部分UEFI工程师有至少一半的工作是不需要一个真正的硬件的。
所以如果可以脱离硬件去开发UEFI的话,会大大提高效率,省下很多时间和精力。
另外,相信有很多刚刚入门UEFI的人,或者在校的学生,或者没有条件搞到全套开发硬件的人,在学习了一段时间UEFI之后想做实验,但苦于找不到平台验证,这个时候,一套模拟的平台就显得尤为必要了,不仅仅提高效率,而是给了很多入门者甚至爱好者一个机会去接触UEFI。
其实这件事在早就有人做了,Intel的工程师基于edk2创建了一个叫做OVMF(Open Virtual
Machine Firmware)的项目,旨在为UEFI的开发提供虚拟机的支持。通过OVMF,我们可以将编译好的BIOS跑在Qemu虚拟机上。
那么,接下来我就一步一步介绍如何使用OVMF。
看完我这篇文章,不论你有没有UEFI背景,你只需要一台电脑,就可以无障碍地开发你的第一个UEFI程序。
一 开发环境
OVMF的开源版本默认是运行一个bash shell在Linux上编译,所以这篇文章我就写Linux下的开发。
相信大部分UEFI工程师都在windows环境下开发,Windows下使用OVMF也是可以的,不过我还没有自己去搭建过,手头的工程是公司内部资源,不便于在互联网公开。
开发环境的搭建主要包括两个部分:Linux OS的配置,代码准备。
关于Linux系统,我个人倾向于装在虚拟机了,一方面省了双系统切换的麻烦,另一方面,windows自带的wls用qemu不是很方便,所以装虚拟机是最简单的方法。如何装虚拟机我就不废话了,装好之后运行下面的命令安装必要的工具和库。
sudo apt-get build-essential uuid-dev git gcc python3-distutils acpica-tools nasm qemu
接下来就是从github上拿最新的edk2的代码