35. 애플리케이션에서 사용할 간단한 라이브러리 생성
이번 장에서는 간단한 라이브러를 생성한다.
일반적으로 디렉토리는 아래 경로에 존재한다.
<Pkg Name>/Library/<Library Name>/ <---- inf and source files for the library (=library implementation)
<Pkg Name>/Include/Library/ <---- library headers (=library interface)먼저 SimpleLibrary 폴더를 만든다.
$ mkdir -p UefiLessonsPkg/Library/SimpleLibrary/
$ mkdir -p UefiLessonsPkg/Include/Library/먼저 라이브러리를 위한 인터페이스인 헤더 파일을 작성한다. SimpleLibrary는 number를 받고 number+2를 반환하는 함수로 Plus2를 포함할 것이다.
따라서 헤더 파일을UefiLessonsPkg/Include/Library/SimpleLibrary.h에 생성하고 아래 내용으로 작성한다.
UINTN Plus2(UINTN number);라이브러리 구현하기 위해 UefiLessonsPkg/Library/SimpleLibraray/SimpleLibrary.c를 작성한다.
#include <Library/SimpleLibrary.h>
UINTN Plus2(UINTN number) {
return number+2;
}정말 간단하게 라이브러리가 생성되었다.
이제 라이브러리에 대한 INF 파일을 생성해야 한다.
UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf
[Defines]
INF_VERSION = 1.25
BASE_NAME = SimpleLibrary
FILE_GUID = 826c8951-5bd2-4d72-a9d9-f7ab48684117
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
LIBRARY_CLASS = SimpleLibrary | UEFI_APPLICATION
[Sources]
SimpleLibrary.c
[Packages]
MdePkg/MdePkg.dec작성한 *.inf 파일에서 중요한 것은 LIBRARY_CLASS이다.
이 라이브러리는 UEFI_APPLICATION 유형의 모듈에서만 사용할 수 있다. 만약 UEFI_APPLICATION 대신 DXE_DRIVER로 하고 UEFI 애플리케이션 중 일부에 연결하려고 하면 빌드가 실패한다.
이제 패키지 DSC 파일 UefiLessonsPkg/UefiLessonsPkg.dsc에 라이브러리를 포함해야 한다.
빌드를 진행하면 아래와 같은 에러가 발생한다.
에러가 발생하는 이유는 생성한 라이브러리 폴더가 헤더가 있을 수 있는 장소로 빌드 시스템에서 인식하지 못했기 때문이다.
문제를 해결하기 위해 UefiLessonsPkg/UefiLessonsPkg.dec에 [Includes]에 추가해야 한다.
그리고 UefiLessonsPkg/UefiLessonsPkg.dec 파일을 UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf의 [Packages]에 추가해야 한다.
빌드를 진행하면 성공하는 것을 볼 수 있다.
SimpleLibraryUser
이제 라이브러리를 사용하는 애플리케이션을 생성한다.
UefiLessonsPkg/SimpleLibraryUser/SimpleLibraryUser.c에 아래 코드를 작성한다.
UefiLessonsPkg/SimpleLibraryUser/SimpleLibraryUser.inf에 작성한다.
이제 UefiLessonsPkg/UefiLessonsPkg.dsc에 추가한다.
라이브러리 클래스에 대한 구현을 추가하고 패키지 구성 요소에 새 모듈을 추가했다.
빌드 후 SimpleLibraryUser.efi를 실행하면 *.c 코드에서 전달한 3에 2가 더해진 결과 5가 반환된 것을 확인할 수 있다.
Last updated