VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/UefiPayloadPkg/Readme.md@ 109019

Last change on this file since 109019 was 108794, checked in by vboxsync, 4 weeks ago

Devices/EFI/FirmwareNew: Merge edk2-stable202502 from the vendor branch and make it build for the important platforms, bugref:4643

  • Property svn:eol-style set to native
File size: 18.0 KB
Line 
1# UefiPayloadPkg
2Provide UEFI Universal Payload for different bootloader to generate EFI environment
3
4# Spec
5- UniversalPayload URL: https://universalscalablefirmware.github.io/documentation/2_universal_payload.html
6- UniversalPayload URL: https://universalpayload.github.io/spec/
7- ELF Format URL: https://refspecs.linuxfoundation.org/elf/elf.pdf
8- FIT Format URL: https://universalpayload.github.io/spec/chapter2-payload-image-format.html
9
10# Uefi UniversalPayload Format
11 | Binary Format | HandOffPayload - HOB |
12 |---------------|----------------------|
13 | ELF | V (Default) |
14 | FIT | V |
15
16# Binary Format
17 - ELF
18 ```
19 + +-----------------------+
20 | | UniversalPayloadEntry | <----------- UefiPayloadPkg\UefiPayloadEntry\UniversalPayloadEntry.c:_ModuleEntryPoint (HOB)
21 | +-----------------------+
22 | | .upld_info | patch it directly
23 ELF Format | +-----------------------+
24 | | .upld.uefi_fv | patch it directly
25 | +-----------------------+
26 | | .upld.bds_fv | patch it directly
27 | +-----------------------+
28 | | .upld.<afpx>_fv | patch it directly
29 + +-----------------------+
30 ```
31
32 - FIT
33 ```
34 + +-----------------------+
35 FIT Data | | FIT Header | <----------- Generate by pylibfdt
36 + +-----------------------+
37 PECOFF Format | | UniversalPayloadEntry | <----------- UefiPayloadPkg\UefiPayloadEntry\FitUniversalPayloadEntry.c:_ModuleEntryPoint (HOB)
38 + +-----------------------+
39 Relocate Data | | reloc-start |
40 + +-----------------------+
41 | | uefi_fv | patch it directly
42 | +-----------------------+
43 Multi Binary | | bds_fv | patch it directly
44 | +-----------------------+
45 | | afp_xxx_fv | patch it directly
46 | +-----------------------+
47 | | afp_xxx_fv | patch it directly
48 + +-----------------------+
49 ```
50
51# Build Environment
52 - ELF
53 ```
54 Install GCC compiler on linux and MSVC compiler on windows
55 Install CLANG compiler https://github.com/llvm/llvm-project/releases/tag/llvmorg-10.0.1 on windows and linux
56 ```
57 - FIT
58 ```
59 Install GCC compiler on linux and MSVC compiler on windows
60 pip3 install pefile
61 pip3 install pylibfdt
62 ```
63
64# How to build UEFI UniversalPayload
65 - Windows
66 - edksetup Rebuild
67 - Linux
68 - make -C BaseTools
69 - source edksetup.sh
70
71 - UniversalPayload.elf
72 - python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG>
73 - llvm-objdump -h Build/UefiPayloadPkgX64/UniversalPayload.elf
74
75 - UniversalPayload.fit
76 - python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG> --Fit
77
78# How to dump payload binary data
79 - UniversalPayload.elf
80 - Install elf dump tools https://github.com/llvm/llvm-project/releases/tag/llvmorg-10.0.1
81 - llvm-objdump -h Build/UefiPayloadPkgX64/UniversalPayload.elf
82
83 - UniversalPayload.fit
84 - Install fdtdump tool
85 - Windows
86 ```powershell
87 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'))
88 choco install dtc-msys2
89 ```
90 - Linux
91 ```bash
92 sudo apt install -y u-boot-tools
93 ```
94
95 - fdtdump Build/UefiPayloadPkgX64/UniversalPayload.fit
96
97# Edk2boot + UefiUniversalPayload
98ELF Edk2boot use below way to support compress and sign.
99
100- ELF Behavior - Edk2boot + UefiUniversalPayload.elf
101 ```
102 Boot Flow
103 +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
104 | Platform Init | Universal Loader Interface | OS |
105 +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
106 HOBs
107 SEC -> PEI -> DXE -> DXE IPL -> UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ------------------------------------------------------------------------------------> Load UniversalPayload.elf -> Operation System
108
109
110 | Platform Initialize - Edk2 | UniversalPayload - Edk2 |
111 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+
112
113 Binary Format
114
115 +-------------------+
116 | BIOS.rom |
117 +-------------------+
118 | Other Firmware |
119 +-------------------+
120 | ... | FMMT UniversalPayloadBuild.py
121 +-------------------+<----------------+-----------------------+ GenFfs +-----------------------+ Rsa2048Sha256 Sign +-----------------------+ LzmaCompress +----------------------+ GenSec +--------------------------------+
122 | | | EDK2 FFS Header |<-----------| Rsa2048Sha256 Hash |<--------------------| UniversalPayload.lzma |<--------------| EDK2 SEC Header |<--------| UniversalPayload.elf |
123 | RAW Data | +-----------------------+ +-----------------------+ +-----------------------+ +----------------------+ +--------------------------------+
124 | | | Rsa2048Sha256 Hash | | UniversalPayload.lzma | | UniversalPayload.elf | | upld_info |
125 | | +-----------------------+ +-----------------------+ +----------------------+ +--------------------------------+
126 | | | UniversalPayload.lzma | | upld_info | | upld.uefi_fv |
127 +-------------------+<----------------+-----------------------+ +----------------------+ +--------------------------------+
128 | ... | | upld.uefi_fv | | upld.bds_fv |
129 +-------------------+ +----------------------+ +--------------------------------+
130 | Other Firmware | | upld.bds_fv | | upld.AFP1 |
131 +-------------------+ +----------------------+ +--------------------------------+
132 | upld.AFP1 | | upld.AFP2 |
133 +----------------------+ +--------------------------------+
134 | upld.AFP2 | | ... |
135 +----------------------+ +--------------------------------+
136 | ... | | upld.AFPn |
137 +----------------------+ +--------------------------------+
138 | upld.AFPn |
139 +----------------------+
140 ```
141
142FIT Edk2boot use below way to support compress and sign
143- FIT Behavior - Edk2boot + UefiUniversalPayload.fit
144 ```
145 Boot Flow
146 +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
147 | Platform Init | Universal Loader Interface | OS |
148 +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
149 HOBs
150 SEC -> PEI -> DXE -> DXE IPL -> *UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ----------------------------------------------> Load UniversalPayload.fit -> Operation System
151
152 Binary Format
153
154 | Platform Initialize - Edk2 | UniversalPayload - Edk2 (UniversalPayloadBuild.py --Fit) |
155 +---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+
156
157 +-------------------+
158 | BIOS.rom |
159 +-------------------+
160 | Other Firmware |
161 +-------------------+
162 | ... | FMMT UniversalPayloadBuild.py --Fit tianocore -> data-offset
163 +-------------------+<----------------+--------------------------------+ GenFfs +--------------------------------+ GenSec +--------------------------------+ tianocore -> reloc-start +--------------------------+
164 | | | EDK2 FFS Header |<--------| EDK2 SEC Header |<--------| FIT Header |<-------------------------| UniversalPayload.pecoff |
165 | | +--------------------------------+ +--------------------------------+ | description = "Uefi Payload"; | +--------------------------+
166 | | | EDK2 SEC Header | | FIT Header | | ... |
167 | RAW Data | +--------------------------------+ | | | images { | uefi-fv -> data-offset +--------------------------+
168 | | | FIT Header | | | | tianocore {...}; |<-------------------------| uefi_fv |
169 | | | | +--------------------------------+ | uefi-fv {...}; | bds-fv -> data-offset +--------------------------+
170 | | | | | tianocore -> data | | bds-fv {...}; |<-------------------------| bds_fv |
171 | | +--------------------------------+ +--------------------------------+ | afp1-fv {...}; | AFP1 -> data-offset +--------------------------+
172 | | | tianocore -> data | | tianocore -> reloc-start | | ... |<-------------------------| AFP1 |
173 | | +--------------------------------+ +--------------------------------+ | afpn-fv {...}; | AFP2 -> data-offset +--------------------------+
174 | | | tianocore -> reloc-start | | uefi-fv -> data | | } |<-------------------------| AFP2 |
175 | | +--------------------------------+ +--------------------------------+ | configurations { | ... +--------------------------+
176 | | | uefi-fv -> data | | bds-fv -> data | | conf-1 {...} |<-------------------------| ... |
177 | | +--------------------------------+ +--------------------------------+ | } | AFPn -> data-offset +--------------------------+
178 | | | bds-fv -> data | | AFP1-fv -> data | | |<-------------------------| AFPn |
179 | | +--------------------------------+ +--------------------------------+ | | +--------------------------+
180 | | | AFP1-fv -> data | | AFP2-fv -> data | | |
181 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
182 | | | AFP2-fv -> data | | ... | | tianocore -> data |
183 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
184 | | | ... | | AFPn-fv -> data | | tianocore -> reloc-start |
185 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
186 | | | AFPn-fv -> data | | uefi-fv -> data |
187 +-------------------+<----------------+--------------------------------+ +--------------------------------+
188 | ... | | bds-fv -> data |
189 +-------------------+ +--------------------------------+
190 | Other Firmware | | AFP1-fv -> data |
191 +-------------------+ +--------------------------------+
192 | AFP2-fv -> data |
193 +--------------------------------+
194 | ... |
195 +--------------------------------+
196 | AFPn-fv -> data |
197 +--------------------------------+
198
199 ```
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette