2015-07   北京海淀区张俊浩

->6.1 MyHelloWorld.c源程序/简析

->6.2 MyHelloWorld.inf源程序/简析

6.1 MyHelloWorld.c源程序/简析

/** @file

Brief Description of UEFI MyHelloWorld

Detailed Description of UEFI MyHelloWorld

Copyright for Junhao zhangjunhaolaiwu@163.com

License for UEFI MyHelloWorld

**/

/**

一般来说,标准应用程序至少要包含以下两个部分。

(1)头文件:所有的UEFI程序都要包含头文件Uefi.h。因为Uefi.h定义了UEFI基本数据类型及核心数据结构。

(2)入口函数:UEFI标准应用程序的入口函数通常是UefiMain(入口函数可以通过本模块INF文件ENTRY_POINT指定)。

UefiMain是一个约定俗成的函数名。虽然入口函数的函数名可以变,但其函数签名(即返回值类型和参数列表)不能变。

**/

#include

#include

#include

/**

as the real entry point for the application.

@param[in] ImageHandle The firmware allocated handle for the EFI image.

//.efi文件(UEFI应用程序或者驱动程序)加载到内存后生成的对象称Image。

//ImageHandle是Image对象的句柄,作为模块入口函数参数,表示模块自身加载到内存后生成的Image对象。

@param[in] SystemTable A pointer to the EFI System Table.

//SystemTable指向UEFI内核一个全局结构体的指针,是程序同UEFI内核交互的桥梁

@retval EFI_SUCCESS The entry point is executed successfully.

//返回值EFI_SUCCESS为预定义常量值为0,表示没有错误的状态值。

@retval other Some error occurs when executing this entry point.

//返回值为非EFI_SUCCESS,即非0值表示执行入口函数时发生了错误

Print:向标准输出设备打印字符串是通过库函数Print来实现的。

**/

EFI_STATUS UefiMain(

IN EFI_HANDLE ImageHandle,

IN EFI_SYSTEM_TABLE *SystemTable

)

{

Print(L"Hello World from Junhao by EDKII!\n");

return EFI_SUCCESS;

}

6.2 MyHelloWorld.inf源程序/简析

## @file

# Brief Description of UEFI MyHelloWorld

#

# Detailed Description of UEFI MyWizardDriver

#

# Copyright for Junhao zhangjunhaolaiwu@163.com

#

# License for UEFI MyHelloWorld

#

##

#工程文件分为很多块,每个块以"[块名]"开头,"[块名]"必须单独占一行。

#[Defines]、[Sources]、[Packages]、[LibraryClasses]是工程文件的必须块。

#其他块并不是每个模块一定要编写的块。

#[Defines]块用于定义模块的属性和其他变量,块内定义的变量可以被其他块引用。

#(1)属性定义语法:属性名 = 属性值

#(2)块内属性包括:如下

#INF_VERSION:INF标准的版本。EDKII的build会检查INF_VERSION的值并根据这个值解释.inf文件。

#最新的INF标准版本号为0x00010006,前半部分为主版本号,后半部分为次版本号。通常设置为0x00010005即可。

#INF_VERSION版本号便于EDKII系统升级。

#BASE_NAME:模块名字符串,不能包含空格。它通常也是输出文件名字。

#例如:BASE_NAME = MyHelloWorld,则最终生成的文件为MyHelloWorld.efi

#FILE_GUID:每个工程文件必须有一个8-4-4-4-12格式的GUID,用于生成固件。

#可以通过 http://www.guidgen.com/获得GUID。

#MODULE_TYPE:定义模块的模块类型,可以是SEC/PEI_CORE/PEIM/DXE_CORE/DXE_SAL_DRIVER/

#DXE_SMM_DRIVER/UEFI_DRIVER/DXE_DRIVER/DXE_RUNTIME_DRIVER/UEFI_APPLICATION/BASE中的一个。

#对于标准应用程序工程模块来说,为UEFI_APPLICATION类。

#ENTRY_POINT:定义模块函数的入口函数。UefiMain是模块的入口函数就是ENTRY_POINT设定的。

[Defines]

INF_VERSION = 0x00010005

BASE_NAME = MyHelloWorld

FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d229d6943c8

MODULE_TYPE = UEFI_APPLICATION

