tree: 4f6591e38ee4a16f6c9d560d4fff1c42bf2ff2a5 [path history] [tgz]
  1. Android.bp
  2. Android.mk
  3. boot_signature_info.sh
  4. generate_gki_certificate.py
  5. README.md
  6. retrofit_gki.sh
  7. retrofit_gki_test.sh
gki/README.md

GKI boot image retrofitting tools for upgrading devices

Starting from Android T the GKI boot images consist of the generic boot.img and init_boot.img. The boot.img contains the generic kernel, and init_boot.img contains the generic ramdisk. For upgrading devices whose vendor_boot partition is non-existent, this tool (or spec) can be used to retrofit a set of Android T GKI boot, init_boot and OEM vendor_boot partition images back into a single boot image containing the GKI kernel plus generic and vendor ramdisks.

Retrofitting the boot images

  1. Download the certified GKI boot.img.

  2. Go to the build artifacts page of aosp_arm64 on aosp-master branch on https://ci.android.com/ and download gki_retrofitting_tools.zip.

  3. Unzip and make sure the tool is in ${PATH}.

    unzip gki_retrofitting_tools.zip
    export PATH="$(pwd)/gki_retrofitting_tools:${PATH}"
    # See tool usage:
    retrofit_gki --help
    
  4. Create the retrofitted image. The --version argument lets you choose the boot image header version of the retrofitted boot image. Only version 2 is supported at the moment.

    retrofit_gki --boot boot.img --init_boot init_boot.img \
      --vendor_boot vendor_boot.img --version 2 -o boot.retrofitted.img
    

Spec of the retrofitted images

  • The SOURCE boot.img must be officially certified Android T (or later) GKI.
  • The DEST retrofitted boot image must not set the security patch level in its header. This is because the SOURCE images might have different SPL value, thus making the boot header SPL of the retrofitted image ill-defined. The SPL value must be defined by the chained vbmeta image of the boot partition.
  • The boot signature of the DEST image is the boot signature of the DEST boot.img.
  • The DEST retrofitted boot image must pass the vts_gki_compliance_test testcase.

Retrofit to boot image V2

  • The kernel of the DEST image must be from the SOURCE boot.img.
  • The ramdisk of the DEST image must be from the SOURCE vendor_boot.img and init_boot.img. The DEST ramdisk is the ramdisk concatenation of the vendor ramdisk and generic ramdisk.
  • The recovery dtbo / acpio must be empty.
  • The dtb of the DEST image must be from the SOURCE vendor_boot.img.
  • The boot_signature section must be appended to the end of the boot image, and its size is zero-padded to 16KiB.
  +---------------------+
  | boot header         | 1 page
  +---------------------+
  | kernel              | n pages
  +---------------------+
  | * vendor ramdisk    |
  |  +generic ramdisk   | m pages
  +---------------------+
  | second stage        | o pages
  +---------------------+
  | recovery dtbo/acpio | 0 byte
  +---------------------+
  | dtb                 | q pages
  +---------------------+
  | * boot signature    | 16384 (16K) bytes
  +---------------------+