> For the complete documentation index, see [llms.txt](https://bob-mcd-team.gitbook.io/uefi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/49.uni-file.md).

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

* 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 코드베이스 전체에 존재하므로 최소한 이러한 개념에 익숙해져야 한다.
