부팅 옵션에 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]에 추가한다.