1. 간단한 EFI application 만들기

앞서 빌드된 환경에서 샘플 애플리케이션 제작을 위한 폴더를 생성한다.

$ mkdir SimplestApp

이후 생성할 애플리케이션의 코드를 아래와 같이 생성한다.

$ vi SimplestApp/SimplestApp.c
-----
EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  return EFI_SUCCESS;
}

생성한 애플리케이션의 설정을 지정하기 위해 *.inf 파일을 작성한다. https://edk2-docs.gitbook.io/edk-ii-inf-specification/3_edk_ii_inf_file_format

$ vi SimplestApp/SimplestApp.inf
-----
[Defines]
  INF_VERSION                    = 1.25
  BASE_NAME                      = SimplestApp
  FILE_GUID                      = 4a298956-fbe0-47fb-ae3a-2d5a0a959a26
  MODULE_TYPE                    = UEFI_APPLICATION
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = UefiMain

[Sources]
  SimplestApp.c

[Packages]
  MdePkg/MdePkg.dec

[LibraryClasses]
  UefiApplicationEntryPoint

작성한 섹션별 주요 정보는 다음과 같다. https://edk2-docs.gitbook.io/edk-ii-inf-specification/3_edk_ii_inf_file_format/34_-defines-_section

  • Defines

  • Sources: 포함하는 소스 코드 정보를 명시한다.

  • Packages: 포함하는 패키지 정보를 명시한다.

  • LibraryClasses

작성한 애플리케이션을 빌드하기 위해서는 특정 패키지에 포함되어야 한다.

$ vi OvmfPkg/OvmfPkgX64.dsc
-----
 [Components]
+  SimplestApp/SimplestApp.inf
   OvmfPkg/ResetVector/ResetVector.inf

작성한 샘플 애플리케이션은 OvmfPkg에 포함되어 있으므로 아래와 같은 명령어를 통해 빌드한다.

$ build --platform=OvmfPkg/OvmfPkgX64.dsc --arch=X64 --buildtarget=RELEASE --tagname=GCC5

빌드 되어진 샘플 애플리케이션을 실행하기 위해서 해당 애플리케이션을 포함하여 QEMU를 실행한다.

$ mkdir ~/UEFI_disk
$ cp Build/OvmfX64/RELEASE_GCC5/X64/SimplestApp.efi ~/UEFI_disk
$ qemu-system-x86_64 -drive if=pflash,format=raw,file=Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd \
                     -drive format=raw,file=fat:rw:~/UEFI_disk \
                     -nographic \
                     -net none

QEMU 환경에서 생성한 애플리케이션을 실행한다.

Shell> fs0:
FS0:\> SimplestApp.efi
FS0:\>

Last updated