From 162c0098b8b0ef22b5c7931446f95aeb6ec7098a Mon Sep 17 00:00:00 2001 From: Samuel Dolt Date: Wed, 25 Jan 2023 14:11:02 +0100 Subject: [PATCH] doc(bootflow): adapt bootflow doc to efibootguard and swupdate --- documentation/boot/bootflow-generic.dot | 10 -- documentation/boot/bootflow-generic.plantuml | 23 +++++ documentation/boot/bootflow-uboot.dot | 2 +- documentation/boot/disk.rst | 48 +++++++++ documentation/boot/disk/disk-layout.png | Bin 0 -> 21296 bytes documentation/boot/disk/part-boot0.png | Bin 0 -> 9789 bytes documentation/boot/disk/part-efi.png | Bin 0 -> 6838 bytes documentation/boot/disk/part-platform0.png | Bin 0 -> 30843 bytes documentation/boot/efibootguard.rst | 100 +++++++++++++++++++ documentation/boot/index.rst | 3 + documentation/boot/overview.rst | 66 ++++++------ documentation/boot/uboot-dts-handling.dot | 16 --- documentation/boot/uboot.rst | 93 ++++------------- documentation/boot/uki.rst | 4 + documentation/conf.py | 2 +- 15 files changed, 237 insertions(+), 130 deletions(-) delete mode 100644 documentation/boot/bootflow-generic.dot create mode 100644 documentation/boot/bootflow-generic.plantuml create mode 100644 documentation/boot/disk.rst create mode 100644 documentation/boot/disk/disk-layout.png create mode 100644 documentation/boot/disk/part-boot0.png create mode 100644 documentation/boot/disk/part-efi.png create mode 100644 documentation/boot/disk/part-platform0.png create mode 100644 documentation/boot/efibootguard.rst delete mode 100644 documentation/boot/uboot-dts-handling.dot create mode 100644 documentation/boot/uki.rst diff --git a/documentation/boot/bootflow-generic.dot b/documentation/boot/bootflow-generic.dot deleted file mode 100644 index ffb9d22..0000000 --- a/documentation/boot/bootflow-generic.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph G { - fw [label = "Firmware";shape = rect;]; - - btl [label = "Bootloader";shape = rect;]; - - os [label = "Operating System";shape = rect;]; - - fw -> btl -> os [style = dashed;]; - fw -> os; -} \ No newline at end of file diff --git a/documentation/boot/bootflow-generic.plantuml b/documentation/boot/bootflow-generic.plantuml new file mode 100644 index 0000000..b3d0a09 --- /dev/null +++ b/documentation/boot/bootflow-generic.plantuml @@ -0,0 +1,23 @@ +@startuml +!theme cloudscape-design +start +:**Firmware**; +note right + Implement a subset of the UEFI specification + Usually implemented by u-boot +end note +:**Bootloader** +efibootguard; +note right + The bootloader is responsible to find and load the Operating System + It's an UEFI application that can be signed +end note +:**Operating System** +Unified Kernel Image; +note right + The Operating System is a single UEFI application that can be signed + This application has to call the ExitBootService UEFI protocol + This application contains at least the Linux Kernel +end note +end +@enduml diff --git a/documentation/boot/bootflow-uboot.dot b/documentation/boot/bootflow-uboot.dot index 1e802a4..f6e2488 100644 --- a/documentation/boot/bootflow-uboot.dot +++ b/documentation/boot/bootflow-uboot.dot @@ -3,7 +3,7 @@ digraph G { uboot [label = "u-boot with EFI/EBBR support";shape = rect;]; - kernel [label = "OS (EFI Stub + Kernel + Initramfs";shape = rect;]; + kernel [label = "UKI (EFI Stub + Kernel + DTS + Initramfs";shape = rect;]; rom -> uboot -> kernel; } \ No newline at end of file diff --git a/documentation/boot/disk.rst b/documentation/boot/disk.rst new file mode 100644 index 0000000..bda605c --- /dev/null +++ b/documentation/boot/disk.rst @@ -0,0 +1,48 @@ +*********** +Disk Layout +*********** + +Standard Disk Layout +==================== + + + +Disk Layout using GPT +====================== + +Modern product use a GPT partionning disk with at least 5 partitions: + +- EFI +- PLATFORM0 +- PLATFORM1 +- BOOT0 +- BOOT1 + +Order and position of theses partitions doesn't matter as long as the +right partition label, partition label and filesystem are used. + +.. image:: disk/disk-layout.png + +Partitions +========== + +EFI +--- + +The EFI partition contains the bootloader (efibootguard). + +.. image:: disk/part-efi.png + +BOOT0 and BOOT1 +--------------- + +The BOOT0 and BOOT1 partition contains a kernel and a configuration files. + +.. image:: disk/part-boot0.png + +PLATFORM0 and PLATFORM1 +----------------------- + +The PLATFORM0 and PLATFORM1 partitions contains a Linux root filesystem. + +.. image:: disk/part-platform0.png diff --git a/documentation/boot/disk/disk-layout.png b/documentation/boot/disk/disk-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..d7731b68f35c8830a0a987dd0a449b87e0090045 GIT binary patch literal 21296 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 bz!l*B)8|NB_1NLxECFW5mPUl@u8;o@DxDkT literal 0 HcmV?d00001 diff --git a/documentation/boot/disk/part-boot0.png b/documentation/boot/disk/part-boot0.png new file mode 100644 index 0000000000000000000000000000000000000000..155373a667f6c5dac2114003d7a3cdfde6b0db77 GIT binary patch literal 9789 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 ZzpvQ;u)xm!39fcQin1y)#ZQgj{TJGegjfIo literal 0 HcmV?d00001 diff --git a/documentation/boot/disk/part-efi.png b/documentation/boot/disk/part-efi.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5f7c54713ea7dc7de8a3e9adfce60aa1350889 GIT binary patch literal 6838 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 literal 0 HcmV?d00001 diff --git a/documentation/boot/disk/part-platform0.png b/documentation/boot/disk/part-platform0.png new file mode 100644 index 0000000000000000000000000000000000000000..daa9f794092ec8a17adfe122b735e2c97936821f GIT binary patch literal 30843 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 xc2$BBnNOG1S!HM^^!vvN|3t0X|6(ND;IlFI+~r boot1.revision") then (yes) + :select boot0; + else (no) + :select boot1; + endif + } + + end + @enduml + +State checking +============== + +After having selecting the configuration to use, efibootguard will use the +state field to determine is the configuration is already know to work or not. + +Theses states are possible: + +- ok: the configuration is known to be working +- installed: the configuration was just updated and was never booted +- testing: the configuration was just updated and was already booted once +- failed: the configuration is not working + +.. uml:: + + @startuml + !theme cloudscape-design + start + partition state checking { + switch (state?) + case ( ok ) + :set state to ok; + case ( installed ) + :set state to testing; + case ( testing ) + :set state to failed; + :set revision to 0; + :reboot; + stop + case ( failed ) + :set revision to 0; + :reboot; + stop + endswitch + } + end + @enduml + +Image loading +============== + +The last part of the boot process just consist of reading kernel image +from the selected boot partition and then calling the load_image EFI function +to let the EFI firmware start the given image. The firmware will then first +check the signature of the kernel before starting it. + +.. uml:: + + @startuml + !theme cloudscape-design + start + partition kernel loading { + : read unified kernel image from boot partition; + : load image to memory; + } + : call EFI load_image(); + end + @enduml diff --git a/documentation/boot/index.rst b/documentation/boot/index.rst index 1eec9ba..2a934d2 100644 --- a/documentation/boot/index.rst +++ b/documentation/boot/index.rst @@ -11,3 +11,6 @@ Belden CoreOS Boot Concepts overview uboot + efibootguard + uki + disk \ No newline at end of file diff --git a/documentation/boot/overview.rst b/documentation/boot/overview.rst index 37720c5..38fbe48 100644 --- a/documentation/boot/overview.rst +++ b/documentation/boot/overview.rst @@ -13,8 +13,8 @@ In this document, the following terms have specific meanings: .. glossary:: Firmware - Program that implement the boot and runtime services as defined by the - :ext+uefi:ref:`UEFI specifications `. + Program that implement some of the boot and runtime services defined by + the :ext+uefi:ref:`UEFI specifications `. Application Program written according to the UEFI specification that can be started @@ -25,17 +25,26 @@ In this document, the following terms have specific meanings: configuration or autodetection. Operating system - Application that include at least the Linux Kernel and the initial RAM - disk. + Application that include at least the Linux Kernel. + + Unified Kernel Image + Application that include the Linux kernel and the command line to pass to + the kernel and optionaly one or more device trees and a RAM disk Generic Boot Flow ================= -.. graphviz:: bootflow-generic.dot +.. uml:: bootflow-generic.plantuml + +CoreOS use a standardized workflow based on UEFI: the firmware automatically +start the bootloader. The bootloader is stored inside the EFI partition, under: +`/EFI/BOOT/BOOT.EFI` where `` is: + +- ARM for Arm32 CPU +- A64 for Aarch64 CPU +- X64 for Amd64 CPU -CoreOS use a standardized workflow: the firmware can start either an -optional bootloader or an operating system as an UEFI application. Firmware ======== @@ -88,6 +97,7 @@ defined by the EBBR Specification. The part of the specification marked as legacy or deprecated must not be used. This means: + - Only GPT partionning disk are supported - No fixed offsets to firmware data @@ -105,38 +115,36 @@ The firmware for AMD64 should implement the UEFI specification. Bootloader ========== -CoreOS only support `systemd-boot` as bootloader. The usage of the bootloader -is optional. It's primary use case is for system that don't use a firmware -provided by CoreOS. +CoreOS only support `efibootguard` as bootloader. Operating system ================ -The operating system image is an UEFI application that contain the kernel. We -support two method to create this image: +The operating system image is an UEFI application that contain the kernel. + +Two ways can be used to generate this application: + +Kernel built with the built-in EFI stub +--------------------------------------- + +This method use the EFI stub provided by the kernel. + Unified Kernel Images (UKI) --------------------------- This is the most secure method. The UEFI entry point is provided by -`systemd-stub` and the image contains the Linux Kernel, the boot arguments of -the kernel, the os-release file and an initrd ram disk. +`efibootguard/stub` and the image contains the Linux Kernel with it's built-in +EFI stub, the boot arguments of the kernel and optionaly multiple device trees +and an initial RAM disk. -This allows to have all these part authenticated via UEFI secure boot. +This allows to have all these part authenticated via UEFI secure boot just by +signing the UKI. -.. warning:: - UKI are not supported for ARM32 target at the moment, due to a bug in objcopy. - See https://sourceware.org/bugzilla/show_bug.cgi?id=26218 +.. important:: -.. note:: - UKI has the advantages to be discoverable by the bootloader without any - configuration file, and doesn't need a firmware that is able to set the - kernel command line. - -Kernel built with the built-in EFI sub --------------------------------------- - -This method use the EFI stub provided by the kernel. The initramfs image has to -be bundled with the Kernel, using `INITRAMFS_IMAGE_BUNDLE`, as otherwise it -will not be authenticated by UEFI secure boot. + Only the Unified Kernel Image methods is supported by the CoreOS teams. Using + the kernel directly should be used only for new hardware bring-up. By default + we only sign UKI to ensure that it's the only method used for hardware that + ship with secure boot enabled. diff --git a/documentation/boot/uboot-dts-handling.dot b/documentation/boot/uboot-dts-handling.dot deleted file mode 100644 index 7718616..0000000 --- a/documentation/boot/uboot-dts-handling.dot +++ /dev/null @@ -1,16 +0,0 @@ -digraph G { - start [label = "boot";]; - - mb [label = "Detect the main board name";shape = rect;]; - - mbdts [label = "Load main board device tree";shape = rect;]; - - ext [label = "Detect the extension module name";shape = rect;]; - extdts [label = "Load a device tree overlay for each module";shape = rect;]; - - dtsprocess [label = "Add and remove device tree node as needed (DT Fixup)";shape = rect;]; - - stop [label = "Start UEFI application";]; - - start -> mb -> mbdts -> ext -> extdts -> dtsprocess -> stop; -} \ No newline at end of file diff --git a/documentation/boot/uboot.rst b/documentation/boot/uboot.rst index 2189552..09c6841 100644 --- a/documentation/boot/uboot.rst +++ b/documentation/boot/uboot.rst @@ -1,6 +1,6 @@ -************************ -Using U-Boot as Firmware -************************ +**************** +Firmware: U-Boot +**************** U-boot can be configured to support the EBBR specification. This can be enabled by enabling both `CONFIG_EFI_LOADER` and @@ -21,13 +21,21 @@ to be changed at runtime. Device tree handling ==================== -As per the EBBR specification, the firmware is responsible to provide the +As per the EBBR specification, the firmware is responsible to provide a basic device tree to the kernel. -This means that loading the main device tree and all the device tree overlay are -is the responsibility of the firmware. +This means that we have to build u-boot with an embedded device tree. On a +machine configuration, this mean settings the `UBOOT_BUILDENV_DEVICE_TREE` +variables. + +The kernel can then override the built-in device-tree to use another. + +.. important:: + + The `compatible` field of the device-tree embedded inside `u-boot` has to + match with the one used inside the kernel. This allow us to automatically + load the right `device-tree` inside the unified kernel image (UKI). -.. graphviz:: uboot-dts-handling.dot Features to implement per machine ================================= @@ -35,73 +43,12 @@ Features to implement per machine The u-boot provided by CoreOS should implement the following features for each supported machine: -board_fit_config_name_match ----------------------------- - -This allows u-boot to select the device tree to use dynamically using board -detection. See `README.multi-dtb-fit` - - -extension_board_scan --------------------- - -The extension_board_scan function has to be implemented. This function should -return the list of add-ons board detected, with the filename of the -correspondig device-tree overlay. - DT Fixup -------- -U-Boot can create, modify and remove node from the device tree dynamically -before starting the kernel. This can be used to pass dynamic information stored -inside a "board descriptor" eeprom or CPLD to the Kernel. +An EFI application like a UKI can overwrite the built-in device tree with a +custom one. The DT Fixup Protocol allow an application to ask the firmware to +some runtime fix to the new device tree, like enabling or removing node. -Custom Features that are generic -================================ - -The u-boot provided by CoreOS should implement the following custom features: - -File authentication -------------------- - -In order to be able to authenticate device tree, device-tree overlay file or -other file needed by the firmware, we need a command to authenticate a file that -was previously loaded is the `load` command. - -.. note:: - - My proposal is to use the UEFI Capsule format, to reuse theses function from - u-boot: - - - **efi_capsule_authenticate**: Authenticate the UEFI capsule using a x509 - certificate built into u-boot - - **efi_remove_auth_hdr**: Can be used to point a pointer to the start of the - content of an authenticated capsule. - - An UEFI Capsule is a generic container that can be signed using a x.509 - private key. The public key is stored inside u-boot (it's not the same as - the keys used for UEFI secure-boot). See - https://u-boot.readthedocs.io/en/v2022.10/develop/uefi/uefi.html?highlight=capsule#enabling-capsule-authentication - - -extension_overlay_cmd ---------------------- - -A custom command should be made for `extension_overlay_cmd`. The extension -subsystem use the command defined as extension_overlay_cmd to load -the overlay `${extension_overlay_name}` into `extension_overlay_addr` - -This should reuse the file authentication mechanismus. - -.. note:: - - A concept on where and how to securly store device tree and overlay needed - by the kernel has to be written. - - My proposal is to use the UEFI Capsule format, to reuse theses function from - u-boot: - - - **efi_capsule_authenticate**: Authenticate the UEFI capsule using a x509 - certificate built into u-boot - - **efi_remove_auth_hdr**: Can be used to point a pointer to the start of the - content of an authenticated capsule. +This can be used to pass dynamic information stored inside a "board descriptor" +eeprom or CPLD to the Kernel. diff --git a/documentation/boot/uki.rst b/documentation/boot/uki.rst new file mode 100644 index 0000000..4620a80 --- /dev/null +++ b/documentation/boot/uki.rst @@ -0,0 +1,4 @@ +****************************** +OS: Unified Kernel Image (UKI) +****************************** + diff --git a/documentation/conf.py b/documentation/conf.py index e6f0ecf..2b5e09e 100644 --- a/documentation/conf.py +++ b/documentation/conf.py @@ -42,8 +42,8 @@ extensions = [ 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.graphviz', + 'sphinxcontrib.plantuml', ] -# 'sphinxcontrib.plantuml', # external links and substitutions