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);}

二、工程文件

  1. 基本上和Shell应用程序模块相同,注意一下几点。

    • [Defines]块中的ENTRY_POINT需设为 ShellCEntryLib
    • [Packages]块中列出 MdePkg/MdePkg.dec、ShellPkg/ShellPkg.dec、StdLib/StdLib.dec.
    • [LibraryClasses]块中列出ShellCEntryLib、LibC、LibStdio
      注:ShellCEntryLib提供ShellCEntryLib函数;LibC提供ShellAppMain函数;LibStdio
  2. 使用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
原创粉丝点击