ptgen: add Chromium OS kernel partition support
authorBrian Norris <computersforpeace@gmail.com>
Sun, 16 Jan 2022 05:48:30 +0000 (21:48 -0800)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 27 Jan 2022 13:27:32 +0000 (13:27 +0000)
commit6c95945b5de973026dc6f52eb088d0943efa96bb
treef0f0c180c941ca40dc746814d20f9c6f75bf1fee
parentd885b49436b18cb423b4612465e10ea2b3f5db79
ptgen: add Chromium OS kernel partition support

Chrom{ium,e} OS (shortened as "CrOS") bootloaders use a custom GPT
partition type to locate their kernel(s), with custom attributes for
noting properties around which partition(s) should be active and how
many times they've been tried as part of their A/B in-place upgrade
system.

OpenWRT doesn't use A/B updates for upgrades (instead, just shutting
things down far enough to reprogram the necessary partitions), so all we
need to do is tell the bootloader which one is the kernel partition, and
how to use it (i.e., set the "successful" and "priority" attributes).

ptgen already supports some basic GPT partition creation, so just
add support for a '-T <GPT partition type>' argument. Currently, this
only supports '-T cros_kernel', but it could be extended if there are
other GPT partition types needed.

For GPT attribute and GUID definitions, see the CrOS verified boot
sources:

https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/refs/heads/master/firmware/lib/cgptlib/include/cgptlib_internal.h
https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/refs/heads/master/firmware/include/gpt.h

Wikipedia (!!) even notes the GUIDs:
https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs

The GUID is also recognized in fdisk, and likely other utilities, but
creation/manipulation is typically done via the 'cgpt' utility, provided
as part of the Chromium vboot_reference project.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
src/ptgen.c