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