标准应用程序工程模块

该模块是其他应用程序工程模块的基础,也是UEFI中常见的一种应用程序工程模块,标准应用程序工程模块,UefiMain就是这个模块的入口函数

EFI_STATUS
EFIAPI
UefiMain (IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable)
{UINT32 Index;Index = 0;//// Three PCD type (FeatureFlag, UINT32 and String) are used as the sample.//if (FeaturePcdGet (PcdHelloWorldPrintEnable)) {for (Index = 0; Index < PcdGet32 (PcdHelloWorldPrintTimes); Index ++) {//// Use UefiLib Print API to print string to UEFI console//Print ((CHAR16*)PcdGetPtr (PcdHelloWorldPrintString));}}return EFI_SUCCESS;
}

再来看一下.inf工程文件

[Defines]INF_VERSION                    = 0x00010005BASE_NAME                      = HelloWorldMODULE_UNI_FILE                = HelloWorld.uniFILE_GUID                      = 6987936E-ED34-44db-AE97-1FA5E4ED2116MODULE_TYPE                    = UEFI_APPLICATIONVERSION_STRING                 = 1.0ENTRY_POINT                    = UefiMain

ShellAppMain应用程序工程模块

这种应用程序能在shell中执行命令时输入指定参数,Argc是命令行参数个数,包括应用名字本身,第二个参数Argv是命令参数行列表,也就是说是第几个参数,先看一下主函数:

