UEFI是什么?
很多同学都对 UEFI 有一个误解,“ UEFI就是 BIOS 和传统 BIOS 几乎无区别” ,“ UEFI 是系统引导方式”。
UEFI 全称 Unified Extensible Firmware Interface (统一可扩展固件接口),UEFI在功能上更接近于操作系统,甚至 NVMe 组织将 UEFI 和诸如 Windos 、 Linux 等操作系统划为一“类”。厂商将其称为 “BIOS” 是为了便于用户理解。
开发系统环境的选择——Linux
这里笔者推荐使用Linux,主要理由如下
1.微软Windows环境搭建较麻烦,如果是EDK不支持的VS版本需要手动配置很多环境变量,EDK 2(一个全面的UEFI开发环境,相较于其他EFI环境,最亮的特点就是支持ARM平台)更新适配Windows过慢;
2.Windows支持的GNU工具很多都是老掉牙的版本[待证实];
3.Linux基础工具安装便捷;
4.Linux下EDK 2的问题更易于排除。
以Ubuntu-21.10为例:
虚拟机寻址会受到限制,由虚拟机平台提供相应的优化,例如VMware只提供给我们256MB自由发挥。UEFI 标准规定的2GB以后的空间载入系统加载器,256MB远远不足我们使用来开发标准UEFI程序。所属 Windows 的 UEFI 程序并未按照UEFI规范编写,因为 Windows 支持仅有2GB的设备。
写这篇文章的原因:
1.市面上的教程都不是最新版本的,在实践过程中会难免有不同,甚至是不适用。(本文章作于2021年末 2022年初)
2.多数问题的排除与解决较难
3.国内相关文章是有,不过他们不是复制的就是抄书,基本上对于GCC11环境无助
4.写这篇文章的主要目的还是希望能帮助其他人输入build就能看见Done(EDK 2编译成功的标准)
固件开发应使用实体机进行调试(https://blog.csdn.net/r77683962/article/details/118640380)
安装工具
代码库工具
汇编器、编译器与工具
UI库
1.获取EDK 2代码
更新Submodule
2.修改配置文件
文件~/edk2/Conf/target.txt
其他项看着改,下面是必须改的。根据要输出的目标文件进行修改。
3.编译BaseTools
BaseTools的源码是没有Brotli模块的,需要自行下载保存到如下目录
~/edk2-master/Source/C/BrotliCompress/Brotli
[在谷歌的Git](https://github.com/google/brotli/blob/666c3280cc11dc433c303d79a83d4ffbdd12cc8d/LICENSE)
需要注意的是GCC11在使用https://github.com/google/brotli的代码时可能会出现类型不正确无法编译的等问题。如果你使用的平台安装的是GCC11,则应做处理(全部按照文章上方所提所做的话,Ubuntu安装的是GCC11)。
解决方案如下:
安装[brotli的另一个分支的代码](https://github.com/google/brotli/tree/f4153a09f87cbb9c826d8fc12c74642bb2d879ea)
[参考文章](https://github.com/BobCF/edk2/tree/brotli2/BaseTools/Source/C/BrotliCompress)
并修改Makefile和GNUmakefile
Makefile:
修改Common_Obj为:
ENC_Obj中添加:
GNUmakefile:
在OBJECTS下添加:
4.编译模拟器
还要创建灵魂文件,不起作用,但没他EDK2又不工作
检查GCC输出错误,我的GCC报错是找不到/usr/lib/gcc/X86_64-linux-gnu/10
(不同安装方式位置可能不同)
可以知道我们安装的是 11,只有一个 gcc11 的库文件,而根据编译报错:需求 gcc10 库文件
返回EDK2目录
重新进入edk2文件夹
启动GOP虚拟机
Done 是EDK 2编译成功的标志
缺少的包一般可以通过 https://github.com/tianocore/edk2 下方的表查到,除了EDK2提供的Brotli包,暂时还没有别的问题
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