一套标准,定义了一堆接口,提供给引导程序使用。
事实标准是Intel写的 https://github.com/tianocore/edk2 ,提供了很多现成的驱动可以使用
十分建议在分析UEFI题目的时候把源码clone下来,许多API可以在里面找到用法
这项目一股M$味,配置是INF,用GUID标识,文件格式是PE,调用约定是Microsoft x64,API也有点Windows的感觉
所有的API返回值类型基本都是 EFI_STATUS
,用于标识操作是否成功,具体错误码信息可以参考:
4. Status Codes — UEFI Specification 2.10 documentation
例如 0x800000000000000f 先看 Range 属于
Error codes reserved for use by UEFI main spec.
,再根据低bit 0xf 查到EFI_ACCESS_DENIED
。
首先最重要的结构就是 SystemTable
,从里面读出BootServices
这个结构的指针(源码里这部分可能被宏藏起来了,变量gBS
就是BootServices
指针)
内部的 LocateProtocol
是一个最常用的API,用于加载其他 Protocol,类似于 Windows 下的 LoadLibrary ,第三个参数的类型根据 Protocol 变化,但基本都是一个struct里面一堆函数指针。
typedef
EFI_STATUS
(EFIAPI *EFI_LOCATE_PROTOCOL)(
IN EFI_GUID *Protocol,
IN VOID *Registration OPTIONAL,
OUT VOID **Interface
);
其他更多API列表可以参考:7. Services — Boot Services — UEFI Specification 2.10 documentation