VERSION_STRING = 1.0

ENTRY_POINT = UefiMain

#[Sources]块用于列出模块所有的源文件和资源文件。

#(1)语法:块内每行表示一个文件,文件使用相对路径,根路径是工程文件所在的目录。

#本示例MyHelloWorld标准应用程序工程模块只含有一个源文件MyHelloWorld.c。

#(2)体系结构相关块:[Sources.$(Arch)]

#.$(Arch)是可选项,可以是IA32/X64/IPF/EBC/ARM中的一个,表示本模块适用的体系结构。

#

#例如标准应用程序工程的[Sources]如下:

#

#[Sources]

#Common.c

#[Sources.IA32]

#Cpu32.c

#[Sources.X64]

#Cpu64.c

#如果build命令选项中使用了-a IA32选项编译32位模块的时候,工程将包含[Sources]和[Sources.IA32]中的源文件。

#如果build命令选项中使用了-a X64 选项编译64位模块的时候,工程将包含[Sources]和[Sources.X64] 中的源文件。

#

#(3)编译工具链相关的源文件

#文件名后会有‘|’号,‘|’后面跟工具链的名字,例如:

#[Sources]

#TimerWin.c | MSFT

#TimerLinux.c | GCC

#表示TimerWin.c仅在使用Visual Studio编译器时有效,TimerLinux.c仅在使用GCC编译器时有效。

[Sources]

MyHelloWorld.c

#[Packages]块列出本模块引用到的所有的包的包声明文件(.dec)。

#(1)语法:每行列出一个文件,文件使用相对路径,相对路径的根路径为EDKII的根目录。

#若[Sources]块内列出了源文件,则在[Packages]块必须列出MdePkg/MdePkg.dec,并将其放在本块首。

#本示例MyHelloWorld模块中,MyHelloWorld.c仅仅引用了MdePkg中的头文件Uefi.h,因而仅列出MdePkg/MdePkg.dec即可。

[Packages]

MdePkg/MdePkg.dec

#[LibraryClasses]列出本模块需要链接的库模块。

#(1)语法;每一行声明一个要链接的库。

#(2)常用库:应用程序工程模块必须链接UefiApplicationEntryPoint库;驱动模块必须链接UefiDriverEntryPoint库。

#本示例MyHelloWorld.c中还用到了Print()函数,所以还需要链接UefiLib库。

[LibraryClasses]

UefiApplicationEntryPoint

UefiLib

#[Protocols]列出本模块使用的Protocol,列出的是Protocol对应的GUID。如果未使用Protocol模块可以为空。

[Protocols]

#[Ppis]用于定义源文件中用到的PPI(PPI是PEI阶段PEI模块之间通信的接口),语法类似[Protocols]。

[Ppis]

#[Guids]列出本模块用到的GUID。

[Guids]

#[BuildOptions]指定本模块的编译和链接选项。

[BuildOptions]

#Pcd:Platform Configuration Database,平台配置数据库。

#[Pcd]用于列出本模块用到的Pcd变量,这些Pcd变量可以被整个UEFI系统访问。

[Pcd]

#[PcdEx]用于列出本模块用到的Pcd变量,这些Pcd变量可以被整个UEFI系统访问。

[PcdEx]

#[FixedPcd]用于列出本模块用到的Pcd编译期常量。

[FixedPcd]

#[FeaturePcd]用于列出本模块用到的Pcd常量。

[FeaturePcd]

#[PatchPcd]列出的Pcd变量仅本模块可用。

[PatchPcd]

