此教程用于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
具體步驟待完成。