blob: 85af10588c1b3b8ad11d4819812832f8e7a77009 [file] [log] [blame]
Simon Glass45276c12024-07-17 09:30:57 +01001.. SPDX-License-Identifier: GPL-2.0+:
2
3ChromiumOS Bootmeth
4===================
5
6ChromiumOS provides a mechanism for booting its Operating System from a block
7device, described
8`here <https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot/>`_.
9
10U-Boot includes support for reading the associated data structures from the
11device and identifying a bootable ChromiumOS image. This structure includes the
12kernel itself, boot arguments (kernel command line), as well as the x86 setup
13block (for x86 only).
14
15When invoked on a bootdev, this bootmeth searches for kernel partitions with
16the appropriate GUID (Globally Unique Identifier). When found, the information
17is loaded and a bootflow is created.
18
19When the bootflow is booted, the bootmeth reads the kernel and boot arguments.
20It then boots the kernel using zboot (on x86) or bootm (on ARM). The boot
21arguments are adjusted to replace `%U` with the UUID of the selected kernel
22partition. This results in the correct root disk being used, which is the next
23partition after the kernel partition.
24
25For ARM, a :doc:`/usage/fit/index` is used. The `CONFIG_FIT_BEST_MATCH` option
26must be enabled for U-Boot to select the correct devicetree to boot with.
27
28Note that a ChromiumOS image typically has two copies of the Operating System,
29each with its own kernel and root disk. There is no initial ramdisk (initrd).
30This means that this bootmeth typically locates two separate images.
31
32The compatible string "u-boot,cros" is used for the driver. It is present
33if `CONFIG_BOOTMETH_CROS` is enabled.