From 6064c1e48b622f53538f4df9bdd402c607a87d51 Mon Sep 17 00:00:00 2001 From: Konstantin Aladyshev Date: Sat, 10 Jul 2021 00:04:40 +0300 Subject: Move lessons to separate folder Signed-off-by: Konstantin Aladyshev --- Lessons/Lesson_26/README.md | 194 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 Lessons/Lesson_26/README.md (limited to 'Lessons/Lesson_26') diff --git a/Lessons/Lesson_26/README.md b/Lessons/Lesson_26/README.md new file mode 100644 index 0000000..255d139 --- /dev/null +++ b/Lessons/Lesson_26/README.md @@ -0,0 +1,194 @@ +As you remember the entry point for our UEFI programs is: + +``` +EFI_STATUS +EFIAPI +UefiMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +``` + +The passed structure `EFI_SYSTEM_TABLE` looks like this according to UEFI specification: + +``` +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; +``` + +We've already used most of the fields of this structure. Now it is time to peek inside these fields: +``` +UINTN NumberOfTableEntries; +EFI_CONFIGURATION_TABLE *ConfigurationTable +``` +According to the UEFI spec: +``` +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. +``` + +As for EFI_CONFIGURATION_TABLE type: +``` +EFI_CONFIGURATION_TABLE + +Summary: +Contains a set of GUID/pointer pairs comprised of the ConfigurationTable field in the EFI System Table. + +typedef struct{ + EFI_GUID VendorGuid; + VOID *VendorTable; +} EFI_CONFIGURATION_TABLE; + +``` + +Let's create a simple program `ShowTables` to look at tables referenced by this structure in OVMF: +``` +#include +#include + +EFI_STATUS +EFIAPI +UefiMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + for (UINTN i=0; iNumberOfTableEntries; i++) { + Print(L"%g, %p\n", SystemTable->ConfigurationTable[i].VendorGuid, + SystemTable->ConfigurationTable[i].VendorTable); + } + return EFI_SUCCESS; +} +``` + +Build and execute it under OVMF: +``` +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 +``` + +_______ + +Let's search edk2 codebase for GUIDs: +``` +EE4E5898-3914-4259-9D6E-DC7BD79403CF, 78EDF98 +``` +`gLzmaCustomDecompressGuid` + +LZMA_CUSTOM_DECOMPRESS_GUID + +https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/LzmaDecompress.h + +GUID indicates the LZMA custom compress/decompress algorithm. +The Global ID used to identify a section of an FFS file of type EFI_SECTION_GUID_DEFINED, whose contents have been compressed using LZMA. +``` +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 + +HOB List passed from PEI to DXE + +``` +4C19049F-4137-4DD3-9C10-8B97A83FFDFA, 7ED3AA0 +``` +`gEfiMemoryTypeInformationGuid` + +https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryTypeInformation.h + +The memory type information HOB + +``` +49152E77-1ADA-4764-B7A2-7AFEFED95E8B, 7ED5F10 +``` + +`gEfiDebugImageInfoTableGuid` + +https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/Debug ImageInfoTable.h + +Debug Image Info Table + +``` +060CC026-4C0D-4DDA-8F41-595FEF00A502, 7942018 +``` +`gMemoryStatusCodeRecordGuid` + +https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Include/Guid/MemoryStatusCodeRecord.h + +Status code records HOB that originate from the PEI status code + +``` +EB9D2D31-2D88-11D3-9A16-0090273FC14D, 7941000 +``` +`gEfiSmbiosTableGuid` + +https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/SmBios.h + +SMBIOS tables + +``` +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 tables for old specifications + +``` +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 tables for modern specifications + +``` +DCFA911D-26EB-469F-A220-38B7DC461220, 6E77018 +``` + +gEfiMemoryAttributesTableGuid + +https://github.com/tianocore/edk2/tree/master/MdePkg/Include/Guid/MemoryAttributesTable.h + +UEFI Memory Attributes Table [Defined in UEFI spec] + + -- cgit v1.2.3-18-g5258