9.1 Overview
From a platform point of view (remember, all builds are in the context of a platform, even when the desired output may only be a driver), what will be done in $(MAKE) stage includes building library modules, building non-library modules and finally (if the desired output is a file to be burned into a flash part on a physical platform) generating flash image(s).
Figure 20 EDK II Build Process - Platform Point of View (PoV)
From a module point of view, things done in $(MAKE) stage includes preprocessing, compiling or assembling, static/dynamic linking and module image generation.
Figure 21 EDK II Build Process - Module PoV
9.1.1 File Extensions for UEFI image files.
This section details the intermediate file extensions that generated by the $(MAKE) stage of the build process. This stage involves processing source files and generating dynamic objects which are further processed by the GenFw tool to create .efi files.
Table 17 $(MAKE) Stage Intermediate Output File Extensions
Extension | Description |
---|---|
.obj | Object files generated by $(MAKE) stage |
.lib | Static Linked files generated by $(MAKE) stage |
.dll | Dynamically Linked files generated by $(MAKE) stage |
.aml | ACPI code files generated by $(MAKE) stage |
.i, .iii | Trim and C Pre-Processor output files |
.bin | Microcode files |
Table 18 $(MAKE) Stage Output File Extensions
Extension | Description |
---|---|
.efi | Non UEFI Applications, DXE Drivers, DXE Runtime Drivers, DXE SAL Drivers have the Subsystem type field of the DOS/TE header set to EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION , EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER , EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER and EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER respectively. |
For a Security Module, the Subsystem type is set to EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER . |
|
For PEI_CORE , DXE_CORE , PEIM , DXE_SMM_DRIVER , UEFI_APPLICATION , UEFI_DRIVER , the Subsystem type is set to EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER . |
|
.acpi | ASL or IASL compiled ACPI tables |
.depex | Compiled dependency sections |
.mcb | Microcode Binary files |
Additional modifications to the files are permitted. Modifications that recommended are as follows:
TimeStructure can be modified to a given date using a data structure of
tm_mon,// months since January, [0,11]
tm_mday,// day of the month [1,31]
tm_year,// years since 1900
tm_hour,// hours since midnight [0,23]
tm_min,// minutes after the hour [0,59]
tm_sec,// seconds after the minute [0,59]
Subsystemfield is changed to one of the following:
EFI_IMAGE_SUBSYSTEM_UNKNOWN 0
EFI_IMAGE_SUBSYSTEM_NATIVE 1
EFI_IMAGE_SUBSYSTEM_WINDOWS_GUI 2
EFI_IMAGE_SUBSYSTEM_WINDOWS_CUI 3
EFI_IMAGE_SUBSYSTEM_OS2_CUI 5
EFI_IMAGE_SUBSYSTEM_POSIX_CUI 7
EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION 10
EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13
The Machine value in the PE image file header is used to indicate the machine code type of the image. The following values are set for UEFI images:
EFI_IMAGE_MACHINE_IA32 0x014C
EFI_IMAGE_MACHINE_IA64 0x0200
EFI_IMAGE_MACHINE_x64 0x8664
EFI_IMAGE_MACHINE_EBC 0x0EBC