EFI Protocol 的分析
来源:互联网 发布:中国移动 大数据 优势 编辑:程序博客网 时间:2024/05/17 00:06
Protocol顾名思义,协议,其实就是一些函数和数据的集合,这些函数集合在一起视乎就形成了协议。我们在使用protocal的时候需要先install这个protocal,install之前会先实现这些函数,和数据,把他们进行赋值。install一个protocal时相当于吧这些函数的指针传递给了一个handle,我们要使用这些实例,只需要local这个protocal找到这个handle就可以找到这些实例去使用了。
例如:
//
//定义protocal 结构体
//
typedef struct _EFI_CPU_ARCH_PROTOCOL {
EFI_CPU_FLUSH_DATA_CACHE FlushDataCache;
EFI_CPU_ENABLE_INTERRUPT EnableInterrupt;
EFI_CPU_DISABLE_INTERRUPT DisableInterrupt;
EFI_CPU_GET_INTERRUPT_STATE GetInterruptState;
EFI_CPU_INIT Init;
EFI_CPU_REGISTER_INTERRUPT_HANDLER RegisterInterruptHandler;
EFI_CPU_GET_TIMER_VALUE GetTimerValue;
EFI_CPU_SET_MEMORY_ATTRIBUTES SetMemoryAttributes;
UINT32 NumberOfTimers;
UINT32 DmaBufferAlignment;
} EFI_CPU_ARCH_PROTOCOL;
//
//给结构体成员赋值
//
EFI_CPU_ARCH_PROTOCOL mCpu = {
CpuFlushCpuDataCache,
CpuEnableInterrupt,
CpuDisableInterrupt,
CpuGetInterruptState,
CpuInit,
CpuRegisterInterruptHandler,
CpuGetTimerValue,
CpuSetMemoryAttributes,
1, // NumberOfTimers
4, // DmaBufferAlignment
};
//
//把protocal安装到NewHandle上,且用gEfiCpuArchProtocolGuid来标注这个protocal
//
Status = gBS->InstallProtocolInterface (
&NewHandle,
&gEfiCpuArchProtocolGuid,
EFI_NATIVE_INTERFACE,
&gCpu
);
//
//使用要使用这个protocal,需要通过LocateProtocol 来找到这个protocal,把地址付给CpuArch
//
Status = gBS->LocateProtocol (
&gEfiCpuArchProtocolGuid,
NULL,
&CpuArch
);
CpuArch->GetInterruptState (
CpuArch,
&InterruptState
);
而这些InstallProtocolInterface 和locateprotocol 函数是如何如何是如何实现的,就是通过链表进行添加查找的。
- EFI Protocol 的分析
- EFI Protocol VS C++
- 关于EFI中handle ,protocol ,devicepath ,controller connect device的理解(Copy)
- 浅分析efi、bootmgr
- google的protocol buffer 分析
- EFI 函数的问题
- EFI
- efi
- Protocol Buffers的应用与分析
- Protocol Buffers的应用与分析
- Protocol Buffers的应用与分析
- Protocol Buffers的应用与分析
- efi下的的shell
- EFI相关的一些链接
- 修改 EFI EDK2 的logo
- 关于EFI的一点介绍
- MACBook EFI升级的后患
- efi的sys文件系统接口
- sqlnet.expire_time and IDLE_TIME
- 网游服务器-文摘
- Windowsx小技巧[收集中...]
- 终于找到IBM JCOP tooks3.1.1.b(中国是很难找的到哦?!现在加破解方法)
- 从 JSF2 上下文 的到 servlet相关 session request
- EFI Protocol 的分析
- php 过滤 html标签
- 无光盘情况下安装Linux和XP的双系统。
- 三栏先加载中栏
- 抽象工厂实例(随笔日记)
- Redhat 5.6 ES Intel编译器 安装WRF 的全过程
- CABAC之手把手教你编码
- ld.so.1: test: fatal: libstdc++.so.6: open failed: No such file or directory.
- free&delete&delete[]