В Android 9 появилось поле версии в заголовке загрузочного образа, что позволяет обновлять заголовок, сохраняя при этом обратную совместимость. Загрузчик должен проверить поле версии заголовка и соответствующим образом проанализировать заголовок. Устройства запускаются с:
- Android 13 может использовать загрузочный заголовок версии 3 или 4. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , версия 4 является основным загрузочным образом, а поле
os_version
в загрузочном заголовке должно быть равно нулю. Ожидается, что загрузчик устройства вместо этого получит информацию о версии из свойств Android Verified Boot (AVB) . - Android 12 может использовать загрузочный заголовок версии 3 или 4. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , версия 4 является основным загрузочным образом.
- Android 11 может использовать загрузочный заголовок версии 3. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , эту версию необходимо использовать в качестве основного загрузочного образа.
- Android 10 должен использовать загрузочный заголовок версии 2.
- Android 9 должен использовать загрузочный заголовок версии 1.
- В Android 8 и более ранних версиях используется заголовок загрузочного образа версии 0.
Для всех устройств под управлением Android 9 или более поздней версии Vendor Test Suite (VTS) проверяет формат образа boot/recovery
, чтобы убедиться, что в заголовке образа загрузки используется правильная версия. Чтобы просмотреть подробную информацию AOSP обо всех поддерживаемых заголовках загрузочных образов и загрузочных образов поставщиков, обратитесь к system/tools/mkbootimg/include/bootimg/bootimg.h
.
Реализация управления версиями заголовков загрузочного образа.
Инструмент mkbootimg
принимает следующие аргументы.
Аргумент | Описание |
---|---|
header_version | Устанавливает версию заголовка загрузочного образа. Загрузочный образ с версией заголовка:
|
recovery_dtbo | Используется для архитектур, использующих DTB. Указывает путь к образу восстановления DTBO. Необязательно для устройств A/B, которым не требуется образ восстановления. Устройства, отличные от A/B, использующие header_version :
|
recovery_acpio | Используется для архитектур, использующих ACPI вместо DTB. Указывает путь к образу восстановления ACPIO. Необязательно для устройств A/B, которым не требуется образ восстановления. Устройства, отличные от A/B, использующие header_version :
|
dtb | Путь к образу DTB, включенному в образы загрузки и восстановления. |
dtb_offset | При добавлении к base аргументу предоставляет физический адрес загрузки для конечного дерева устройств. Например, если base аргумент — 0x10000000 , а аргумент dtb_offset — 0x01000000 , поле dtb_addr_field в заголовке загрузочного образа заполняется как 0x11000000 . |
Устройство BoardConfig.mk
использует конфигурацию BOARD_MKBOOTIMG_ARGS
для добавления header version
к другим аргументам mkbootimg
, специфичным для платы. Например:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Система сборки Android использует переменную BoardConfig
BOARD_PREBUILT_DTBOIMAGE
для установки аргумента recovery_dtbo
инструмента mkbootimg
во время создания образа восстановления. Подробные сведения об изменениях в проекте Android с открытым исходным кодом (AOSP) см. в соответствующих списках изменений для управления версиями заголовков загрузочного образа .
Заголовок загрузочного образа, версия 4
Android 12 предоставляет boot_signature
в заголовке загрузочного образа версии 4, который можно использовать для проверки целостности ядра и виртуального диска. Проверка выполняется в VtsSecurityAvbTest и необходима для устройств, использующих архитектуру GKI. Однако boot_signature
не участвует в процессе проверки загрузки для конкретного устройства и используется только в VTS. Подробности см. в разделе Конфигурация платы GKI boot.img и проверенные GKI настройки загрузки .
Заголовок загрузочного образа поставщика версии 4 поддерживает несколько фрагментов виртуального диска поставщика.
Версия 4 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
uint32_t signature_size; /* size in bytes */
};
Заголовок загрузочного образа, версия 3
Android 11 обновляет заголовок загрузочного образа до версии 3, при этом удаляются следующие данные:
Загрузчик второго уровня. Поля
second_size
иsecond_addr
больше не отображаются в заголовке загрузочного образа. Устройства с загрузчиком второго уровня должны хранить этот загрузчик в собственном разделе.Образ восстановления. Требование указания образа восстановления устарело, а поля
recovery_dtbo_size
,recovery_dtbo_offset
,recovery_acpio_size
иrecovery_acpio_offset
больше не отображаются в заголовке загрузочного образа.Устройства A/B используют схему обновления и восстановления, благодаря которой нет необходимости указывать образ DTBO или ACPIO для восстановления.
Устройствам, отличным от A/B, которым требуется указать образ восстановления (DTBO или ACPIO), следует использовать заголовок загрузочного образа версии 1 или 2.
Большой двоичный объект дерева устройств (DTB). DTB хранится в загрузочном разделе поставщика , поэтому поля
dtb_size
иdtb_addr
больше не отображаются в заголовке загрузочного образа (но присутствуют в заголовке загрузочного образа поставщика).
Устройства могут использовать заголовок загрузочного образа версии 3 для соответствия архитектуре Generic Kernel Image (GKI) , которая унифицирует ядро ядра и перемещает модули поставщика, необходимые для загрузки, в vendor_boot
(это означает, что загрузочный образ содержит только компоненты GKI). Устройства, которые:
Используйте GKI (требуется ядро android-4.19 или android-5.4), но не используйте обновления A/B. Можно указать образ восстановления, используя загрузочный образ версии 3 для загрузочного образа и загрузочный образ версии 2 для образа восстановления.
Не используйте GKI и не используйте обновления A/B. Можно указать образ восстановления, используя образ загрузки версии 1 или 2 как для загрузочного образа, так и для образа восстановления.
Версия 3 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
};
Заголовок загрузочного образа, версия 2
Android 10 обновляет заголовок загрузочного образа до версии 2, в которой добавляется раздел для информации об образе восстановления DTB (размер образа и адрес физической загрузки).
Версия 2 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
uint32_t dtb_size; /* size of dtb image */
uint64_t dtb_addr; /* physical load address */
};
Заголовок загрузочного образа, версия 1
Android 9 преобразует unused
поле заголовка загрузочного образа в поле версии заголовка. Устройства, запускаемые с Android 9, должны использовать заголовок загрузочного образа с версией заголовка, установленной на 1 или выше (это проверяется VTS).
Версия 1 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
};
Устройства, отличные от A/B, могут указать наложенный образ DTB/ACPI для восстановления, чтобы уменьшить вероятность сбоев обновления по беспроводной сети (OTA). (Устройства A/B не имеют этой проблемы, и им не нужно указывать накладываемое изображение.) Вы можете указать либо изображение DTBO, либо изображение ACPIO, но не оба (поскольку они используются в разных архитектурах). Чтобы правильно настроить заголовок загрузочного образа, при использовании:
Образ DTBO для восстановления включает поля
recovery_dtbo_size
иrecovery_dtbo_offset
(и не включает поляrecovery_acpio_size
иrecovery_acpio_offset
).Образ ACPIO для восстановления включает поля
recovery_acpio_size
иrecovery_acpio_offset
(и не включает поляrecovery_dtbo_size
иrecovery_dtbo_offset
).
Поле header_size
содержит размер заголовка загрузочного образа. Если для версии заголовка загрузочного образа установлено значение 1, поле id
содержит дайджест SHA-1 для раздела recovery_[dtbo|acpio]
загрузочного образа в дополнение к разделам kernel
, ramdisk
и second sections
. Подробные сведения о полях recovery_[dtbo|acpio]_size
и recovery_[dtbo|acpio]_offset
см. в разделе Образы восстановления .
Заголовок устаревшего загрузочного образа, версия 0
Устройства, выпущенные до Android 9 с устаревшим заголовком загрузочного образа, считаются использующими заголовок загрузочного образа версии 0.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t unused;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
};
В Android 9 появилось поле версии в заголовке загрузочного образа, что позволяет обновлять заголовок, сохраняя при этом обратную совместимость. Загрузчик должен проверить поле версии заголовка и соответствующим образом проанализировать заголовок. Устройства запускаются с:
- Android 13 может использовать загрузочный заголовок версии 3 или 4. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , версия 4 является основным загрузочным образом, а поле
os_version
в загрузочном заголовке должно быть равно нулю. Ожидается, что загрузчик устройства вместо этого получит информацию о версии из свойств Android Verified Boot (AVB) . - Android 12 может использовать загрузочный заголовок версии 3 или 4. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , версия 4 является основным загрузочным образом.
- Android 11 может использовать загрузочный заголовок версии 3. Для устройств, поддерживающих архитектуру Generic Kernel Image (GKI) , эту версию необходимо использовать в качестве основного загрузочного образа.
- Android 10 должен использовать загрузочный заголовок версии 2.
- Android 9 должен использовать загрузочный заголовок версии 1.
- В Android 8 и более ранних версиях используется заголовок загрузочного образа версии 0.
Для всех устройств под управлением Android 9 или более поздней версии Vendor Test Suite (VTS) проверяет формат образа boot/recovery
, чтобы убедиться, что в заголовке образа загрузки используется правильная версия. Чтобы просмотреть подробную информацию AOSP обо всех поддерживаемых заголовках загрузочных образов и загрузочных образов поставщиков, обратитесь к system/tools/mkbootimg/include/bootimg/bootimg.h
.
Реализация версий заголовка загрузки изображения
Инструмент mkbootimg
принимает следующие аргументы.
Аргумент | Описание |
---|---|
header_version | Устанавливает версию заголовка загрузочного образа. Загрузочный образ с версией заголовка:
|
recovery_dtbo | Используется для архитектур, использующих DTB. Указывает путь к образу восстановления DTBO. Необязательно для устройств A/B, которым не требуется образ восстановления. Устройства Non-A/B с использованием header_version :
|
recovery_acpio | Используется для архитектур, использующих ACPI вместо DTB. Указывает путь к изображению Acpio Recovery. Необязательно для устройств A/B, которым не требуется образ восстановления. Устройства Non-A/B с использованием header_version :
|
dtb | Путь к образу DTB, включенному в образы загрузки и восстановления. |
dtb_offset | При добавлении к base аргументу предоставляет физический адрес загрузки для конечного дерева устройств. Например, если base аргумент — 0x10000000 , а аргумент dtb_offset — 0x01000000 , поле dtb_addr_field в заголовке загрузочного образа заполняется как 0x11000000 . |
Устройство BoardConfig.mk
использует конфигурацию BOARD_MKBOOTIMG_ARGS
для добавления header version
к другим аргументам mkbootimg
, специфичным для платы. Например:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Система сборки Android использует переменную BoardConfig
BOARD_PREBUILT_DTBOIMAGE
для установки аргумента recovery_dtbo
инструмента mkbootimg
во время создания образа восстановления. Подробные сведения об изменениях в проекте Android с открытым исходным кодом (AOSP) см. в соответствующих списках изменений для управления версиями заголовков загрузочного образа .
Заголовок загрузочного образа, версия 4
Android 12 предоставляет boot_signature
в заголовке загрузочного образа версии 4, который можно использовать для проверки целостности ядра и виртуального диска. Проверка выполняется в VtsSecurityAvbTest и необходима для устройств, использующих архитектуру GKI. Однако boot_signature
не участвует в процессе проверки загрузки для конкретного устройства и используется только в VTS. Подробности см. в разделе Конфигурация платы GKI boot.img и проверенные GKI настройки загрузки .
Заголовок загрузочного образа поставщика версии 4 поддерживает несколько фрагментов виртуального диска поставщика.
Версия 4 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
uint32_t signature_size; /* size in bytes */
};
Заголовок изображения загрузки, версия 3
Android 11 обновляет заголовок загрузочного образа до версии 3, при этом удаляются следующие данные:
Загрузчик второго уровня. Поля
second_size
иsecond_addr
больше не отображаются в заголовке загрузочного образа. Устройства с загрузчиком второго уровня должны хранить этот загрузчик в собственном разделе.Образ восстановления. Требование указания образа восстановления устарело, а поля
recovery_dtbo_size
,recovery_dtbo_offset
,recovery_acpio_size
иrecovery_acpio_offset
больше не отображаются в заголовке загрузочного образа.Устройства A/B используют схему обновления и восстановления, благодаря которой нет необходимости указывать образ DTBO или ACPIO для восстановления.
Устройствам, отличным от A/B, которым требуется указать образ восстановления (DTBO или ACPIO), следует использовать заголовок загрузочного образа версии 1 или 2.
Большой двоичный объект дерева устройств (DTB). DTB хранится в загрузочном разделе поставщика , поэтому поля
dtb_size
иdtb_addr
больше не отображаются в заголовке загрузочного образа (но присутствуют в заголовке загрузочного образа поставщика).
Устройства могут использовать заголовок загрузочного образа версии 3 для соответствия архитектуре Generic Kernel Image (GKI) , которая унифицирует ядро ядра и перемещает модули поставщика, необходимые для загрузки, в vendor_boot
(это означает, что загрузочный образ содержит только компоненты GKI). Устройства, которые:
Используйте GKI (требуется ядро android-4.19 или android-5.4), но не используйте обновления A/B. Можно указать образ восстановления, используя загрузочный образ версии 3 для загрузочного образа и загрузочный образ версии 2 для образа восстановления.
Не используйте GKI и не используйте обновления A/B. Можно указать образ восстановления, используя образ загрузки версии 1 или 2 как для загрузочного образа, так и для образа восстановления.
Версия 3 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
};
Заголовок загрузочного образа, версия 2
Android 10 обновляет заголовок загрузочного образа до версии 2, в которой добавляется раздел для информации об образе восстановления DTB (размер образа и адрес физической загрузки).
Версия 2 версии заголовка загрузочного образа использует следующий формат.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
uint32_t dtb_size; /* size of dtb image */
uint64_t dtb_addr; /* physical load address */
};
Заголовок загрузочного образа, версия 1
Android 9 преобразует unused
поле заголовка загрузочного образа в поле версии заголовка. Устройства, запускаемые с Android 9, должны использовать заголовок загрузочного образа с версией заголовка, установленной на 1 или выше (это проверяется VTS).
Версия 1 версии заголовка образа загрузки использует следующий формат.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
};
Устройства, отличные от A/B, могут указать наложенный образ DTB/ACPI для восстановления, чтобы уменьшить вероятность сбоев обновления по беспроводной сети (OTA). (Устройства A/B не имеют этой проблемы, и им не нужно указывать накладываемое изображение.) Вы можете указать либо изображение DTBO, либо изображение ACPIO, но не оба (поскольку они используются в разных архитектурах). Чтобы правильно настроить заголовок загрузочного образа, при использовании:
Образ DTBO для восстановления включает поля
recovery_dtbo_size
иrecovery_dtbo_offset
(и не включает поляrecovery_acpio_size
иrecovery_acpio_offset
).Образ ACPIO для восстановления включает поля
recovery_acpio_size
иrecovery_acpio_offset
(и не включает поляrecovery_dtbo_size
иrecovery_dtbo_offset
).
Поле header_size
содержит размер заголовка загрузочного образа. Если для версии заголовка загрузочного образа установлено значение 1, поле id
содержит дайджест SHA-1 для раздела recovery_[dtbo|acpio]
загрузочного образа в дополнение к разделам kernel
, ramdisk
и second sections
. Подробные сведения о полях recovery_[dtbo|acpio]_size
и recovery_[dtbo|acpio]_offset
см. в разделе Образы восстановления .
Заголовок устаревшего загрузочного образа, версия 0
Устройства, выпущенные до Android 9 с устаревшим заголовком загрузочного образа, считаются использующими заголовок загрузочного образа версии 0.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t unused;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
};