audk/UefiPayloadPkg
Brucex.Wang 39f3c26e8c UefiPayloadPkg: Add FIT support
Provide Fit format for UniversalPayload, developer can use argument
"--Fit" to build UniversalPayload.fit

Cc: Guo Dong <guo.dong@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>

Reviewed-by: Gua Guo <gua.guo@intel.com>

Signed-off-by: BruceX Wang <brucex.wang@intel.com>
2023-09-26 07:26:21 +00:00
..
BlSupportDxe UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
BlSupportSmm BlSupportSmm: fix definition of SetSmrr() 2022-03-07 22:48:49 +00:00
FvbRuntimeDxe UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
GraphicsOutputDxe UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Include UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
Library UefiPayloadPkg: Integrate UiApp and BootManagerMenuApp into MultiFv 2023-07-11 06:36:11 +00:00
PayloadLoaderPeim UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
PchSmiDispatchSmm UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
SmmAccessDxe UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
SmmControlRuntimeDxe UefiPayloadPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Tools UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
UefiPayloadEntry UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
BuildAndIntegrationInstructions.txt UefiPayloadPkg: Fix architecture in the build instruction 2022-03-29 05:18:43 +00:00
Readme.md UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
UefiPayloadPkg.ci.yaml UefiPayloadPkg: Clang dependency removal 2023-04-28 05:54:26 +00:00
UefiPayloadPkg.dec UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
UefiPayloadPkg.dsc UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
UefiPayloadPkg.fdf UefiPayloadPkg: Integrate UiApp and BootManagerMenuApp into MultiFv 2023-07-11 06:36:11 +00:00
UniversalPayloadBuild.py UefiPayloadPkg: Add FIT support 2023-09-26 07:26:21 +00:00
UniversalPayloadBuild.sh UefiPayloadPkg: Provide a wrapper for UniversalPayloadBuild.py 2022-09-28 17:52:34 +08:00

Readme.md

UefiPayloadPkg

Provide UEFI Universal Payload for different bootloader to generate EFI environment

Spec

UniversalPayload URL: https://universalscalablefirmware.github.io/documentation/2_universal_payload.html UniversalPayload URL: https://universalpayload.github.io/spec/ ELF Format URL: https://refspecs.linuxfoundation.org/elf/elf.pdf FIT Format URL: https://universalpayload.github.io/spec/chapter2-payload-image-format.html

Uefi UniversalPayload Format

Binary Format HandOffPayload - HOB
ELF V (Default)
FIT V

Binary Format

  • ELF

                  +  +-----------------------+
                  |  | UniversalPayloadEntry | <----------- UefiPayloadPkg\UefiPayloadEntry\UniversalPayloadEntry.c:_ModuleEntryPoint (HOB)
                  |  +-----------------------+
                  |  | .upld_info            | patch it directly
    ELF Format    |  +-----------------------+
                  |  | .upld.uefi_fv         | patch it directly
                  |  +-----------------------+
                  |  | .upld.bds_fv          | patch it directly
                  |  +-----------------------+
                  |  | .upld.<afpx>_fv       | patch it directly
                  +  +-----------------------+
    
  • FIT

                  +  +-----------------------+
    FIT Data      |  | FIT Header            | <----------- Generate by pylibfdt
                  +  +-----------------------+
    PECOFF Format |  | UniversalPayloadEntry | <----------- UefiPayloadPkg\UefiPayloadEntry\FitUniversalPayloadEntry.c:_ModuleEntryPoint (HOB)
                  +  +-----------------------+
    Relocate Data |  | reloc-start           |
                  +  +-----------------------+
                  |  | uefi_fv               | patch it directly
                  |  +-----------------------+
    Multi Binary  |  | bds_fv                | patch it directly
                  |  +-----------------------+
                  |  | afp_xxx_fv            | patch it directly
                  |  +-----------------------+
                  |  | afp_xxx_fv            | patch it directly
                  +  +-----------------------+
    

