Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0+ |
| 2 | .. Copyright (C) 2015 Google, Inc |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 3 | |
| 4 | U-Boot on EFI |
| 5 | ============= |
| 6 | This document provides information about U-Boot running on top of EFI, either |
| 7 | as an application or just as a means of getting U-Boot onto a new platform. |
| 8 | |
| 9 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 10 | Motivation |
| 11 | ---------- |
| 12 | Running U-Boot on EFI is useful in several situations: |
| 13 | |
| 14 | - You have EFI running on a board but U-Boot does not natively support it |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 15 | fully yet. You can boot into U-Boot from EFI and use that until U-Boot is |
| 16 | fully ported |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 17 | |
| 18 | - You need to use an EFI implementation (e.g. UEFI) because your vendor |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 19 | requires it in order to provide support |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 20 | |
| 21 | - You plan to use coreboot to boot into U-Boot but coreboot support does |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 22 | not currently exist for your platform. In the meantime you can use U-Boot |
| 23 | on EFI and then move to U-Boot on coreboot when ready |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 24 | |
| 25 | - You use EFI but want to experiment with a simpler alternative like U-Boot |
| 26 | |
| 27 | |
| 28 | Status |
| 29 | ------ |
| 30 | Only x86 is supported at present. If you are using EFI on another architecture |
| 31 | you may want to reconsider. However, much of the code is generic so could be |
| 32 | ported. |
| 33 | |
Simon Glass | d38bbb5 | 2023-09-03 09:15:51 -0600 | [diff] [blame] | 34 | U-Boot supports running as an EFI application for both 32- and 64-bit EFI. |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 35 | |
Simon Glass | d38bbb5 | 2023-09-03 09:15:51 -0600 | [diff] [blame] | 36 | U-Boot supports building itself as a payload for either 32-bit or 64-bit EFI. |
| 37 | U-Boot is packaged up and loaded in its entirety by EFI. Once started, U-Boot |
| 38 | changes to 32-bit mode (currently) and takes over the machine. You can use |
| 39 | devices, boot a kernel, etc. |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 40 | |
| 41 | |
| 42 | Build Instructions |
| 43 | ------------------ |
| 44 | First choose a board that has EFI support and obtain an EFI implementation |
| 45 | for that board. It will be either 32-bit or 64-bit. Alternatively, you can |
| 46 | opt for using QEMU [1] and the OVMF [2], as detailed below. |
| 47 | |
Simon Glass | d38bbb5 | 2023-09-03 09:15:51 -0600 | [diff] [blame] | 48 | To build U-Boot as an EFI application, enable CONFIG_EFI and CONFIG_EFI_APP. |
| 49 | The efi-x86_app32 and efi-x86_app64 configs are set up for this. Just build |
| 50 | U-Boot as normal, e.g.:: |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 51 | |
Simon Glass | 49a643b | 2021-11-03 21:09:07 -0600 | [diff] [blame] | 52 | make efi-x86_app32_defconfig |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 53 | make |
| 54 | |
Bin Meng | 858429b | 2018-06-12 08:36:18 -0700 | [diff] [blame] | 55 | To build U-Boot as an EFI payload (32-bit or 64-bit EFI can be used), enable |
| 56 | CONFIG_EFI, CONFIG_EFI_STUB, and select either CONFIG_EFI_STUB_32BIT or |
| 57 | CONFIG_EFI_STUB_64BIT. The efi-x86_payload configs (efi-x86_payload32_defconfig |
| 58 | and efi-x86_payload32_defconfig) are set up for this. Then build U-Boot as |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 59 | normal, e.g.:: |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 60 | |
Bin Meng | 858429b | 2018-06-12 08:36:18 -0700 | [diff] [blame] | 61 | make efi-x86_payload32_defconfig (or efi-x86_payload64_defconfig) |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 62 | make |
| 63 | |
| 64 | You will end up with one of these files depending on what you build for: |
| 65 | |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 66 | * u-boot-app.efi - U-Boot EFI application |
| 67 | * u-boot-payload.efi - U-Boot EFI payload application |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 68 | |
| 69 | |
| 70 | Trying it out |
| 71 | ------------- |
| 72 | QEMU is an emulator and it can emulate an x86 machine. Please make sure your |
Bin Meng | 74efc6e | 2021-06-21 10:12:32 +0800 | [diff] [blame] | 73 | QEMU version is 6.0.0 or above to test this. You can run the payload with |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 74 | something like this:: |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 75 | |
| 76 | mkdir /tmp/efi |
| 77 | cp /path/to/u-boot*.efi /tmp/efi |
Bin Meng | 74efc6e | 2021-06-21 10:12:32 +0800 | [diff] [blame] | 78 | qemu-system-x86_64 -pflash edk2-x86_64-code.fd -hda fat:rw:/tmp/efi/ |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 79 | |
| 80 | Add -nographic if you want to use the terminal for output. Once it starts |
| 81 | type 'fs0:u-boot-payload.efi' to run the payload or 'fs0:u-boot-app.efi' to |
Bin Meng | 74efc6e | 2021-06-21 10:12:32 +0800 | [diff] [blame] | 82 | run the application. 'edk2-x86_64-code.fd' is the EFI 'BIOS'. QEMU already |
| 83 | ships both 32-bit and 64-bit EFI BIOS images. For 32-bit EFI 'BIOS' image, |
| 84 | use 'edk2-i386-code.fd'. |
| 85 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 86 | |
| 87 | To try it on real hardware, put u-boot-app.efi on a suitable boot medium, |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 88 | such as a USB stick. Then you can type something like this to start it:: |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 89 | |
| 90 | fs0:u-boot-payload.efi |
| 91 | |
| 92 | (or fs0:u-boot-app.efi for the application) |
| 93 | |
| 94 | This will start the payload, copy U-Boot into RAM and start U-Boot. Note |
| 95 | that EFI does not support booting a 64-bit application from a 32-bit |
| 96 | EFI (or vice versa). Also it will often fail to print an error message if |
| 97 | you get this wrong. |
| 98 | |
Simon Glass | daa53a2 | 2021-11-03 21:09:03 -0600 | [diff] [blame] | 99 | You may find the script `scripts/build-efi.sh` helpful for building and testing |
| 100 | U-Boot on UEFI on QEMU. It also includes links to UEFI binaries dating from |
| 101 | 2021. |
| 102 | |
| 103 | See `Example run`_ for an example run. |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 104 | |
| 105 | Inner workings |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 106 | -------------- |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 107 | Here follow a few implementation notes for those who want to fiddle with |
| 108 | this and perhaps contribute patches. |
| 109 | |
| 110 | The application and payload approaches sound similar but are in fact |
| 111 | implemented completely differently. |
| 112 | |
| 113 | EFI Application |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 114 | ~~~~~~~~~~~~~~~ |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 115 | For the application the whole of U-Boot is built as a shared library. The |
| 116 | efi_main() function is in lib/efi/efi_app.c. It sets up some basic EFI |
| 117 | functions with efi_init(), sets up U-Boot global_data, allocates memory for |
| 118 | U-Boot's malloc(), etc. and enters the normal init sequence (board_init_f() |
| 119 | and board_init_r()). |
| 120 | |
| 121 | Since U-Boot limits its memory access to the allocated regions very little |
| 122 | special code is needed. The CONFIG_EFI_APP option controls a few things |
| 123 | that need to change so 'git grep CONFIG_EFI_APP' may be instructive. |
| 124 | The CONFIG_EFI option controls more general EFI adjustments. |
| 125 | |
| 126 | The only available driver is the serial driver. This calls back into EFI |
| 127 | 'boot services' to send and receive characters. Although it is implemented |
| 128 | as a serial driver the console device is not necessarilly serial. If you |
| 129 | boot EFI with video output then the 'serial' device will operate on your |
| 130 | target devices's display instead and the device's USB keyboard will also |
| 131 | work if connected. If you have both serial and video output, then both |
| 132 | consoles will be active. Even though U-Boot does the same thing normally, |
| 133 | These are features of EFI, not U-Boot. |
| 134 | |
| 135 | Very little code is involved in implementing the EFI application feature. |
| 136 | U-Boot is highly portable. Most of the difficulty is in modifying the |
| 137 | Makefile settings to pass the right build flags. In particular there is very |
| 138 | little x86-specific code involved - you can find most of it in |
| 139 | arch/x86/cpu. Porting to ARM (which can also use EFI if you are brave |
| 140 | enough) should be straightforward. |
| 141 | |
| 142 | Use the 'reset' command to get back to EFI. |
| 143 | |
| 144 | EFI Payload |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 145 | ~~~~~~~~~~~ |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 146 | The payload approach is a different kettle of fish. It works by building |
| 147 | U-Boot exactly as normal for your target board, then adding the entire |
| 148 | image (including device tree) into a small EFI stub application responsible |
| 149 | for booting it. The stub application is built as a normal EFI application |
| 150 | except that it has a lot of data attached to it. |
| 151 | |
| 152 | The stub application is implemented in lib/efi/efi_stub.c. The efi_main() |
| 153 | function is called by EFI. It is responsible for copying U-Boot from its |
| 154 | original location into memory, disabling EFI boot services and starting |
| 155 | U-Boot. U-Boot then starts as normal, relocates, starts all drivers, etc. |
| 156 | |
| 157 | The stub application is architecture-dependent. At present it has some |
| 158 | x86-specific code and a comment at the top of efi_stub.c describes this. |
| 159 | |
| 160 | While the stub application does allocate some memory from EFI this is not |
| 161 | used by U-Boot (the payload). In fact when U-Boot starts it has all of the |
| 162 | memory available to it and can operate as it pleases (but see the next |
| 163 | section). |
| 164 | |
| 165 | Tables |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 166 | ~~~~~~ |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 167 | The payload can pass information to U-Boot in the form of EFI tables. At |
| 168 | present this feature is used to pass the EFI memory map, an inordinately |
| 169 | large list of memory regions. You can use the 'efi mem all' command to |
| 170 | display this list. U-Boot uses the list to work out where to relocate |
| 171 | itself. |
| 172 | |
| 173 | Although U-Boot can use any memory it likes, EFI marks some memory as used |
| 174 | by 'run-time services', code that hangs around while U-Boot is running and |
| 175 | is even present when Linux is running. This is common on x86 and provides |
| 176 | a way for Linux to call back into the firmware to control things like CPU |
| 177 | fan speed. U-Boot uses only 'conventional' memory, in EFI terminology. It |
| 178 | will relocate itself to the top of the largest block of memory it can find |
| 179 | below 4GB. |
| 180 | |
| 181 | Interrupts |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 182 | ~~~~~~~~~~ |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 183 | U-Boot drivers typically don't use interrupts. Since EFI enables interrupts |
| 184 | it is possible that an interrupt will fire that U-Boot cannot handle. This |
| 185 | seems to cause problems. For this reason the U-Boot payload runs with |
| 186 | interrupts disabled at present. |
| 187 | |
| 188 | 32/64-bit |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 189 | ~~~~~~~~~ |
Simon Glass | d38bbb5 | 2023-09-03 09:15:51 -0600 | [diff] [blame] | 190 | While the EFI application can be built as either 32- or 64-bit, you need to be |
| 191 | careful to build the correct one so that your UEFI firmware can start it. Most |
| 192 | UEFI images are 64-bit at present. |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 193 | |
| 194 | The payload stub can be build as either 32- or 64-bits. Only a small amount |
| 195 | of code is built this way (see the extra- line in lib/efi/Makefile). |
| 196 | Everything else is built as a normal U-Boot, so is always 32-bit on x86 at |
| 197 | present. |
| 198 | |
Simon Glass | daa53a2 | 2021-11-03 21:09:03 -0600 | [diff] [blame] | 199 | Example run |
| 200 | ----------- |
| 201 | |
| 202 | This shows running with serial enabled (see `include/configs/efi-x86_app.h`):: |
| 203 | |
| 204 | $ scripts/build-efi.sh -wsPr |
| 205 | Packaging efi-x86_app32 |
| 206 | Running qemu-system-i386 |
| 207 | |
| 208 | BdsDxe: failed to load Boot0001 "UEFI QEMU HARDDISK QM00005 " from PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0): Not Found |
| 209 | BdsDxe: loading Boot0002 "EFI Internal Shell" from Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1) |
| 210 | BdsDxe: starting Boot0002 "EFI Internal Shell" from Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1) |
| 211 | |
| 212 | UEFI Interactive Shell v2.2 |
| 213 | EDK II |
| 214 | UEFI v2.70 (EDK II, 0x00010000) |
| 215 | Mapping table |
| 216 | FS0: Alias(s):HD0a65535a1:;BLK1: |
| 217 | PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,GPT,0FFD5E61-3B0C-4326-8049-BDCDC910AF72,0x800,0xB000) |
| 218 | BLK0: Alias(s): |
| 219 | PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0) |
| 220 | |
| 221 | Press ESC in 5 seconds to skip startup.nsh or any other key to continue. |
| 222 | Shell> fs0:u-boot-app.efi |
| 223 | U-Boot EFI App (using allocated RAM address 47d4000) key=8d4, image=06a6f610 |
| 224 | starting |
| 225 | |
| 226 | |
| 227 | U-Boot 2022.01-rc4 (Sep 19 2021 - 14:03:20 -0600) |
| 228 | |
| 229 | CPU: x86, vendor Intel, device 663h |
| 230 | DRAM: 32 MiB |
| 231 | 0: efi_media_0 PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0) |
| 232 | 1: <partition> PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,GPT,0FFD5E61-3B0C-4326-8049-BDCDC910AF72,0x800,0xB000) |
| 233 | Loading Environment from nowhere... OK |
| 234 | Model: EFI x86 Application |
| 235 | Hit any key to stop autoboot: 0 |
| 236 | |
| 237 | Partition Map for EFI device 0 -- Partition Type: EFI |
| 238 | |
| 239 | Part Start LBA End LBA Name |
| 240 | Attributes |
| 241 | Type GUID |
| 242 | Partition GUID |
| 243 | 1 0x00000800 0x0000b7ff "boot" |
| 244 | attrs: 0x0000000000000000 |
| 245 | type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 |
| 246 | guid: 0ffd5e61-3b0c-4326-8049-bdcdc910af72 |
| 247 | 19 startup.nsh |
| 248 | 528384 u-boot-app.efi |
| 249 | 10181 NvVars |
| 250 | |
| 251 | 3 file(s), 0 dir(s) |
| 252 | |
| 253 | => QEMU: Terminated |
| 254 | |
Thomas Mittelstaedt | fb4ef74 | 2023-08-22 13:49:02 +0000 | [diff] [blame] | 255 | Run on VirtualBox (x86_64) |
| 256 | -------------------------- |
| 257 | |
| 258 | Enable EFI |
| 259 | ~~~~~~~~~~ |
| 260 | At settings for virtual machine the flag at **System->Motherboard->Enable EFI |
| 261 | (special OSes only)** has to be enabled. |
| 262 | |
| 263 | Installation |
| 264 | ~~~~~~~~~~~~ |
| 265 | Provide the preinstalled Linux system as a Virtual Disk Image (VDI) and assign |
| 266 | it to a SATA controller (type AHCI) using the settings for the virtual machine |
| 267 | at menu item **System->Storage->Controller:SATA**. |
| 268 | |
| 269 | For the following description three GPT partitions are assumed: |
| 270 | |
| 271 | - Partition 1: formatted as FAT file-system and marked as EFI system partition |
| 272 | (partition type 0xEF00) used for the U-Boot EFI binary. (If VirtualBox is UEFI |
| 273 | compliant, it should recognize the ESP as the boot partition.) |
| 274 | |
| 275 | - Partition 2: formatted as **ext4**, used for root file system |
| 276 | |
| 277 | Create an extlinux.conf or a boot script |
| 278 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 279 | |
| 280 | Following files are assumed to be located at system for boot configuration:: |
| 281 | |
| 282 | Partition File Comment |
| 283 | 1 EFI/BOOT/BOOTX64.efi # renamed U-Boot EFI image |
| 284 | 1 Image # Linux image |
| 285 | 1 Initrd # Initramfs of Linux |
| 286 | |
| 287 | **EFI/BOOT/BOOTX64.efi** is a renamed build result **u-boot-payload.efi**, built with |
| 288 | **efi-x86_payload64_defconfig** configuration. |
| 289 | |
| 290 | Boot script |
| 291 | ~~~~~~~~~~~ |
| 292 | |
| 293 | The boot script **boot.scr** is assumed to be located at:: |
| 294 | |
| 295 | Partition File Comment |
| 296 | 1 boot.scr # Boot script, generated with mkimage from template |
| 297 | |
| 298 | Content of **boot.scr**: |
| 299 | |
| 300 | .. code-block:: bash |
| 301 | |
| 302 | ext4load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${prefix}Image |
| 303 | setenv kernel_size ${filesize} |
| 304 | ext4load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} ${prefix}Initrd |
| 305 | setenv initrd_size ${filesize} |
| 306 | zboot ${kernel_addr_r} ${kernel_size} ${ramdisk_addr_r} ${initrd_size} |
| 307 | |
| 308 | Extlinux configuration |
| 309 | ~~~~~~~~~~~~~~~~~~~~~~ |
| 310 | |
| 311 | Alternatively a configuration **extlinux.conf** can be used. **extlinux.conf** |
| 312 | is assumed to be located at:: |
| 313 | |
| 314 | Partition File Comment |
| 315 | 1 extlinux/extlinux.conf # Extlinux boot configuration |
| 316 | |
| 317 | Content of **extlinux.conf**: |
| 318 | |
| 319 | .. code-block:: bash |
| 320 | |
| 321 | default l0 |
| 322 | menu title U-Boot menu |
| 323 | prompt 0 |
| 324 | timeout 50 |
| 325 | |
| 326 | label l0 |
| 327 | menu label Linux |
| 328 | linux /Image |
| 329 | initrd /Initrd |
| 330 | |
| 331 | |
| 332 | Additionally something like (sda is assumed as disk device): |
| 333 | |
| 334 | .. code-block:: bash |
| 335 | |
| 336 | append root=/dev/sda2 console=tty0 console=ttyS0,115200n8 rootwait rw |
| 337 | |
| 338 | |
Simon Glass | daa53a2 | 2021-11-03 21:09:03 -0600 | [diff] [blame] | 339 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 340 | Future work |
| 341 | ----------- |
| 342 | This work could be extended in a number of ways: |
| 343 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 344 | - Add ARM support |
| 345 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 346 | - Figure out how to solve the interrupt problem |
| 347 | |
Simon Glass | 2d4b33e | 2021-12-29 11:57:36 -0700 | [diff] [blame] | 348 | - Add more drivers to the application side (e.g.USB, environment access). |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 349 | |
| 350 | - Avoid turning off boot services in the stub. Instead allow U-Boot to make |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 351 | use of boot services in case it wants to. It is unclear what it might want |
Simon Glass | 5c267a0 | 2021-12-29 11:57:38 -0700 | [diff] [blame] | 352 | though. It is better to use the app. |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 353 | |
| 354 | Where is the code? |
| 355 | ------------------ |
| 356 | lib/efi |
| 357 | payload stub, application, support code. Mostly arch-neutral |
| 358 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 359 | arch/x86/cpu/efi |
Bin Meng | 525c861 | 2018-06-12 08:36:16 -0700 | [diff] [blame] | 360 | x86 support code for running as an EFI application and payload |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 361 | |
Bin Meng | 6582074 | 2018-06-12 08:36:24 -0700 | [diff] [blame] | 362 | board/efi/efi-x86_app/efi.c |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 363 | x86 board code for running as an EFI application |
| 364 | |
Bin Meng | 858429b | 2018-06-12 08:36:18 -0700 | [diff] [blame] | 365 | board/efi/efi-x86_payload |
| 366 | generic x86 EFI payload board support code |
| 367 | |
Heinrich Schuchardt | 3240924 | 2018-01-30 20:03:02 +0100 | [diff] [blame] | 368 | common/cmd_efi.c |
| 369 | the 'efi' command |
| 370 | |
| 371 | -- |
| 372 | Ben Stoltz, Simon Glass |
| 373 | Google, Inc |
| 374 | July 2015 |
| 375 | |
Heinrich Schuchardt | fd0b53f | 2019-07-26 06:46:08 +0200 | [diff] [blame] | 376 | * [1] http://www.qemu.org |
Bin Meng | 74efc6e | 2021-06-21 10:12:32 +0800 | [diff] [blame] | 377 | * [2] https://github.com/tianocore/tianocore.github.io/wiki/OVMF |