VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/UefiPayloadPkg/Readme.md@ 106411

最後變更 在這個檔案從106411是 105670,由 vboxsync 提交於 6 月 前

Devices/EFI/FirmwareNew: Merge edk2-stable-202405 and make it build on aarch64, bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 17.6 KB
 
1# UefiPayloadPkg
2Provide UEFI Universal Payload for different bootloader to generate EFI environment
3
4# Spec
5UniversalPayload URL: https://universalscalablefirmware.github.io/documentation/2_universal_payload.html
6UniversalPayload URL: https://universalpayload.github.io/spec/
7ELF Format URL: https://refspecs.linuxfoundation.org/elf/elf.pdf
8FIT 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# Environment
52 - ELF
53 ```
54 Download and install https://github.com/llvm/llvm-project/releases/tag/llvmorg-10.0.1
55 ```
56 - FIT
57 - Windows
58 ```powershell
59 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'))
60 choco install dtc-msys2
61 pip3 install pefile
62 pip3 install swig
63 pip3 install pylibfdt
64 ```
65 - Ubuntu
66 ```bash
67 sudo apt install -y u-boot-tools
68 pip3 install pefile
69 pip3 install swig
70 pip3 install pylibfdt
71 ```
72# How to build UEFI UniversalPayload
73 - Windows
74 - edksetup Rebuild
75 - Linux
76 - make -C BaseTools
77 - source edksetup.sh
78
79 - UniversalPayload.elf
80 - python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG>
81 - llvm-objdump -h Build/UefiPayloadPkgX64/UniversalPayload.elf
82
83 - UniversalPayload.fit
84 - python UefiPayloadPkg/UniversalPayloadBuild.py -t <TOOL_CHAIN_TAG> --Fit
85 - fdtdump Build/UefiPayloadPkgX64/UniversalPayload.fit
86
87# Edk2boot + UefiUniversalPayload
88ELF Edk2boot use below way to support compress and sign.
89
90- ELF Behavior - Edk2boot + UefiUniversalPayload.elf
91 ```
92 Boot Flow
93 +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
94 | Platform Init | Universal Loader Interface | OS |
95 +-------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+-------------------+
96 HOBs
97 SEC -> PEI -> DXE -> DXE IPL -> UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ------------------------------------------------------------------------------------> Load UniversalPayload.elf -> Operation System
98
99
100 | Platform Initialize - Edk2 | UniversalPayload - Edk2 |
101 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------+
102
103 Binary Format
104
105 +-------------------+
106 | BIOS.rom |
107 +-------------------+
108 | Other Firmware |
109 +-------------------+
110 | ... | FMMT UniversalPayloadBuild.py
111 +-------------------+<----------------+-----------------------+ GenFfs +-----------------------+ Rsa2048Sha256 Sign +-----------------------+ LzmaCompress +----------------------+ GenSec +--------------------------------+
112 | | | EDK2 FFS Header |<-----------| Rsa2048Sha256 Hash |<--------------------| UniversalPayload.lzma |<--------------| EDK2 SEC Header |<--------| UniversalPayload.elf |
113 | RAW Data | +-----------------------+ +-----------------------+ +-----------------------+ +----------------------+ +--------------------------------+
114 | | | Rsa2048Sha256 Hash | | UniversalPayload.lzma | | UniversalPayload.elf | | upld_info |
115 | | +-----------------------+ +-----------------------+ +----------------------+ +--------------------------------+
116 | | | UniversalPayload.lzma | | upld_info | | upld.uefi_fv |
117 +-------------------+<----------------+-----------------------+ +----------------------+ +--------------------------------+
118 | ... | | upld.uefi_fv | | upld.bds_fv |
119 +-------------------+ +----------------------+ +--------------------------------+
120 | Other Firmware | | upld.bds_fv | | upld.AFP1 |
121 +-------------------+ +----------------------+ +--------------------------------+
122 | upld.AFP1 | | upld.AFP2 |
123 +----------------------+ +--------------------------------+
124 | upld.AFP2 | | ... |
125 +----------------------+ +--------------------------------+
126 | ... | | upld.AFPn |
127 +----------------------+ +--------------------------------+
128 | upld.AFPn |
129 +----------------------+
130 ```
131
132FIT Edk2boot use below way to support compress and sign
133- FIT Behavior - Edk2boot + UefiUniversalPayload.fit
134 ```
135 Boot Flow
136 +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
137 | Platform Init | Universal Loader Interface | OS |
138 +-------------------------------------------------------------------------------------+------------------------------------------------------------------------+-------------------+
139 HOBs
140 SEC -> PEI -> DXE -> DXE IPL -> *UefiPayloadPkg\PayloadLoaderPeim\PayloadLoaderPeim.c ----------------------------------------------> Load UniversalPayload.fit -> Operation System
141
142 Binary Format
143
144 | Platform Initialize - Edk2 | UniversalPayload - Edk2 (UniversalPayloadBuild.py --Fit) |
145 +---------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+
146
147 +-------------------+
148 | BIOS.rom |
149 +-------------------+
150 | Other Firmware |
151 +-------------------+
152 | ... | FMMT UniversalPayloadBuild.py --Fit tianocore -> data-offset
153 +-------------------+<----------------+--------------------------------+ GenFfs +--------------------------------+ GenSec +--------------------------------+ tianocore -> reloc-start +--------------------------+
154 | | | EDK2 FFS Header |<--------| EDK2 SEC Header |<--------| FIT Header |<-------------------------| UniversalPayload.pecoff |
155 | | +--------------------------------+ +--------------------------------+ | description = "Uefi Payload"; | +--------------------------+
156 | | | EDK2 SEC Header | | FIT Header | | ... |
157 | RAW Data | +--------------------------------+ | | | images { | uefi-fv -> data-offset +--------------------------+
158 | | | FIT Header | | | | tianocore {...}; |<-------------------------| uefi_fv |
159 | | | | +--------------------------------+ | uefi-fv {...}; | bds-fv -> data-offset +--------------------------+
160 | | | | | tianocore -> data | | bds-fv {...}; |<-------------------------| bds_fv |
161 | | +--------------------------------+ +--------------------------------+ | afp1-fv {...}; | AFP1 -> data-offset +--------------------------+
162 | | | tianocore -> data | | tianocore -> reloc-start | | ... |<-------------------------| AFP1 |
163 | | +--------------------------------+ +--------------------------------+ | afpn-fv {...}; | AFP2 -> data-offset +--------------------------+
164 | | | tianocore -> reloc-start | | uefi-fv -> data | | } |<-------------------------| AFP2 |
165 | | +--------------------------------+ +--------------------------------+ | configurations { | ... +--------------------------+
166 | | | uefi-fv -> data | | bds-fv -> data | | conf-1 {...} |<-------------------------| ... |
167 | | +--------------------------------+ +--------------------------------+ | } | AFPn -> data-offset +--------------------------+
168 | | | bds-fv -> data | | AFP1-fv -> data | | |<-------------------------| AFPn |
169 | | +--------------------------------+ +--------------------------------+ | | +--------------------------+
170 | | | AFP1-fv -> data | | AFP2-fv -> data | | |
171 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
172 | | | AFP2-fv -> data | | ... | | tianocore -> data |
173 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
174 | | | ... | | AFPn-fv -> data | | tianocore -> reloc-start |
175 | | +--------------------------------+ +--------------------------------+ +--------------------------------+
176 | | | AFPn-fv -> data | | uefi-fv -> data |
177 +-------------------+<----------------+--------------------------------+ +--------------------------------+
178 | ... | | bds-fv -> data |
179 +-------------------+ +--------------------------------+
180 | Other Firmware | | AFP1-fv -> data |
181 +-------------------+ +--------------------------------+
182 | AFP2-fv -> data |
183 +--------------------------------+
184 | ... |
185 +--------------------------------+
186 | AFPn-fv -> data |
187 +--------------------------------+
188
189 ```
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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