Environment

  • ELF
    Download and install https://github.com/llvm/llvm-project/releases/tag/llvmorg-10.0.1
    
  • FIT
    • Windows
      Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
      choco install dtc-msys2
      pip3 install pefile
      pip3 install swig
      pip3 install pylibfdt
      
    • Ubuntu
      sudo apt install -y u-boot-tools
      pip3 install pefile
      pip3 install swig
      pip3 install pylibfdt
      

How to build UEFI UniversalPayload

  • Windows

    • edksetup Rebuild
  • Linux

    • make -C BaseTools
    • source edksetup.sh
  • UniversalPayload.elf

    • python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG>
    • llvm-objdump -h Build/UefiPayloadPkgX64/UniversalPayload.elf
  • UniversalPayload.fit

    • python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG> --Fit
    • fdtdump Build/UefiPayloadPkgX64/UniversalPayload.fit

Edk2boot + UefiUniversalPayload

ELF Edk2boot use below way to support compress and sign.

  • ELF Behavior - Edk2boot + UefiUniversalPayload.elf
    Boot Flow
    +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
    | Platform Init                                                                       | Universal Loader Interface                                                                                | OS                |
    +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
                                                                                                                                                                       HOBs
    SEC -> PEI -> DXE -> DXE IPL -> UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ------------------------------------------------------------------------------------> Load UniversalPayload.elf -> Operation System
    
    
    | Platform Initialize - Edk2                                                                                                                                                                      | UniversalPayload - Edk2        |
    +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+
    
    Binary Format
    
    +-------------------+
    | BIOS.rom          |
    +-------------------+
    | Other Firmware    |
    +-------------------+
    | ...               |  FMMT                                                                                                                                                                        UniversalPayloadBuild.py
    +-------------------+<----------------+-----------------------+  GenFfs    +-----------------------+  Rsa2048Sha256 Sign +-----------------------+  LzmaCompress +----------------------+  GenSec +--------------------------------+
    |                   |                 | EDK2 FFS Header       |<-----------| Rsa2048Sha256 Hash    |<--------------------| UniversalPayload.lzma |<--------------| EDK2 SEC Header      |<--------| UniversalPayload.elf           |
    | RAW Data          |                 +-----------------------+            +-----------------------+                     +-----------------------+               +----------------------+         +--------------------------------+
    |                   |                 | Rsa2048Sha256 Hash    |            | UniversalPayload.lzma |                                                             | UniversalPayload.elf |         | upld_info                      |
    |                   |                 +-----------------------+            +-----------------------+                                                             +----------------------+         +--------------------------------+
    |                   |                 | UniversalPayload.lzma |                                                                                                  | upld_info            |         | upld.uefi_fv                   |
    +-------------------+<----------------+-----------------------+                                                                                                  +----------------------+         +--------------------------------+
    | ...               |                                                                                                                                            | upld.uefi_fv         |         | upld.bds_fv                    |
    +-------------------+                                                                                                                                            +----------------------+         +--------------------------------+
    | Other Firmware    |                                                                                                                                            | upld.bds_fv          |         | upld.AFP1                      |
    +-------------------+                                                                                                                                            +----------------------+         +--------------------------------+
                                                                                                                                                                     | upld.AFP1            |         | upld.AFP2                      |
                                                                                                                                                                     +----------------------+         +--------------------------------+
                                                                                                                                                                     | upld.AFP2            |         | ...                            |
                                                                                                                                                                     +----------------------+         +--------------------------------+
                                                                                                                                                                     | ...                  |         | upld.AFPn                      |
                                                                                                                                                                     +----------------------+         +--------------------------------+
                                                                                                                                                                     | upld.AFPn            |
                                                                                                                                                                     +----------------------+
    

