diff options
Diffstat (limited to 'Documentation/efi-stub.txt')
-rw-r--r-- | Documentation/efi-stub.txt | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/Documentation/efi-stub.txt b/Documentation/efi-stub.txt index c628788d5b47..7747024d3bb7 100644 --- a/Documentation/efi-stub.txt +++ b/Documentation/efi-stub.txt | |||
@@ -1,13 +1,21 @@ | |||
1 | The EFI Boot Stub | 1 | The EFI Boot Stub |
2 | --------------------------- | 2 | --------------------------- |
3 | 3 | ||
4 | On the x86 platform, a bzImage can masquerade as a PE/COFF image, | 4 | On the x86 and ARM platforms, a kernel zImage/bzImage can masquerade |
5 | thereby convincing EFI firmware loaders to load it as an EFI | 5 | as a PE/COFF image, thereby convincing EFI firmware loaders to load |
6 | executable. The code that modifies the bzImage header, along with the | 6 | it as an EFI executable. The code that modifies the bzImage header, |
7 | EFI-specific entry point that the firmware loader jumps to are | 7 | along with the EFI-specific entry point that the firmware loader |
8 | collectively known as the "EFI boot stub", and live in | 8 | jumps to are collectively known as the "EFI boot stub", and live in |
9 | arch/x86/boot/header.S and arch/x86/boot/compressed/eboot.c, | 9 | arch/x86/boot/header.S and arch/x86/boot/compressed/eboot.c, |
10 | respectively. | 10 | respectively. For ARM the EFI stub is implemented in |
11 | arch/arm/boot/compressed/efi-header.S and | ||
12 | arch/arm/boot/compressed/efi-stub.c. EFI stub code that is shared | ||
13 | between architectures is in drivers/firmware/efi/efi-stub-helper.c. | ||
14 | |||
15 | For arm64, there is no compressed kernel support, so the Image itself | ||
16 | masquerades as a PE/COFF image and the EFI stub is linked into the | ||
17 | kernel. The arm64 EFI stub lives in arch/arm64/kernel/efi-entry.S | ||
18 | and arch/arm64/kernel/efi-stub.c. | ||
11 | 19 | ||
12 | By using the EFI boot stub it's possible to boot a Linux kernel | 20 | By using the EFI boot stub it's possible to boot a Linux kernel |
13 | without the use of a conventional EFI boot loader, such as grub or | 21 | without the use of a conventional EFI boot loader, such as grub or |
@@ -23,7 +31,10 @@ The bzImage located in arch/x86/boot/bzImage must be copied to the EFI | |||
23 | System Partition (ESP) and renamed with the extension ".efi". Without | 31 | System Partition (ESP) and renamed with the extension ".efi". Without |
24 | the extension the EFI firmware loader will refuse to execute it. It's | 32 | the extension the EFI firmware loader will refuse to execute it. It's |
25 | not possible to execute bzImage.efi from the usual Linux file systems | 33 | not possible to execute bzImage.efi from the usual Linux file systems |
26 | because EFI firmware doesn't have support for them. | 34 | because EFI firmware doesn't have support for them. For ARM the |
35 | arch/arm/boot/zImage should be copied to the system partition, and it | ||
36 | may not need to be renamed. Similarly for arm64, arch/arm64/boot/Image | ||
37 | should be copied but not necessarily renamed. | ||
27 | 38 | ||
28 | 39 | ||
29 | **** Passing kernel parameters from the EFI shell | 40 | **** Passing kernel parameters from the EFI shell |
@@ -63,3 +74,11 @@ Notice how bzImage.efi can be specified with a relative path. That's | |||
63 | because the image we're executing is interpreted by the EFI shell, | 74 | because the image we're executing is interpreted by the EFI shell, |
64 | which understands relative paths, whereas the rest of the command line | 75 | which understands relative paths, whereas the rest of the command line |
65 | is passed to bzImage.efi. | 76 | is passed to bzImage.efi. |
77 | |||
78 | |||
79 | **** The "dtb=" option | ||
80 | |||
81 | For the ARM and arm64 architectures, we also need to be able to provide a | ||
82 | device tree to the kernel. This is done with the "dtb=" command line option, | ||
83 | and is processed in the same manner as the "initrd=" option that is | ||
84 | described above. | ||