此教程用于UEFI EDK2代码的研究,虽然EDK2框架代码开源,但是都是在模拟器上跑仿真,差点意思,搞过嵌入式的应该有一个共识,是骡子是马,你得把板子点亮啊。MinnowBoard MAX单板是intel10多年前发布的软硬件全部开源的x86单板,UEFI BIOS部分代码也是开源的(部分和芯片配置相关的代码是以二进制文件的形式发布),可以用于在实际单板上调试学习EDK2代码。
简单介绍下探索过程,UEFI BIOS代码编译的整个流程断断续续耗费我三个多月,是一场心力交瘁持久战。
第一阶段,EDK2 platform上是有MinnowBoard MAX单板UEFI BIOS代码工程的,但是更新停止在2019年,后面无人维护了。下载最新EDK2 工程,按照页面编译步骤来,一堆报错。估计因为没人维护了,各种模块的更新根本没人去考虑验证这块板子。前面我各种尝试修改无果,然后我尝试把代码回退到2019年8月,进行编译,各种编译工具对应回退,还是不行。没办法我还是基于最新的EDK2代码进行修改PlatformPkgX64.dsc文件,修改过程中,我还发现一个老六在修改DEBUG函数标识时,使用整体字符串查找替代法,还通过了review,把一些函数都给破坏了。经过一堆修改后,编译成功了,得到了想要的VLV.fd文件,通过bios编程烧写器烧录到板子上,启动一半报错卡住了,显示HOB SMMbase地址找不到,找到源码对应位置,研究几天无果放弃,毕竟不是业内人士。
第二阶段,intel官网上其实是有发布minnowboard max单板uefi固件的,时间是2018年11月份。根据这个线索回退代码到2018年11月,发现缺少二进制包,但是这个包的下载链接失效了,百度、必应、谷歌找了一圈也没发现。但是功夫不负有心人,机缘巧合之下我通过edk2-platform的提交记录,突然发现一个人的仓库里有2018年编译uefi固件的全套代码,赶紧下载进行编译验证,烧录到单板,成功启动到uefi shell界面。
MinnowBoard MAX单板资料:
http://minnowboard.outof.biz/
https://www.intel.com/content/www/us/en/developer/articles/tool/minnowboard-maxturbot-uefi-firmware.html
EDK2 代码工程:https://github.com/Laurie0131/PlatformBuildLab_FW
具体步骤待完成。