1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* tools/mkbootimg/bootimg.h 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Copyright 2007, The Android Open Source Project 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** you may not use this file except in compliance with the License. 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** You may obtain a copy of the License at 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** See the License for the specific language governing permissions and 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** limitations under the License. 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/ 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef _BOOT_IMAGE_H_ 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define _BOOT_IMAGE_H_ 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct boot_img_hdr boot_img_hdr; 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define BOOT_MAGIC "ANDROID!" 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define BOOT_MAGIC_SIZE 8 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define BOOT_NAME_SIZE 16 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define BOOT_ARGS_SIZE 512 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct boot_img_hdr 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned char magic[BOOT_MAGIC_SIZE]; 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned kernel_size; /* size in bytes */ 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned kernel_addr; /* physical load addr */ 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned ramdisk_size; /* size in bytes */ 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned ramdisk_addr; /* physical load addr */ 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned second_size; /* size in bytes */ 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned second_addr; /* physical load addr */ 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned tags_addr; /* physical addr for kernel tags */ 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned page_size; /* flash page size we assume */ 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned unused[2]; /* future expansion: should be 0 */ 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */ 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned char cmdline[BOOT_ARGS_SIZE]; 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned id[8]; /* timestamp / checksum / sha1 / etc */ 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** +-----------------+ 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** | boot header | 1 page 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** +-----------------+ 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** | kernel | n pages 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** +-----------------+ 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** | ramdisk | m pages 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** +-----------------+ 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** | second stage | o pages 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** +-----------------+ 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** n = (kernel_size + page_size - 1) / page_size 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** m = (ramdisk_size + page_size - 1) / page_size 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** o = (second_size + page_size - 1) / page_size 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 0. all entities are page_size aligned in flash 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 1. kernel and ramdisk are required (size != 0) 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 2. second is optional (second_size == 0 -> no second) 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 3. load each element (kernel, ramdisk, second) at 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** the specified physical address (kernel_addr, etc) 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 4. prepare tags at tag_addr. kernel_args[] is 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** appended to the kernel commandline in the tags. 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 6. if second_size != 0: jump to second_addr 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** else: jump to kernel_addr 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/ 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if 0 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct ptentry ptentry; 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct ptentry { 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char name[16]; /* asciiz partition name */ 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned start; /* starting block number */ 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned length; /* length in blocks */ 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned flags; /* set to zero */ 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* MSM Partition Table ATAG 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** length: 2 + 7 * n 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** atag: 0x4d534d70 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** <ptentry> x n 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/ 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 98