c语言uefi读写文件,UEFI简单的应用程序模块MyHelloWorld:C源文件/INF工程文件源码/简析[6]...相关推荐

  1. c语言远控,远控鼠标!C语言简单编程:整舍友必备+附送实例源码!

    远控鼠标!C语言简单编程:整舍友必备+附送实例源码!-1.jpg (10.71 KB, 下载次数: 0) 2018-10-11 05:24 上传 关注<一碳科技>有更多干货等着你哦! 远控 ...

  2. 【微信小程序系列】小程序简单连接后端数据库完整示例(附免费下载的源码)(Servlet)

    [微信小程序系列]小程序简单连接后端数据库完整示例(附免费下载的源码)(Servlet) 登录页面 login.wxml <view class="page">< ...

  3. dxf文件解析,g代码解析,图片解析C#工程文件

    dxf文件解析,g代码解析,图片解析C#工程文件 1.解析完成的图形坐标自动保存,通过通信接口直接下发即可 2.可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统 ID:693000659 ...

  4. dxf文件解析,g代码解析,图片解析C#工程文件 可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统

    dxf文件解析,g代码解析,图片解析C#工程文件 1.解析完成的图形坐标自动保存,通过通信接口直接下发即可 2.可用于激光切割机,打印机,打码机,巡边机,点胶机等运动控制系统 ID:483000659 ...

  5. excel怎么调用c语言程序设计,知识:Excel使用C语言进行读写,代码简单易懂

    [FileDemoList.java.rar]-一种递归方法,用于列出文件夹中的所有文件,包括子文件夹,文件夹和文件.您需要修改文件夹的路径名称才能运行. [Exported-2014-06-11.r ...

  6. php修改文件访问目录为 .htaccess_借github上韩国师傅的一个源码实例再次理解.htaccess的功效...

    今天翻了翻GitHub,很巧发现一个韩国师傅的实例:也是关于.htaccess的,就继续理解了一波:稍微修改了几行代码来理解一下:先来发出源码: 我们简单的审计:很明显,列出了禁止的后缀:但是很明显, ...

  7. C语言/C++程序员大神打造纯C的电子时钟(加图形库+源码)

    C语言/C++程序员大神打造纯C的电子时钟,每天看时间再也不麻烦了 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进 ...

  8. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

  9. 用html语言制作表白动画,抖音很火的卡通做我女朋友表白html源码

    资源使用说明: 纯HTML的源码,上传就可以打开使用啦! 右键index.html记事本可修改你要表白的内容.名字等. HTML是用来做网站的一种语言哈.这样吧.你打开一个网页百.然后再网页任何一个地 ...

  10. c语言小游戏跳一跳代码及注释,如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    原标题:如何获得微信小游戏跳一跳源码以及源代码组合包括哪些 很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇 ...

最新文章

  1. 广东省卫生2021副高考试成绩查询,中国卫生人才网:广东2021卫生资格考试成绩查询入口 -中国卫生人...
  2. 概要讲述SMTP, POP3和IMAP之间的区别和联系
  3. Android性能优化之内存篇(三)
  4. 自学python方法-你是如何自学 Python 的?
  5. ftp服务器网页空白,ftp服务器网页空白
  6. recurrence relation in parenthesis placing problem
  7. 用500行纯前端代码在浏览器中构建一个Tableau
  8. python --- opencv部分学习
  9. 摄像头图像分析目标物体大小位置_摄像头的原理、组成、选型及应用
  10. 信息安全工程师笔记-数据库安全
  11. [bzoj3930] [CQOI2015]选数
  12. 初入C++(一) c++中的一些基础和与c的一些区别
  13. Junit使用方法总结
  14. tempdb 数据文件暴涨
  15. Intellij idea 添加浏览器
  16. Jenkins 集成Ansible教程
  17. 鲁大师电脑硬件兼容性测试软件,用鲁大师检测软件检测电脑硬件行得通吗?
  18. mysql用户名密码忘了怎么办_mysql用户密码忘了怎么办
  19. 便携式三星mysql_三星折叠手机终于来了!9 月 18 日正式发售
  20. python樱花开放教程_Python画樱花树 !

热门文章

  1. 计算机系统动态库修复,无法定位程序输入点于动态链接库修复解决方法 | 专业网吧维护...
  2. 【原】win 7 屏幕旋转问题的解决
  3. AltiumDesigner原理图库修改操作流程
  4. 新媒体营销渠道大盘点
  5. java maven 读写pdf_Java向PDF模板写入数据
  6. Apache,mysql,PHP,lanp环境
  7. PS基础全讲和使用技巧(二)
  8. 快速筛选打卡时间日期等数据:EXCEL筛选查找某一时间点是否在某一时间段内
  9. 邮件服务器 二级域名,hMailServer+Roundcube+APMServ+希网二级域名+ADSL搭建邮件服务器...
  10. 计算机英语面试翻译,英语面试问题及回答带翻译