Posted on 2012-03-13 09:50
djx_zh 阅读(26644)
评论(47) 编辑 收藏 引用
初识UEFI
按惯例,首先让我们用HelloWorld跟UEFI打个招呼吧
标准application
/*main.c */
#include <Uefi.h>
EFI_STATUS
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
SystemTable -> ConOut-> OutputString(SystemTable -> ConOut, L"HelloWorld\n");
return EFI_SUCCESS;
}
有以下几点需要注意:
1。 头文件, 所有的UEFI程序都有include <Uefi.h>
2。 main函数, UEFI 基本Application的main函数是UefiMain
3。 main函数的返回值类型 EFI_STATUS。 在UEFI中基本上所有的返回值类型都是EFI_STATUS。
4。 main函数的参数。.efi 文件加载到内存后称为Image, ImageHandle 用来描述、访问、控制此Image。 第二个参数是SystemTable,它是我们的程序同UEFI内核打交道的桥梁,通过它我们可以使用UEFI提供的各种服务,如Boot Services和 Runtime Services。 SystemTable是UEFI内核中的一个全局结构体。
5。 输出是通过EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL的OutputString服务完成的。 服务(函数)的第一个参数是This指针,指向Protocol本身。 OutputString()的第二个参数是Unicode字符串。
要想编译main.c,我们还需要.inf文件, 在main.c所在的目录下编辑main.inf文件
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = main #输出文件的名字为 main.efi
FILE_GUID = 6987936E-ED34-ffdb-AE97-1FA5E4ED2117
MODULE_TYPE = UEFI_APPLICATION #模块类型:, , ,,BASE,等
VERSION_STRING = 1.0
ENTRY_POINT = UefiMain #入口函数
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
# 源文件
[Sources]
main.c
# .dec里面定义 include的路径
[Packages]
MdePkg/MdePkg.dec
#要链接的库
[LibraryClasses]
UefiApplicationEntryPoint
UefiLib
[Protocols]
[FeaturePcd]
[Pcd.common]
[Guids]
#编译选项, = 表示选项附加到默认选项后面。 == 表示仅使用所定义的选项,弃用默认选项。
[BuildOptions]
#MSFT:*_*_*_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1ib2 /GL /EHs-c- /GR- /GF /Gy /Zi /Gm /D EFI_SPECIFICATION_VERSION=0x0002000A /D TIANO_RELEASE_VERSION=0x00080006 /FAs /Oi-
#MSFT:*_*_*_CC_FLAGS = /wd4804
#MSFT:Debug_*_IA32_CC_FLAGS =
#MSFT:Debug_*_X64_CC_FLAGS =
#MSFT:Release_*_IA32_CC_FLAGS =
#MSFT:Release_*_IA32_CC_FLAGS =
#MSFT:Release_*_IA32_DLINK_FLAGS =
#GCC:Release_*_IA32_CC_FLAGS =
然后将 main.inf 添加到 Nt32Pkg.dsc 或UnixPkg.dsc 的[Components]部分, 例如添加下面一行(example目录在EDK2下)
example/main/main.inf
然后就可以使用BaseTools下的build进行编译了。
Windows下执行
edksetup.bat
build -p Nt32Pkg\t32Pkg.dsc -a IA32
Linux 执行
source ./edksetup.sh BaseTools
build -p UnixPkg/UnixPkg.dsc -a IA32
其他类型的inf文件
(1)
可以看出标准的application处理命令行参数不方便,UEFI提供了帮我们处理命令行参数的入口函数ShellCEntryLib
。 我们要实现INTN ShellAppMain(UINTN Argc, CHAR16** Argv) 作为(开发者视角的)入口函数。
/*Main.c */
#include <Uefi.h>
INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
gST -> ConOut-> OutputString(gST -> ConOut, L"HelloWorld\n");
return 0;
}
inf文件。 我们需要连接
ShellCEntryLib 库。
[Defines]
INF_VERSION = 0x00010006
BASE_NAME = Main
FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.1
ENTRY_POINT = ShellCEntryLib
#
# VALID_ARCHITECTURES = IA32 X64 IPF
#
[Sources]
Main.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
[LibraryClasses]
ShellCEntryLib
UefiLib
[BuildOptions]
(2)使用main函数的application。如果你想像C一样使用main函数,那么你需要用到LibC。 LibC 中提供了ShellAppMain函数,我们要提供 int main(int Argc, char** Argv) 供其调用。
/*Main.c */
#include <Uefi.h>
int
EFIAPI
main (
IN int Argc,
IN char **Argv
)
{
gST -> ConOut-> OutputString(gST -> ConOut, L"HelloWorld\n");
return 0;
}
真正的入口函数是
ShellCEntryLib, 调用过程为
ShellCEntryLib -> ShellAppMain -> main.
inf 文件: 我们需要连接
ShellCEntryLib 和LibC库。[Defines]
INF_VERSION = 0x00010006
BASE_NAME = Main
FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.1
ENTRY_POINT = ShellCEntryLib
#
# VALID_ARCHITECTURES = IA32 X64 IPF
#
[Sources]
Main.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
[LibraryClasses]
LibC
ShellCEntryLib
UefiLib
[BuildOptions]
MSFT:*_*_IA32_CC_FLAGS = /Oi-
还要再说明一点,如果你的程序中用到了printf(...)等等标准C的库函数,那么一定要使用此种类型的application。 因为
ShellCEntryLib 函数中会调用ShellAppMain(...), StdLib的ShellAppMain(...) 会对stdlib 进行初始化。 然后才可以调用stdlib的函数。 (当然,如果你已经清楚地了解了入口函数的处理流程,你也可以手工调用StdLib的ShellAppMain进行出事后).
(3)Lib 模块的inf文件。开发大型工程的时候我们会用到lib,例如我们要开发视频解码程序,会用到zlib库,
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = zlib
FILE_GUID = 348aaa62-BFBD-4882-9ECE-C80BBbbbb736
VERSION_STRING = 1.0
MODULE_TYPE = BASE #Base 表示此模块编译为library
LIBRARY_CLASS = zlib
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
[Sources]
adler32.c
crc32.c
deflate.c
infback.c
inffast.c
inflate.c
inftrees.c
trees.c
zutil.c
compress.c
uncompr.c
gzclose.c
gzlib.c
gzread.c
gzwrite.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
StdLib/StdLib.dec
[LibraryClasses]
MemoryAllocationLib
BaseLib
UefiBootServicesTableLib
BaseMemoryLib
UefiLib
UefiRuntimeServicesTableLib
[Protocols]
[FeaturePcd]
[Pcd]
[Guids]
[BuildOptions]
GCC:*_*_IA32_CC_FLAGS = -D__UEFI__ -DLARGEFILE64_SOURCE=1 -w
然后将
zlib|zlib-1.2.6/zlib.inf # zlib-1.2.6 在EKD2的根目录下
放到.dsc 文件 [LibraryClasses]中。 需要链接zlib的时候,在.inf文件的中添加 zlib即可。
(4)driver模块的inf文件。例如DiskIo的inf(MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
)
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = DiskIoDxe
FILE_GUID = 6B38F7B4-AD98-40e9-9093-ACA2B5A253C4
MODULE_TYPE = UEFI_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = InitializeDiskIo
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
# DRIVER_BINDING = gDiskIoDriverBinding
# COMPONENT_NAME = gDiskIoComponentName
# COMPONENT_NAME2 = gDiskIoComponentName2
#
[Sources]
ComponentName.c
DiskIo.h
DiskIo.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiBootServicesTableLib
MemoryAllocationLib
BaseMemoryLib
BaseLib
UefiLib
UefiDriverEntryPoint
DebugLib
[Protocols]
gEfiDiskIoProtocolGuid ## BY_START
gEfiBlockIoProtocolGuid ## TO_START
现在我们已经扫除了编译UEFI应用的所有障碍。 在下一部分,我们将了解开发UEFI一定用到的系统服务。
Feedback
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-03-13 19:56 by
nmake编译对应makfile,build编译对应inf,这两个文件有什么不同嘛?为啥要用两种格式文件去表示一个c文件了
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-03-26 17:03 by
请教“其他类型的inf文件(1)使用main函数的application。“这部分,需要在dsc,添加哪些库实例,怎样添加?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-03-26 22:41 by
@ningle
在.dsc文件末尾添加
!include StdLib/StdLib.inf
具体可参考AppPkg/AppPkg.dsc
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-06-26 14:29 by
您好: 请问您熟悉efi tpm编程吗?如何在efi app中使用tpm 命令?有相关源码例子吗?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2012-07-05 11:33 by
你好,我是个初学者,使用UDKII2012SR1中的UDK2010.SR1.UP1-ReleaseNotes-MyWorkSpace文档说明在Win7x64上搭建的环境,按上面的方法在VS2008命令提示中执行出错,提示C:\MyWorkSpace\example\main.c和C:\MyWorkSpace\example\main.inf出错,这两个文档里面的字符我全变成AISI格式了
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-07-06 09:36 by
ANSI格式应该没问题,可以把出错信息告诉我吗?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-07-06 09:37 by
@刘炜
抱歉,我没有做过TPM的编程
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-08-01 23:12 by
你好,为什么在编写gST的那个helloworld程序时,说gST变量没定义。这个变量是全局的吗?请问在哪了定义和初始化的?谢谢。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-08-02 11:24 by
@刘炜
是全局变量, 定义在MdePkg/Include/Library/UefiBootServicesTableLib.h
初始化在 MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.c
加上这个#include 试试
#include "Library/UefiBootServicesTableLib.h"
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-08-02 11:29 by
@djx_zh
谢谢,我加了,可以运行了。
不知道你有对ext2文件读写的相关资料吗?uefi下不能识别ext文件系统吗?好像uefi下只有对fat读写的。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2012-08-02 20:16 by
@刘炜
uefi不能识别fat以为的文件系统,要想识别ext,只能自己去修改/编译ext的源码
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2012-09-12 15:59 by
@djx_zh
请教: 出现错误: " Instance of library class [ShellCEntryLib] is not found". 我用的是UDK2010.SR1.UP1,的确没找到ShellCEntryLib,这个库在哪里??
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2012-09-13 09:22 by
@SunShine
在.dsc 中的 [LibraryClasses]加入
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2012-09-13 09:59 by
@djx_zh
谢谢你的答复. 这样 添加果然好了. 由于我是初学者,所以想追问下, 你让添加这行的原因,是因为UefiShellCEntryLib.inf 中包含"BASE_NAME = UefiShellCEntryLib"吗? 有什么文档说明的吗? ( PS: 感觉要学的东西太多,不知道从何入手了, 现正从DEC, DSC的手册看起...)
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2012-09-18 04:32 by
@SunShine
对。
你自己的.inf 中[LibraryClasses] 有 UefiShellCEntryLib, build看到后会去.dsc中找UefiShellCEntryLib 对应的.inf文件,并编译这个lib。 “|” 前是Lib的名字,后面是Lib的.inf路径。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-02-21 08:22 by
请问我加入了 C++库 但是 之后在用到 Print的时候 会被编译器(VS2012)
提示 无法从 const wchar_t [n] 向 const CHAR16 * 转换
我加入
typedef CHAR16 wchar_t ;
编译器又通过不了。
请问有办法解决吗 谢谢了
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-02-21 09:42 by
试一下在你.inf文件的编译选项里加/Zc:wchar_t-
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-05 16:11 by
ShellAppMain函数中的gST是什么,在哪个文件里面可以找到其具体定义呢?还有使用main函数的application中,我运行后提示没有LibC,这是什么原因呢?本人初学,请不吝赐教。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-05 16:19 by
在其他帖子中也经常看到“加库”,这个的具体操作是什么呢
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-06 06:14 by
@becky
啊哈, .dsc文件我没有在文章中分析。 LibC 在StdLib\stdlib.inc 中定义,你要 在你的.dsc中include这个文件。
使用main函数,最方便的方法是把你的.inf 添加到AppPkg\AppPkg.dsc里面。 然后build -p AppPkg\AppPkg.dsc
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-06 09:38 by
UDK2010.UP4.Complete,我安装的是这个版本的,里面怎么没有AppPkg,而且也找不到StdLib文件夹,我觉得很奇怪啊
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-12 11:51 by
请问如果我想加入
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
应该怎么办呢
我在 dsc的 [LibraryClasses.common.DXE_DRIVER]
下面加入了
SmbiosDxe|MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
可是怎么才能调用呢 谢谢了
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-12 11:52 by
@becky
AppPkg 和StdLib 是需要另外单独下载的
你再去网站好好找找
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-12 15:13 by
您好啊,我又来提问啦。是这样子,我自己找了一个AppPkg文件及StdLib文件加入到了我的工作目录下。编译App后成功生成了两个efi文件:hello.efi,main.efi。然后我放到虚拟机下从U盘启动去运行这两个文件,结果hello可以正确运行,但是main这个不行。不知道你能不能给点意见呢?这个hello就和你上面的ShellAppMain类似,main这个就是你后面的main的这个,就是直接用C语言的标准库来写的。
还有一个问题想请教一下,就是这个.inf文件中的[Defines]下有一项FILE_GUID,这个的值有没有什么特殊意义呢,我编程的时候应该怎样来确定这个值呢?
谢谢啦
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-12 15:14 by
对了,我的是在X64的类型的
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2013-03-13 04:18 by
@becky
可能是源代码的问题,我也遇到过main.efi不能运行的情况。 如果你只是学习UEFI, svn co
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 edk2 可以下载到所有的源代码。 这样build出来的main.efi 是可以正常运行的。
FILE_GUID 没有特殊意义,编程中不会用到。 你任意生成一个GUID就可以了,你上网搜一下有很多GUID生成器
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2013-03-13 04:22 by
@snowman1101
在你application的.inf文件的[LibraryClasses] 下面加入SmbiosDxe
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-13 19:36 by
太谢谢了,果然是下的代码有问题,已经可以了,非常感谢
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-19 14:42 by
请问,如何编译出X64的efi程序啊?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-20 11:31 by
您好啊,我又来提问了,就是我在程序代码中加入了bzero()函数,就include了strings.h,但是我不知道在inf中应该加入哪一个Lib。我想问一下,就是StdLib中include了很多头文件,我在inf的[LibraryClasses]添加Lib文件是,怎么知道Lib的名字呢?或者说,有没有文档详细了说明了StdLib中所包含的的所有库呢?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-22 01:00 by
@liujm_buct
build -a X64 [...]
首先你的编译器要支持64位编译
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-22 01:05 by
@becky
目前没有文档
StdLib\StdLib.inc
#
# C Standard Libraries
#
列出了所有的lib
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-27 10:50 by
您好啊,我现在基于包StdLib下的BsdSocketLib,做了一个socket通信的客户端。成功编译生成了efi文件,但是放到虚拟机下的EFI SHELL下运行后,执行socket函数的时候就出错了,提示信息是Exit status code:Unsupported。这个是什么原因呢?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-03-27 12:40 by
@djx_zh
你好 请问 可不可以再讲一下 (4)driver模块的inf文件。
我想知道的是
如果 MODULE_TYPE = UEFI_DRIVER
是不是加在 dsc文件的 [LibraryClasses.common.UEFI_DRIVER] 下面
比如 上面的 DiskIoDxe 是不是我这样写就可以了
MyAddTest|MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
照你说的 我把 MyAddTest 加在了我的 inf 文件的 [LibraryClasses] 下面
可是编译器却提示我 Instance of library class [MyAddTest] is not found
谢谢了
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-05-06 17:33 by
你好:我想在VS2008里面进行单步调试,但是专门进不了我编写的应用程序,并且一步步的调试。我是菜鸟,刚开始学习UEFI
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-10-09 16:32 by
在“(2)使用main函数的application。如果你想像C一样使用main函数,那么你需要用到LibC。 ”中,加了LibC后,编译出错:
c:\edk2_trunk\Nt32Pkg\Nt32Pkg.dsc(...): error 4000: Instance of library class [LibStdLib] is not found
in [c:\edk2_trunk\StdLib\LibC\LibC.inf] [IA32]
consumed by module [c:\edk2_trunk\MyHelloWorld\main.inf]
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2013-10-20 23:29 by
@xmuchgw
你要使用AppPkg,当使用LibC时。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2013-12-14 00:53 by
请问return 的值如何在NSH批处理上获得
如 return 0
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2014-01-12 17:37 by
main.c 依照文中的步骤BUILD过程中提示:
Processing meta-data ............ done!
Building ... c:\edk2\MdePkg\Library\PeiMemoryAllocationLib\PeiMemoryAllocationLi
b.inf [IA32]
build...
: error 7000: Failed to start command
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Vc\bin\nmake.exe /nol
ogo tbuild [c:\edk2\Build\NT32IA32\DEBUG_VS2008x86\IA32\MdePkg\Library\PeiMemory
AllocationLib\PeiMemoryAllocationLib]
build...
: error 7000: Failed to start command
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Vc\bin\nmake.exe /nol
ogo tbuild [c:\edk2\Build\NT32IA32\DEBUG_VS2008x86\IA32\MdePkg\Library\PeiServic
esLib\PeiServicesLib]
build...
: error F002: Failed to build module
c:\edk2\MdePkg\Library\PeiMemoryAllocationLib\PeiMemoryAllocationLib.inf
[IA32, VS2008x86, DEBUG]
- Failed -
Build end time: 17:32:16, Jan.12 2014
Build total time: 00:00:13,
请问怎么解决?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2014-01-19 00:28 by
@kllei
exit /b errorcode
这条命令会设置lasterror。
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2014-02-27 15:44 by
请问,自己编写的efi程序,如何进行调试呢?加入_asm int 3;后,进入调试界面定位在secmain中,但是进不到efi程序本身啊。请指教,感谢!
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2014-03-31 00:48 by
关闭优化选项,然后就应该可以了
[BuildOptions]
MSFT:DEBUG_*_IA32_CC_FLAGS = /Od
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件 回复 更多评论
2015-08-19 11:18 by
FILE_GUID = 6987936E-ED34-ffdb-AE97-1FA5E4ED2117
这个FILE_GUID是自己任意写吗?万一和别的GUID冲突了怎么办?
# re: UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件[未登录] 回复 更多评论
2015-08-25 21:50 by
@winux
是自己写的。两个有同样FILE_GUID的文件会被认为是同一个文件。通常不会通过GUID在系统全局范围内查找文件,所以文件GUID冲突通常不会造成困扰。
Protocol的GUID一定不能冲突。