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"]

https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Universal/ResetSystemPei/ResetSystemPei.inf를 살펴보면,

[Defines]
 ...
 MODULE_UNI_FILE                = ResetSystemPei.uni

...

[UserExtensions.TianoCore."ExtraFiles"]
  ResetSystemPeiExtra.uni

일반적으로 MODULE_UNI_FILE 키 아래의 UNI 파일은 INF 파일과 동일한 이름을 갖는다.

그리고 이러한 파일에는 STR_MODULE_ABSTRACT 및 STR_MODULE_DESCRIPTION의 2개 문자열만 포함된다.

예: https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Universal/ResetSystemPei/ResetSystemPei.uni

#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개의 문자열만 포함된다.

예: https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Universal/ResetSystemPei/ResetSystemPeiExtra.uni

#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>로 변경되는 것이 유일한 차이점이다.

#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."
#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