标准工程模块

每个工程模块都由两部分组成:工程文件和源文件。
工程文件就是 .inf 文件,用于指导EDK2编译工具自动编译模块。
源文件包括C/C++文件、.asm汇编文件也可以包括.uni(字符串资源文件)和.vfr(资源窗体文件)等。

源文件

入口函数名可以在工程文件中自定义,但是一般用UefiMain。入口参数有ImageHandle和SystemTable, ImageHandle就是编译生成.efl文件加载到内存中的的Image对象的句柄。
SystemTable是程序和UEFI内核交互的桥梁,可以通过它获得各种UEFI提供的服务。它本身是一个UEFI内核的全局结构体。

工程文件

其中包含如下几个“块”

[Defines]
INF_VERSION=0x00010005
BASE_NAME= 生成的.efi文件名
FILE_GUID=生成链接
MODULE_TYPE=UEFI_APPLICATION #写驱动和库的时候会有变动,大多情况下都是填这个
VERSION_STRING=1.0 #版本号,想改就改
ENTRY_POINT=UefiMain # 源文件的入口函数名

[Sources]
源文件名,一般源文件会和inf文件放一起,路径啥的没仔细考虑过

[Packages]
用到的库的.dec声明文件,要有路径

[LibraryClasses]
要链接的库模块,库要在该工程模块所在的包的dsc文件中有对应路径
示例如下

.inf .dsc
[LibraryClasses] [LibraryClasses]
UefiApplicationEntryPoint UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
UefiLib UefiLib|MdePkg/Library/UefiLib/UefiLib.inf

tips

  • 注意inf文件中的函数名和源文件一致,编译之前要把inf文件路径添加到dsc文件的Components中。
  • UEFI使用UTF-8编码,使用Print函数的时候要加 L 。

Shell应用程序工程模块

源文件

以INTN EFIAPI ShellAppMain (IN UINTN Argc, IN CHAR16 **Argv)为入口函数

工程文件

改动点如下

[Defines]
ENTRY_POINT=ShellCEntryLib

