> 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/table/26.efi_configuration_table.md).

# 26. EFI\_CONFIGURATION\_TABLE에서 참조되는 테이블

이전에 사용된 UEFI 애플리케이션들은 아래와 같은 Entry point을 계속해서 사용해왔다.

```
EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
```

이전에 살펴보지 않은 `EFI_SYSTEM_TABLE` 구조는 다음과 같은 UEFI 스펙을 따른다.

```
typedef struct {
 EFI_TABLE_HEADER Hdr;
 CHAR16 *FirmwareVendor;
 UINT32 FirmwareRevision;
 EFI_HANDLE ConsoleInHandle;
 EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
 EFI_HANDLE ConsoleOutHandle;
 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
 EFI_HANDLE StandardErrorHandle;
 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr;
 EFI_RUNTIME_SERVICES *RuntimeServices;
 EFI_BOOT_SERVICES *BootServices;
 UINTN NumberOfTableEntries;
 EFI_CONFIGURATION_TABLE *ConfigurationTable;
} EFI_SYSTEM_TABLE;
```

우리는 이미 해당 구조의 대부분의 필드를 사용해왔고, 이제 다른 필드들을 살펴볼 차례이다.

```
UINTN NumberOfTableEntries;
EFI_CONFIGURATION_TABLE *ConfigurationTable
```

UEFI의 스펙에 따르면 아래와 같이 설명이 나와있다.

```
NumberOfTableEntries	The number of system configuration tables in the buffer ConfigurationTable.
ConfigurationTable	A pointer to the system configuration tables. The number of entries in the table is NumberOfTableEntries.
```

`ConfigurationTable`에서 사용되는 `EFI_CONFIGURATION_TABLE` type은 아래와 같은 구조를 나타내고 있다.

이를 통해서 `ShowTables`라는 간단한 애플리케이션을 만들어 OVMF에서 해당 구조가 참조하는 테이블을 살펴보겠다.

```
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  for (UINTN i=0; i<SystemTable->NumberOfTableEntries; i++) {
    Print(L"%g, %p\n", SystemTable->ConfigurationTable[i].VendorGuid,
                       SystemTable->ConfigurationTable[i].VendorTable);
  }
  return EFI_SUCCESS;
}
```

빌드 후 실행을 하면 아래와 같은 결과가 나온다.

```
FS0:\> ShowTables.efi
EE4E5898-3914-4259-9D6E-DC7BD79403CF, 78EDF98
05AD34BA-6F02-4214-952E-4DA0398E2BB9, 7ED2AC0
7739F24C-93D7-11D4-9A3A-0090273FC14D, 78EA018
4C19049F-4137-4DD3-9C10-8B97A83FFDFA, 7ED3AA0
49152E77-1ADA-4764-B7A2-7AFEFED95E8B, 7ED5F10
060CC026-4C0D-4DDA-8F41-595FEF00A502, 7942018
EB9D2D31-2D88-11D3-9A16-0090273FC14D, 7941000
EB9D2D30-2D88-11D3-9A16-0090273FC14D, 7B7E000
8868E871-E4F1-11D3-BC22-0080C73C8881, 7B7E014
DCFA911D-26EB-469F-A220-38B7DC461220, 6E86018
```

해당 GUID들을 edk2 코드베이스에서 찾아보자.

```
EE4E5898-3914-4259-9D6E-DC7BD79403CF, 78EDF98
```

`gLzmaCustomDecompressGuid`\
\`\`LZMA\_CUSTOM\_DECOMPRESS\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/LzmaDecompress.h>\
GUID는 LZMA 사용자 지정 압축/압축 해제 알고리즘을 나타낸다. 콘텐츠가 LZMA를 사용하여 압축된 EFI\_SECTION\_GUID\_DEFINED 유형의 FFS 파일 섹션을 식별하는 데 사용되는 전역 ID이다.

```
05AD34BA-6F02-4214-952E-4DA0398E2BB9, 7ED2AC0
```

`gEfiDxeServicesTableGuid`\
\`\`DXE\_SERVICES\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/DxeServices.h> (DXE Services Table)

```
7739F24C-93D7-11D4-9A3A-0090273FC14D, 78EA018
```

`gEfiHobListGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/HobList.h>\
PEI에서 DXE로 전달된 HOB목록

```
4C19049F-4137-4DD3-9C10-8B97A83FFDFA, 7ED3AA0
```

`gEfiMemoryTypeInformationGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryTypeInformation.h>\
HOB 메모리 유형 정보

```
49152E77-1ADA-4764-B7A2-7AFEFED95E8B, 7ED5F10
```

`gEfiDebugImageInfoTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Debug>

```
060CC026-4C0D-4DDA-8F41-595FEF00A502, 7942018
```

`gMemoryStatusCodeRecordGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryStatusCodeRecord.h>\
PEI Status 코드에서 발생한 HOB에 대한 Status 코드를 기록한다.

```
EB9D2D31-2D88-11D3-9A16-0090273FC14D, 7941000
```

`gEfiSmbiosTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/SmBios.h>

```
EB9D2D30-2D88-11D3-9A16-0090273FC14D, 7B7E000
```

`gEfiAcpi10TableGuid`\
\`\`ACPI\_10\_TABLE\_GUID ACPI\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Acpi.h>\
이전 사양에 대한 ACPI 테이블

```
8868E871-E4F1-11D3-BC22-0080C73C8881, 7B7E014
```

`gEfiAcpiTableGuid/gEfiAcpi20TableGuid`\
\`\`EFI\_ACPI\_20\_TABLE\_GUID EFI\_ACPI\_TABLE\_GUID\
<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Acpi.h>\
최신 사양에 대한 ACPI 테이블

```
DCFA911D-26EB-469F-A220-38B7DC461220, 6E77018
```

`gEfiMemoryAttributesTableGuid`\
\`\`<https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/MemoryAttributesTable.h>\
UEFI 메모리 속성 테이블\[UEFI 규격에 정의]
