FILE_GUID = 462CAA21-7614-4503-836E-8AB6F4662331 - UiApp module is driver for BDS phase
*.fdf 파일에는 SEC, PEI 또는 DXE 단계의 볼륨을 포함하여 모든 볼륨에 배치되는 드라이버와 애플리케이션의 리스트를 가지고 있다.
...
[FV.SECFV]
FvNameGuid = 763BED0D-DE9F-48F5-81F1-3E90E1B1A015
BlockSize = 0x1000
FvAlignment = 16
...
INF <...>
...
[FV.PEIFV]
FvNameGuid = 6938079B-B503-4E3D-9D24-B28337A25806
BlockSize = 0x10000
FvAlignment = 16
...
INF <...>
...
[FV.DXEFV]
FvForceRebase = FALSE
FvNameGuid = 7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1 ### <---- this is a GUID from our output
BlockSize = 0x10000
FvAlignment = 16
...
INF ShellPkg/Application/Shell/Shell.inf <--- this apps are placed in the FV.DXEFV firmware volume
...
INF MdeModulePkg/Application/UiApp/UiApp.inf
부팅 옵션에 HelloWorld 애플리케이션을 부팅 옵션에 추가해볼 것이다. 따라서 EFI Shell 애플리케이션이 어떻게 OVMF에 추가되어 있는지 살펴본다.
먼저 OVMF 이미지에 애플리케이션을 추가해야 한다. UefiLessonsPkg/HelloWorld/HelloWorld.inf 경로를 OvmfPkg/OvmfPkgX64.fdf 파일에 있는 [FV.DXEFV]의 ShellPkg/Application/Shell/Shell.inf 아래에 추가한다.
추가한 후 새로 OVMF를 빌드하려고 하면 아래와 같은 에러가 발생한다. 해당 오류는 OvmfPkg/OvmfPkgX64.dsc에 HelloWorld 애플리케이션에 대한 정보가 추가되지 않아 발생하는 에러이다.
$ build --platform=OvmfPkg/OvmfPkgX64.dsc --arch=X64 --buildtarget=RELEASE --tagname=GCC5
...
build.py...
: error F001: Module /home/kostr/tiano/edk2/UefiLessonsPkg/HelloWorld/HelloWorld.inf NOT found in DSC file; Is it really a binary module?
...
OvmfPkg/OvmfPkgX64.dsc에 HelloWorld 애플리케이션에 대한 정보를 추가하기 위해 아래와 같이 [Components] 섹션에 있는 ShellPkg 아래에 처음에 만들었던 HelloWorld.inf의 경로를 추가한다. Shell.inf의 {...} 안에는 해당 애플리케이션에서 필요한 정보가 작성되어 있는 것이므로 HelloWorld 애플리케이션은 작성해야 할 정보가 없어 HelloWorld.inf의 경로만 작성해주면 된다.
출력된 결과를 보면 gUefiShellFileGuid가 작성된 ShellPkg/ShellPkg.dec 파일이 존재하는 것을 볼 수 있다. 이것과 같이 UefiLessons도 UefiLessons/UefiLessons.dec 파일을 생성해 주어야 한다. GUID는 UefiLessons/HelloWorld/HelloWorld.inf에 작성했던 값과 동일한 gHelloWorldFileGuid를 생성한다.
$ build --platform=OvmfPkg/OvmfPkgX64.dsc --arch=X64 --buildtarget=RELEASE --tagname=GCC5
...
build.py...
/home/kostr/tiano/edk2/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf(87): error 4000: Value of Guid [gHelloWorldFileGuid] is not found under [Guids] section in
/home/kostr/tiano/edk2/MdePkg/MdePkg.dec
/home/kostr/tiano/edk2/MdeModulePkg/MdeModulePkg.dec
/home/kostr/tiano/edk2/SourceLevelDebugPkg/SourceLevelDebugPkg.dec
/home/kostr/tiano/edk2/OvmfPkg/OvmfPkg.dec
/home/kostr/tiano/edk2/SecurityPkg/SecurityPkg.dec
/home/kostr/tiano/edk2/ShellPkg/ShellPkg.dec
...
에러는OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf에 UefiLessonsPkg.dec 의 경로를 추가하지 않았기 때문이다. 따라서 [Pakages]에 추가한다.