EDK2 Overview
最近在移BL到UEFI, 来大概看下基础。
UEFI(Unified Extensible Firmware Interface)是Intel提出的一种规范(specification),由PC BIOS而来,如下图(阿桑的wikipedia打不开?画个txt pic),介于OS和FW之间,QCOM Android BL似乎用它来代替LK。UEFI is based on EFI。
------ |
TianoCore是一种UEFI的开源实现, edk/edk2(based on edk)一种开发环境for UEFI,用的tinaocore。
微软的Project Mu是另一个实现,edk2的变种?
Overview
edk2里的代码最小组成都是按模块(module)来划分,n个模块可以组成一个包(package),平台(platform)是一种特殊的package,一般都是编译的入口。
module有个inf文件描述这个module,package有个dec文件,platform则是dsc文件。还有个fdf文件用作flash用。
module可以是application,library,or driver。
Library有个class和instance,class就是一个抽象,instance负责具体实现,不同平台可以定义不同实现。
Driver只接触了DXE drv, 提供protocol供其他module使用。
Application和Driver区别是是否退出。
package之间还可以互相引用,just like C calling eath other.
另外feature宏用PCD来代替,看个例子:
[PcdsFixedAtBuild.common] |
EFI_STATUS |
just like Linux kernel IS_ENABLED()
,rt?
plz remember library和pcd都是给module自定义用的。
makefile在edk2是中间文件了,可以用inf/dsc提供的build option来修改。
ok,就这么多,其他用法看代码足矣。
参考文档
- https://uefi.org/
- https://www.tianocore.org/
- https://github.com/tianocore/tianocore.github.io/wiki
- EDK_II Module Writer_s Guide_0_7.pdf
- EDK_II_UserManual_0_7.pdf
- edk-ii-dec-specification.pdf
- edk-ii-dsc-specification.pdf
- edk-ii-inf-specification.pdf
- edk-ii-pcd-specification.pdf
- https://microsoft.github.io/mu/
版权声明:本站所有文章均采用 CC BY-NC-SA 4.0 CN 许可协议。转载请注明原文链接!