[PATCH 00/16] bootstd: Improve ChromiumOS support

Alper Nebi Yasak alpernebiyasak at gmail.com
Thu Aug 3 23:31:54 CEST 2023


Hi Simon,

On 2023-07-30 20:16 +03:00, Simon Glass wrote:
> The ChromiumOS bootmeth is fairly basic at present. It is able to boot
> only x86 kernels and contains quite a few hard-coded offsets.
> 
> This series tidies it up by bringing in some vboot structures and adding
> support for ARM.
> 
> It adds a few more features to bootstd, including display of x86 setup
> information.

Can't do a detailed review or test for a while, but had a cursory look
now and wanted to reply. I'm not sure if you heard of it, but I maintain
an alternate implementation of ChromiumOS verified boot userspace called
depthcharge-tools [1]. Its main purpose is booting ordinary distros on
Chromebooks, but it would be nice if your U-Boot implementation was also
compatible with images produced from that.

I guess it boils down to:

- Enable booting from any chromeos_kernel partition (not just 2 & 4)
- Fixup the ramdisk addr/size in x86 setup info after reading the kernel
- Replace %U with chromeos_kernel PARTUUID (you probably already do?)
- Prepend cros_secure to kernel cmdline

There's a ready made debian-installer image if you want to test [2]. Has
a partitioning bug defaulting to MBR, but otherwise can install for CrOS
verified boot as well. (It's what took my last year away from U-Boot).

[1] depthcharge-tools -- Tools to manage the Chrome OS bootloader
https://github.com/alpernebbi/depthcharge-tools

[2] Debian Installer netboot image for amd64 Chromebooks
https://d-i.debian.org/daily-images/amd64/daily/netboot/depthcharge/

> So far this does not actually boot correctly on any ARM Chromebook:
> 
>    jerry - hangs when booting kernel
>    bob - Bad Linux ARM64 Image magic! with lz4-compressed kernel
> 
> Further work can address these issues.

I haven't been able to boot recent kernels with extlinux.conf on my
pre-bootstd kevin U-Boot builds which I remember were working with older
kernels. And I've heard people not being boot with extlinux.conf on
veyrons as well. Might be the same, maybe try an older kernel for jerry?

Again, there's a debian-installer arm64 image if you want to test [3],
which could work fine on bob (not with depthcharge's size limit though),
but kernel support is missing for anything else.

Oh, and postmarketOS also supports CrOS verified boot [4] via
depthcharge-tools, but they don't have pre-built images and it's a bit
of a hassle.

[3] Debian Installer netboot image for arm64 Chromebooks
https://d-i.debian.org/daily-images/arm64/daily/netboot/depthcharge/

[4] postmarketOS Wiki - Chrome OS devices
https://wiki.postmarketos.org/wiki/Chrome_OS_devices

Anyway, I'm glad you're working on this, looking forward to testing it
myself when I get the chance!

> Simon Glass (16):
>   bootstd: cros: Correct reporting of I/O errors
>   bootstd: cros: Move partition reading into a function
>   bootstd: cros: Bring in some ChromiumOS structures
>   bootstd: cros: Support a kernel on either partition
>   bootstd: cros: Decode some kernel preamble fields
>   bootstd: cros: Simplify setup and cmdline expressions
>   bootstd: Move common zimage functions to bootm.h
>   bootstd: cros: Add docs for the kernel layout
>   bootstd: cros: Add private info for ChromiumOS
>   bootstd: Add private bootmeth data to the bootflow
>   bootstd: cros: Add a function to read info from partition
>   bootstd: cros: Add a function to read a kernel
>   bootstd: cros: Split up reading info and kernel
>   bootstd: Allow display of the x86 setup information
>   bootstd: Add a command to read all files for a bootflow
>   bootstd: cros: Add ARM support
> 
>  arch/x86/include/asm/zimage.h |  37 ----
>  arch/x86/lib/zimage.c         |   8 +-
>  boot/Kconfig                  |   4 +-
>  boot/bootflow.c               |  15 ++
>  boot/bootm.c                  |  37 ++++
>  boot/bootmeth-uclass.c        |  10 +
>  boot/bootmeth_cros.c          | 363 ++++++++++++++++++++++++++++------
>  boot/bootmeth_cros.h          | 197 ++++++++++++++++++
>  cmd/bootflow.c                |  47 ++++-
>  doc/usage/cmd/bootflow.rst    | 139 ++++++++++++-
>  include/bootflow.h            |  15 +-
>  include/bootm.h               |  47 +++++
>  include/bootmeth.h            |  23 +++
>  13 files changed, 836 insertions(+), 106 deletions(-)
>  create mode 100644 boot/bootmeth_cros.h
> 


More information about the U-Boot mailing list