EFI_STATUS
EFIAPI
ShellAppMain (IN UINTN Argc,IN CHAR16 **Argv)
{EFI_STATUS      Status = EFI_SUCCESS ;UINTN    qUsbProvFileSize;//  UINT8                    Embedded_Checksum=0;UINTN                     FileSize;//CalSize;//  UINT32                    FileCheckum=0xFF;BYTE i;CHAR16        *gFileName=0;int FW_H,FW_L;int bram_base;//int   err=0;int FW_v[9];if(Argc<2) {clrscr();vShowUsage();return EFI_SUCCESS;}if(Argc>1) {clrscr();//gotoxy(1,10);for(i=1;i<Argc;i++){if((Argv[i][0]=='/') && (Argv[i][1]=='V')){FW_flag=1;  if(Argv[i][2]=='B') BRAM_flag=1;else if(Argv[i][2]=='C')    Compal_flag=1;if(Argv[i][3]=='F'){FileVer_flag=1;gFileName = Argv[i+1];BIN_Ver_offset=Argv[i+2];}else{if((i+1)<Argc) FW_CP=Argv[i+1];}break;}else if((Argv[i][0]!='/')&&(Argv[i-1][1]!='O')&&(Argv[i-1][1]!='R')&&(Argv[i-1][1]!='V')){  hasFile =1; ......

上面的代码为EC更新工具中的一部分,看一下.inf工程文件:

  INF_VERSION                    = 0x00010005BASE_NAME                      = GwiEcFlashFILE_GUID                      = 05ECD32B-E737-47ee-A504-334A79064997MODULE_TYPE                    = UEFI_APPLICATIONVERSION_STRING                 = 1.0ENTRY_POINT                    = EntryPoint

为啥是EntryPoint呢,因为ShellAppMain函数是再EntryPoint函数中运行的

EFI_STATUS
EFIAPI
EntryPoint (IN EFI_HANDLE        ImageHandle,IN EFI_SYSTEM_TABLE  *SystemTable)
{EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol;EFI_SHELL_INTERFACE           *EfiShellInterface;CHAR16                        *Argv[] = {L"GwiEcFlash.efi",L"ec.bin"};EFI_STATUS                    Status;EfiShellParametersProtocol = NULL;EfiShellInterface = NULL;Status = SystemTable->BootServices->OpenProtocol(ImageHandle,&gEfiShellParametersProtocolGuid,(VOID **)&EfiShellParametersProtocol,ImageHandle,NULL,EFI_OPEN_PROTOCOL_GET_PROTOCOL);if (!EFI_ERROR(Status)) {//// use shell 2.0 interface//Status = ShellAppMain (EfiShellParametersProtocol->Argc,EfiShellParametersProtocol->Argv);} else {//// try to get shell 1.0 interface instead.//Status = SystemTable->BootServices->OpenProtocol(ImageHandle,&gEfiShellInterfaceGuid,(VOID **)&EfiShellInterface,ImageHandle,NULL,EFI_OPEN_PROTOCOL_GET_PROTOCOL);if (!EFI_ERROR(Status)) {//// use shell 1.0 interface//Status = ShellAppMain (EfiShellInterface->Argc,EfiShellInterface->Argv);} else {// Update BIOS with fixed file nameStatus = ShellAppMain (2, Argv);}}

main应用程序工程模块

这个应用程序工程模块和shellappmain应用程序工程模块类似,不过不包含UefiShellCEntryLib.c

int
EFIAPI
main (IN int argc,IN char **argv)
{UINTN  qUsbProvFileSize;FILE *fi;BYTE i;int FW_H,FW_L;int bram_base;
......
[Defines]INF_VERSION                    = 0x00010006BASE_NAME                      = GwiEcFlashFILE_GUID                      = 05ECD32B-E737-47ee-A504-334A79064997MODULE_TYPE                    = UEFI_APPLICATIONVERSION_STRING                 = 1.0ENTRY_POINT                    = ShellCEntryLib

符合UEFI驱动模型的驱动

所有符合UEFI驱动模型的驱动,都要遵循EFI_DRIVER_BINDING_PROTOCOL,比如一些GOP的driver

EFI_DRIVER_BINDING_PROTOCOL gSmi768DriverBinding = {Smi768ControllerDriverSupported,Smi768ControllerDriverStart,Smi768ControllerDriverStop,0x10,NULL,NULL
};

DXE驱动模块

DXE环境下运行的驱动,此类驱动不遵循UEFI驱动模型

UEFI原理与编程实践--UEFI工程模块文件相关推荐

  1. UEFI原理与编程实践--UEFI驱动模型之显卡(UEFI方向)驱动分析

    拆开一台国产电脑,会发现,很多重要芯片,其实已经国产化了,CPU.GPU.电源管理芯片等等,刚做了一下GOP的笔记,回头想想,之前包入厂商的显卡驱动一直没怎么关注他们的运行逻辑是什么,那么,这篇文章就 ...

  2. UEFI原理与编程实践--UEFI系统的启动过程

    看图粗略说一下: SEC: 安全验证阶段,这个阶段,需要用Assembly做一些 C 无法处理的工作,C语言无法处理CPU的特殊寄存器.让CPU进入Protected Mode(Flat Mode)的 ...

  3. UEFI原理与编程实践--EFI System Table中的输入输出

    这一节UEFI原理与编程的书籍里面貌似没有提到,不过在我上次使用飞腾源代码增加功能的过程中发现logo界面的左上角有个光标,后来发现源代码也有,这就让有强迫症的人非常不爽啦,这个光标怎么来的呢,我找了 ...

  4. UEFI原理与编程实践--Device Path

    系统中的每个设备都有一个唯一的路径.例如,每次进入shell时,都会打印出系统中的硬盘设备以及设备路径.针对硬盘和文件系统,将在BIOS学习实战中通过获取U盘路径,读取BIOS文件,然后进行更新的具体 ...

  5. UEFI原理与编程实践--PCD的使用

    PCD说白了就是个全局变量,就看你怎么去调用了,先看一下它的定义用法: 然后再看一下通过编译后有AutoGen生成的一个定义: PCD的类型有很多种,但是经常使用的也就是静态PCD与动态PCD 静态P ...

  6. UEFI原理与编程实践--Variable的使用

    基础知识 在书中本章主要说明了系统表,启动服务,运行时服务. 挑简单明了的:系统表(gST)的使用方法: SystemTable->BootServes指向系统的启动服务表,ConIn/ConO ...

  7. UEFI原理与编程实践--硬盘相关的Protocol:BlockIo/DiskIo/DiskInfo/PassThrough

    硬盘是一种块设备,所以每个硬盘设备控制器都安装有一个BlockIo实例.一个BlockIo2实例,然后还安装了一个DiskIo实例.一个DiskIo2实例,这两者的区别就是BlockIo只能按块读写设 ...

  8. UEFI原理与编程(一)

    第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述: 缩略词 全名 描述 UEFI Unified Extensi ...

  9. 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...

    7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...

最新文章

  1. jdk自带的反编译在那个包下_求教JDK中的反编译命令
  2. P1339 [USACO09OCT]热浪Heat Wave(SPFA)
  3. 字符串equal_Java String:字符串常量池
  4. CSU 1558 和与积
  5. Linux 7 关闭、禁用防火墙服务
  6. SpringBoot定时器
  7. 中小企业上云多地域办公组网(SAG)解决方案
  8. [蓝桥] 基础练习 十进制转十六进制 (java)
  9. 2.SOA架构:服务和微服务分析及设计--- 理解面向服务架构
  10. 太强了,头发丝完整保留!华盛顿大学研究员开源的实时视频抠图工具
  11. div圆角,阴影效果。
  12. 大学生计算机学科竞赛a类,全国大学生学科竞赛分类名单
  13. AES加解密 随机向量 密文一次一变 C#与PHP 程序加解密互通
  14. 皓月战地3不显示服务器,【求助】登录皓月服出错。。
  15. 计算机如何进入桌面,电脑如何设置开机直接进入桌面 开机直接进入桌面设置...
  16. Visual Studio Code安装(软件及插件)教程
  17. 无人机c语言程序设计,c语言程序设计课程设计单元设计教案).pdf
  18. 怎么把ppt转化为word文档格式
  19. 猫眼郑志昊:互联网没有价值网,就没有下半场
  20. 数码管显示数字的段码表共阳_《显示器件应用分析精粹》之(3)数码管静态显示...

热门文章

  1. 2022 CCF中国软件大会(CCF ChinaSoft)“人工智能安全专刊”论坛成功召开
  2. PHP--有道(百度)文字或语句转MP3音频文件
  3. 电脑新安装的win10系统,设置宽带连接的方法
  4. 【Word】获取SCI文献中高清EMF格式图片的方法
  5. python搭建_简单_交易系统【转载】
  6. 设备如何使用go sdk轻松连接华为云IoT平台
  7. 考虑不同充电需求的电动汽车协调充电调度方法 提出了一种电动汽车(EV)的协调充电调度方法
  8. nodejs京东接口分析系列-实现京东自动化功能 之 自动下单
  9. 微信小程序上拉触底事件函数onReachBottom不触发的解决方案
  10. B-树详细分析及B树B-树B+树B*树概念