[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec #必须包含

[LibraryClasses]
ShellCEntryLib #必须列出

tips

  • Shell工程模板入口是ShellCEntryLib,该函数的源码实现入口参数和标准工程模板相同,函数内部使用EfiShellInterface获取命令行参数传入开发者编写的函数。

main函数应用程序模块

源文件

使用C标准库中的函数。

工程文件

基本和Shell配置相同。

[Packages]
StdLib/StdLib.dec

[LibraryClasses]
ShellCEntryLib #提供ShellCEntryLib函数
LibC #提供ShellAppMain函数
LibStdio #提供printf函数

tips

  • 真正的模块入口函数也是ShellCEntryLib,调用过程为ShellCEntryLib->ShellAppMain->main

UEFI工程模块--工程模块相关推荐

  1. 在Eclipse中创建Maven多模块工程的例子

    参考:http://ju.outofmemory.cn/entry/75620 如果,你需要创建多个项目,项目之间即独立又有关系,那么创建一个Maven多模块项目是个非常好的选择,也非常cool!怎么 ...

  2. 多模块Maven工程单独打包某一模块工程

    为什么80%的码农都做不了架构师?>>>    在eclipse中,多模块项目中单独打包某个web工程时,选中 "resolve workspace artifacts&q ...

  3. IDEA中一个工程多个模块(module)分别提交到不同的git服务器

    说明:本文档适用于一个工程多个模块的项目,每个模块对应不同的git服务器地址. 一.将本地项目导入到git服务器 1.打开 File -> Settings,选择 Version Control ...

  4. Spring使用ComponentScan扫描Maven多模块工程的其它模块

    说明:在新建好了Maven多模块工程后,如果想要在其它模块也能使用Spring的对象管理,比如@Autowrited这些注入方式,那么就必须开启包扫描的功能才能使其进行注入到Spring的对象管理中. ...

  5. c include 多层目录_Gradle多模块(工程)配置解析 - 满足每个开发者的目录喜好

    每个公司每个项目开发小组,或多或少都有一些大大小小的项目,如果公司用的是Gradle构建工具,那如何保证下面3点需求呢: Gradle配置单独维护,其它工程共用, 每个项目单独存放GIT,满足不同开发 ...

  6. 【Android】多模块工程移动目录编译报错:Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac‘

    1 背景 事情是这样的,最近在利用组件化的方式开发一个多模块工程,看着模块越来越多,于是想把某些同一层级的模块放到同一个目录下,如下: 可以直接将相应模块拖动到目标目录下,也可以如下所示,在模块上右键 ...

  7. java创建出现module_Eclipse创建Maven多模块工程Module开发(图文教程)

    自己研究了下eclipse用maven多模块工程module开发,跟大家分享一下! 功能模块来分module,跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/ ...

  8. UEFI开发与调试---edk2中的应用模块/库模块/驱动模块

    应用模块 应用模块包含标准应用程序模块,shell应用程序模块,以及main应用程序模块 标准应用程序模块 它是所有其他应用程序模块的基础,作为一个模块来说,同样由源文件和工程文件(.inf)组成. ...

  9. ab plc软件_回收三菱PLC模块西门子模块AB模块数控模块单片机回收【三菱plc吧】...

    回收罗克韦尔触摸屏回收西门子模块高价回收西门子,施耐德,罗克韦尔,松下,基恩士,三菱,富士,康耐视,台达,安川,普落菲斯等品牌 plc,cpu,以太网.人机界面触摸屏,变频器相关工控产品触摸屏,CPU ...

  10. Django项目工程配置工程日志

    Django项目工程配置工程日志​​​​​​​ Django项目工程配置工程日志 1.目的 2.原因 3.配置工程日志 3.1 在项目的配置文件任何位置添加 3.2 准备日志文件目录 4.日志记录器的 ...

最新文章

  1. 软件测试工具按用途分分为哪几类,以测试的形态分软件测试可以分为哪几类?...
  2. android 高德定位 区域,区域定位-行政区划浏览-示例中心-JS API UI 组件示例 | 高德地图API...
  3. mysql 小雨_Mysql数据库
  4. HookProc 和 CallNextHookEx
  5. 通过yum安装Nagios
  6. oracle和db2之间的基本差别
  7. 如何在Python中打印异常?
  8. 河南网通帐号在线转换工具
  9. 固定资产中计算机软件类型,国税局固定资产的分类
  10. 常用的工业控制计算机有哪几类,工业控制计算机在行业应用中都有哪些特点?...
  11. 【学习笔记】dubbo 控制台的部署
  12. HOMAG工控机维修西门子IPC627D维修HG-A.1.0
  13. SQL 升序、降序排列
  14. 开源项目 CDN 加速服务站合集:除了BootCDN,你还知道其他免费的前端开源项目 CDN 加速服务吗
  15. Angular +Ionic实现关注与取消关注
  16. Kanzi入门学习(二)
  17. python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)
  18. C语言为什么不会过时?
  19. LUNA16数据集简介
  20. 2022年全球与中国医院信息系统(HIS)行业发展趋势及投资战略分析报告

热门文章

  1. 刷recovery运行linux,Ubuntu 手机版刷机简明教程(通过 recovery 刷机)【更新刷机体验视频】...
  2. 寒冬已至,超7亿浏览量的TikTok爆款“针织品”火的“一塌糊涂”
  3. 达人评测 小米ea552022款怎么样
  4. Laravel学习笔记(35)利用事件进行邮箱验证功能(notify,listen,event,MailHog)
  5. 使用pandas处理excel数据
  6. 小诗一首--在30高考之日感慨一下
  7. windows 下 查进程 杀进程
  8. js浏览器后退前进 禁止事件
  9. 仿网易娱乐焦点flash幻灯 dede调用方法
  10. 用playbook安装Apache,修改端口,配置ServerName,修改主页,设置开机自启