
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