UEFI原理与编程(四):UEFI工程模块文件-使用main函数的应用程序工程模块
来源:互联网 发布:词汇量测试什么软件 编辑:程序博客网 时间:2024/05/19 03:43
UEFI工程模块文件-使用mian函数的应用程序工程模块
前言
标准应用程序工程模块和Shell应用程序工程模块写起来都是相对和我们平常使用的C/C++有些不同。EDK2提供了使用main函数的应用程序工程模块,我们可以结合StdLib就可以使用C标准库中的函数了。这对于C语言程序员来说,mian函数就会熟悉很多。
一、源文件(main 函数)
它写起来就和我们写C语言程序基本相同。
// 使用main函数的应用程序工程模块示例#include <stdio.h>int main(IN int Argc,IN char **Argv){ printf("Hello World!\n"); printf("Welcome to the world of EDK II.\n"); return(0);}
二、工程文件
基本上和Shell应用程序模块相同,注意一下几点。
- [Defines]块中的
ENTRY_POINT
需设为ShellCEntryLib
- [Packages]块中列出 MdePkg/MdePkg.dec、ShellPkg/ShellPkg.dec、StdLib/StdLib.dec.
- [LibraryClasses]块中列出ShellCEntryLib、LibC、LibStdio
注:ShellCEntryLib提供ShellCEntryLib函数;LibC提供ShellAppMain函数;LibStdio
- [Defines]块中的
- 使用main函数的应用程序工程模块工程文件示例
[Defines]INF_VERSION = 0x00010006BASE_NAME = HelloWorldFILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5fMODULE_TYPE = UEFI_APPLICATIONVERSION_STRING = 1.0ENTRY_POINT = ShellCEntryLib[Sources]HelloWorld.c[Packages]MdePkg/MdePkg.decShellPkg/ShellPkg.decStdLib/StdLib.dec[LibraryClasses]LibCLibStdioShellCEntryLib[BuildOptions]MSFT:*_*_*_CC_FLAGS = /w
三、编译运行
基本上和标准应用程序工程模块相同,我们可以将工程文件相对于EDK2根目录的路径名添加到AppPkg.dsc [Components]里。
执行下面的命令:
build -p AppPkg\AppPkg.dsc -m [工程文件相对EDK2根目录路径名] -a IA32 (64位用:X64)
运行结果:
四、原理简介
在Shell应用程序工程模块使用了ShellCEntryLib,然后实现了ShellAppMain作为程序的入口函数。在使用main函数的应用程序工程模块中使用了StdLib提供了ShellAppMain函数,main函数作为程序入口函数供ShellAppMain调用。而真正的入口函数是ShellCEntryLib,调用过程为:
ShellCEntry
->ShellAppMain
->main
五、总结
可以看出,使用main函数的应用程序工程模块其实本质Shell应用程序工程模块相同,增加了StdLib库。
参考资料
<1>《UEFI原理与编程》戴正华 著
<2> UEFI Spec2_6
0 0
- UEFI原理与编程(四):UEFI工程模块文件-使用main函数的应用程序工程模块
- UEFI原理与编程(二):UEFI工程模块文件-标准应用程序工程模块
- UEFI原理与编程(三):UEFI工程模块文件-Shell应用程序工程模块
- UEFI原理与编程(六):UEFI工程模块文件-驱动模块工程文件
- UEFI原理与编程(五):UEFI工程模块文件-库模块
- 编写UEFI标准应用程序工程模块小结
- UEFI简单的应用程序模块MyHelloWorld:C源文件/INF工程文件源码/简析[6]
- UEFI原理与编程(九):UEFI中的Protocol使用方法
- UEFI原理与编程(十):UEFI的基础服务-系统表
- UEFI HII 模块介绍
- UEFI原理与编程(八):UEFI中的Protocol基础结构及其在内核中的表示
- UEFI原理与编程(七):包及.dsc、.dec、.fdf文件
- UEFI原理与编程(一):环境搭建
- UEFI应用与编程--HelloWorld(01)
- UEFI工程编译命令Build用法
- UEFI原理与编程——互动出版网
- 一个自己的工程 (工具与模块)
- UEFI
- 【PM】【进度】:把握项目节奏的方法
- IntelliJ使用指南—— 导入Eclipse的Web项目
- 初识Java之概念
- 经典案例-制作FAO列表页
- caffe loss 曲线(python 正则表达式)
- UEFI原理与编程(四):UEFI工程模块文件-使用main函数的应用程序工程模块
- 正则表达式
- JAVA实现仿微信红包分配规则
- JQuery动画
- 进程死锁算法——Peterson与Dekker
- altera FPGA时序工程约束主要命令
- 解决发布App到Apple Store无法构建版本的问题
- 【SSLGZ 1673】垃圾陷阱
- HDU 2544 最短路 (模板题)