FIT Edk2boot use below way to support compress and sign

  • FIT Behavior - Edk2boot + UefiUniversalPayload.fit
    Boot Flow
    +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
    | Platform Init                                                                       | Universal Loader Interface                                             | OS                |
    +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
                                                                                                        HOBs
    SEC -> PEI -> DXE -> DXE IPL -> *UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ----------------------------------------------> Load UniversalPayload.fit -> Operation System
    
    Binary Format
    
    | Platform Initialize - Edk2                                                                                                | UniversalPayload - Edk2 (UniversalPayloadBuild.py --Fit)                                |
    +---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+
    
    +-------------------+
    | BIOS.rom          |
    +-------------------+
    | Other Firmware    |
    +-------------------+
    | ...               |  FMMT                                                                                                  UniversalPayloadBuild.py --Fit    tianocore -> data-offset
    +-------------------+<----------------+--------------------------------+  GenFfs +--------------------------------+  GenSec +--------------------------------+ tianocore -> reloc-start +--------------------------+
    |                   |                 | EDK2 FFS Header                |<--------| EDK2 SEC Header                |<--------| FIT Header                     |<-------------------------| UniversalPayload.pecoff  |
    |                   |                 +--------------------------------+         +--------------------------------+         | description = "Uefi Payload";  |                          +--------------------------+
    |                   |                 | EDK2 SEC Header                |         | FIT Header                     |         | ...                            |
    | RAW Data          |                 +--------------------------------+         |                                |         | images {                       | uefi-fv -> data-offset   +--------------------------+
    |                   |                 | FIT Header                     |         |                                |         |   tianocore {...};             |<-------------------------| uefi_fv                  |
    |                   |                 |                                |         +--------------------------------+         |   uefi-fv {...};               | bds-fv -> data-offset    +--------------------------+
    |                   |                 |                                |         | tianocore -> data              |         |   bds-fv {...};                |<-------------------------| bds_fv                   |
    |                   |                 +--------------------------------+         +--------------------------------+         |   afp1-fv {...};               | AFP1 -> data-offset      +--------------------------+
    |                   |                 | tianocore -> data              |         | tianocore -> reloc-start       |         |   ...                          |<-------------------------| AFP1                     |
    |                   |                 +--------------------------------+         +--------------------------------+         |   afpn-fv {...};               | AFP2 -> data-offset      +--------------------------+
    |                   |                 | tianocore -> reloc-start       |         | uefi-fv -> data                |         | }                              |<-------------------------| AFP2                     |
    |                   |                 +--------------------------------+         +--------------------------------+         | configurations {               | ...                      +--------------------------+
    |                   |                 | uefi-fv -> data                |         | bds-fv -> data                 |         |   conf-1 {...}                 |<-------------------------| ...                      |
    |                   |                 +--------------------------------+         +--------------------------------+         | }                              | AFPn -> data-offset      +--------------------------+
    |                   |                 | bds-fv -> data                 |         | AFP1-fv -> data                |         |                                |<-------------------------| AFPn                     |
    |                   |                 +--------------------------------+         +--------------------------------+         |                                |                          +--------------------------+
    |                   |                 | AFP1-fv -> data                |         | AFP2-fv -> data                |         |                                |
    |                   |                 +--------------------------------+         +--------------------------------+         +--------------------------------+
    |                   |                 | AFP2-fv -> data                |         | ...                            |         | tianocore -> data              |
    |                   |                 +--------------------------------+         +--------------------------------+         +--------------------------------+
    |                   |                 | ...                            |         | AFPn-fv -> data                |         | tianocore -> reloc-start       |
    |                   |                 +--------------------------------+         +--------------------------------+         +--------------------------------+
    |                   |                 | AFPn-fv -> data                |                                                    | uefi-fv -> data                |
    +-------------------+<----------------+--------------------------------+                                                    +--------------------------------+
    | ...               |                                                                                                       | bds-fv -> data                 |
    +-------------------+                                                                                                       +--------------------------------+
    | Other Firmware    |                                                                                                       | AFP1-fv -> data                |
    +-------------------+                                                                                                       +--------------------------------+
                                                                                                                                | AFP2-fv -> data                |
                                                                                                                                +--------------------------------+
                                                                                                                                | ...                            |
                                                                                                                                +--------------------------------+
                                                                                                                                | AFPn-fv -> data                |
                                                                                                                                +--------------------------------+