最近有想在UEFI SHELL下实现所有设备的测试和访问,而且要做的平台通用性,UEFI的protocol很好支持,但是很多硬件的驱动是在PEI阶段或者没有加入规范,于是按照driver的形式写这些驱动,需要调用的时候去找这些driver的GUID来调用,这样整个调用框架不变,只要每次加载不同平台的driver就可以。有点类似linux的思路,下面代码均载录EDK SHELL。
1、首先,定义一个GUID,这个GUID是唯一的,并且不能重复,以后就是通过GUID来找这个Driver。
#define EFI_CPU_ARCH_PROTOCOL_GUID \
{ 0x26baccb1, 0x6f42, 0x11d4, {0xbc, 0xe7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
2、然后定义一个方法的集合,比如EnableInterrupt、DisableInterrupt。这里的EnableInterrupt、DisableInterrupt是函数指针,具体的实现后面会讲到
typedef struct _EFI_CPU_ARCH_PROTOCOL EFI_CPU_ARCH_PROTOCOL;
///
/// The EFI_CPU_ARCH_PROTOCOL is used to abstract processor-specific functions from the DXE
/// Founda