49.MODULE_UNI_FILE/PACKAGE_UNI_FILE/[UserExtensions.TianoCore."ExtraFiles"]의 도움으로 UNI 파일 선언하기
지난 레슨에서 애플리케이션 INF 파일의 Sources섹션 아래에 UNI 문자열 파일을 선언했었다.
[Sources]
...
Strings.uni그러나 EDKII 코드베이스 내에서 UNI 파일을 포함하는 몇 가지 다른 방법을 찾을 수 있다.
INF 파일 내의 MODULE_UNI_FILE 키 값
INF 파일의 [UserExtensions.TianoCore."ExtraFiles"] 섹션 아래
DEC 파일 내의 PACKAGE_UNI_FILE 키 값
DEC 파일의 [UserExtensions.TianoCore."ExtraFiles"] 섹션 아래
가장 중요한 것은 이러한 방법으로 포함된 UNI 파일이 EDKII 빌드 도구에 의해 처리되지 않는다는 것이다. UEFI 패키징 사양(https://uefi.org/sites/default/files/resources/Dist_Package_Spec_1_1.pdf)과 관련된 파일이다. 위 항목들은 The Intel(R) UEFI Packaging Tool에서만 사용된다. 패키지를 배포하는 데 The Intel(R) UEFI Packaging Tool을 사용하지 않는 경우 이러한 파일을 모두 무시해도 된다.
이 레슨에서도 직접 사용하지 않기 때문에 자세한 내용은 다루지 않겠지만 다음은 이러한 파일이 어떻게 생겼는지에 대한 예이다.
INF 파일 내 MODULE_UNI_FILE/[UserExtensions.TianoCore."ExtraFiles"]
[Defines]
...
MODULE_UNI_FILE = ResetSystemPei.uni
...
[UserExtensions.TianoCore."ExtraFiles"]
ResetSystemPeiExtra.uni일반적으로 MODULE_UNI_FILE 키 아래의 UNI 파일은 INF 파일과 동일한 이름을 갖는다.
그리고 이러한 파일에는 STR_MODULE_ABSTRACT 및 STR_MODULE_DESCRIPTION의 2개 문자열만 포함된다.
#string STR_MODULE_ABSTRACT #language en-US "Implements Reset2, ResetFilter and ResetHandler PPIs"
#string STR_MODULE_DESCRIPTION #language en-US "This driver implements Reset2, ResetFilter and ResetHandler PPIs."[UserExtensions.TianoCore."ExtraFiles"] 섹션 아래의 UNI 파일은 일반적으로 INF 파일의 이름과 Extra라는 접미사를 붙인 이름을 갖는다.
그리고 이러한 파일에는 STR_PROPERTIES_MODULE_NAME이라는 1개의 문자열만 포함된다.
#string STR_PROPERTIES_MODULE_NAME
#language en-US
"Reset System PEIM"DEC 파일 내 PACKAGE_UNI_FILE/[UserExtensions.TianoCore."ExtraFiles"]
예를 들어 https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.dec를 볼 수 있다.
[Defines]
PACKAGE_UNI_FILE = MdeModulePkg.uni
...
[UserExtensions.TianoCore."ExtraFiles"]
MdeModulePkgExtra.uni여기도 INF파일에서 썼던 명명 체계가 비슷하게 적용되는 것을 알 수 있다.
PACKAGE_UNI_FILE키의 값으로 선언된 파일은 DEC 파일과 정확히 같은 이름이다.[UserExtensions.TianoCore."ExtraFiles"]아래에 선언된 파일의 이름은 동일하며 Extra 접미사를 붙인다.
파일의 내용도 INF 파일과 유사하다. 모든 문자열 토큰 이름이 <Module>이 <Package>로 변경되는 것이 유일한 차이점이다.
MdeModulePkg.uni (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkg.uni)
#string STR_PACKAGE_ABSTRACT #language en-US "Provides the modules that conform to UEFI/PI Industry standards"
#string STR_PACKAGE_DESCRIPTION #language en-US "It also provides the definitions (including PPIs/PROTOCOLs/GUIDs and library classes) and libraries instances, which are used for those modules."MdeModulePkgExtra.uni (https://github.com/tianocore/edk2/blob/master/MdeModulePkg/MdeModulePkgExtra.uni)
#string STR_PROPERTIES_PACKAGE_NAME
#language en-US
"MdeModule package"그 외에도 MdeModulePkg.uni에서 PCD에 대한 일부 문자열을 관찰할 수 있다.
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdProgressCodeOsLoaderLoad_PROMPT #language en-US "Progress Code for OS Loader LoadImage start."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdProgressCodeOsLoaderLoad_HELP #language en-US "Progress Code for OS Loader LoadImage start.<BR><BR>\n"
"PROGRESS_CODE_OS_LOADER_LOAD = (EFI_SOFTWARE_DXE_BS_DRIVER | (EFI_OEM_SPECIFIC | 0x00000000)) = 0x03058000<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_ERR_80000003 #language en-US "Incorrect progress code provided."결론
다시 말하지만 이러한 모든 UNI 파일은 우리가 쓰는 빌드 도구와 관련이 없다. 그러나 이러한 파일은 EDKII 코드베이스 전체에 존재하므로 최소한 이러한 개념에 익숙해져야 한다.
Last updated