uboot/include/android_image.h
<<
>>
Prefs
   1/*
   2 * This is from the Android Project,
   3 * Repository: https://android.googlesource.com/platform/bootable/bootloader/legacy
   4 * File: include/boot/bootimg.h
   5 * Commit: 4205b865141ff2e255fe1d3bd16de18e217ef06a
   6 *
   7 * Copyright (C) 2008 The Android Open Source Project
   8 *
   9 * SPDX-License-Identifier: BSD-2-Clause
  10 */
  11
  12#ifndef _ANDROID_IMAGE_H_
  13#define _ANDROID_IMAGE_H_
  14
  15#define ANDR_BOOT_MAGIC "ANDROID!"
  16#define ANDR_BOOT_MAGIC_SIZE 8
  17#define ANDR_BOOT_NAME_SIZE 16
  18#define ANDR_BOOT_ARGS_SIZE 512
  19
  20struct andr_img_hdr {
  21        char magic[ANDR_BOOT_MAGIC_SIZE];
  22
  23        u32 kernel_size;        /* size in bytes */
  24        u32 kernel_addr;        /* physical load addr */
  25
  26        u32 ramdisk_size;       /* size in bytes */
  27        u32 ramdisk_addr;       /* physical load addr */
  28
  29        u32 second_size;        /* size in bytes */
  30        u32 second_addr;        /* physical load addr */
  31
  32        u32 tags_addr;          /* physical addr for kernel tags */
  33        u32 page_size;          /* flash page size we assume */
  34        u32 unused[2];          /* future expansion: should be 0 */
  35
  36        char name[ANDR_BOOT_NAME_SIZE]; /* asciiz product name */
  37
  38        char cmdline[ANDR_BOOT_ARGS_SIZE];
  39
  40        u32 id[8]; /* timestamp / checksum / sha1 / etc */
  41};
  42
  43/*
  44 * +-----------------+
  45 * | boot header     | 1 page
  46 * +-----------------+
  47 * | kernel          | n pages
  48 * +-----------------+
  49 * | ramdisk         | m pages
  50 * +-----------------+
  51 * | second stage    | o pages
  52 * +-----------------+
  53 *
  54 * n = (kernel_size + page_size - 1) / page_size
  55 * m = (ramdisk_size + page_size - 1) / page_size
  56 * o = (second_size + page_size - 1) / page_size
  57 *
  58 * 0. all entities are page_size aligned in flash
  59 * 1. kernel and ramdisk are required (size != 0)
  60 * 2. second is optional (second_size == 0 -> no second)
  61 * 3. load each element (kernel, ramdisk, second) at
  62 *    the specified physical address (kernel_addr, etc)
  63 * 4. prepare tags at tag_addr.  kernel_args[] is
  64 *    appended to the kernel commandline in the tags.
  65 * 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
  66 * 6. if second_size != 0: jump to second_addr
  67 *    else: jump to kernel_addr
  68 */
  69#endif
  70