android boot.img

android在启动时uboot判断有没有组合健按下或者cache分区的升级文件来决定进入哪个系统(可能还有别的判断方式)

有组合健按下或者cache分区有升级文件,则加载recovery.img进入升级系统。否则加载boot.img进入正常系统

此次记录3个要点:

1:boot.img的结构

2:如何作成boot.img

3:uboot 如何寻找boot.img

一:boot.img的结构如下:

+-----------------+

|boot header | 1 page

+-----------------+

|kernel | n pages

+-----------------+

|ramdisk | m pages

+-----------------+

|second stage | o pages

+-----------------+

其中:

boot header记录了boot.img的一些信息,

kernel即内核压缩文件zImage,

ramdisk即根文件系统,

second stage备用

boot header一共占了一页,默认2K。

前面的数据是struct boot_img_hdr,后面拿0补齐,凑齐2K。

结构体如下:

struct boot_img_hdr

{

unsigned char magic[BOOT_MAGIC_SIZE];

unsigned kernel_size; /*
内核大小*/

unsigned kernel_addr; /*
内核位置*/

unsigned ramdisk_size; /* root根文件系统大小*/

unsigned ramdisk_addr; /*
根文件系统位置*/

unsigned second_size; /*
扩展,备用*/

unsigned second_addr; /*
扩展,备用*/

unsigned tags_addr; /*传参数用的物理内存地址,它作用是把bootloader中的参数传递给kernel*/

unsigned page_size; /*
页大小,默认2K*/

unsigned unused[2]; /*
扩展,备用*/

unsigned char name[BOOT_NAME_SIZE]; /*
产品名*/

unsigned char cmdline[BOOT_ARGS_SIZE]/*
启动参数*/;

unsigned id[8]; /*可以重用,如时间戳,校验位*/

};

二:boot.img的制作

mkbootimg命令制作boot.img,命令路径:~/out/host/linux-x86/bin/mkbootimg,代码路径:~/system/core/mkbooting

mkbootimg命令参数如下:

kernel : zImage的路径

ramdisk: ramdisk.img的路径

second :
备用文件路径

cmdline :
内核参数

board :
产品名

base : base地址

pagesize :
页大小

output:
输出路径

其中kernel,ramdisk,output是必须要传入的参数,其它都是可选的

示例:

mkbootimg    --kernel   zImage       --ramdisk ramdisk.img    --base 0x10800000  --output     boot.img

三:uboot加载 boot.img

uboot在加载boot.img时使用booti 命令,例如:booti mmc2 ,表示设备假如有几个SD卡,或者emmc时,去第二个资源寻找,boot.img

uboot会去第二个资源设备上的第一个分区读取boot.img

首先读取boot.img中的boot
header,从中获取需要的信息

这样就确定了内核和根文件系统在 boot.img中的位置,剩下的就是加载到内存中了

其中内核加载到内存的位置是由base参数决定的,默认是0x10800000

android boot.img

时间: 2024-10-09 10:18:27

android boot.img的相关文章

In Depth : Android Boot Sequence / Process

What happened when I press power on button in my Android device ? What is Android boot sequence ? What is linux kernel ? What is different between desktop linux kernel and Android linux kernel ? What is bootloader ? What is Zygote ? What is x86 and A

[Quote] How To Change, Customize & Create Android Boot Animation [Guide]

From http://www.addictivetips.com/mobile/how-to-change-customize-create-android-boot-animation-guide/ How To Change, Customize & Create Android Boot Animation [Guide] by Haroon Q Raja onMay 19, 2011 55 The boot animation is the first thing that you s

另一种root方法,Android boot.img破解

一.破解原理 Android手机获得Root权限,其实就是让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限. 众所周知,市面上绝大部分的Android手机文件系统有三个分区,分别是/,/system,/data.根分区(/)是打包为ramdisk.img后,再与kernel的zImage打包为boot.img.boot.img在EMMC/NAND中以RAW DATA的形式存在,且除使用烧写工具外,无法读写

android boot.img文件结构、拆包、打包

boot.img is not a compressed filesystem image like system.img. It is read by the bootloader, and contains little more than a kernel image and a ramdisk image. 我们可以从手机导出boot.img, 其实它并不是一个完整的文件系统 ,由google定义的文件格式.如何定义见,android-src/system/core/mkbootimg/

Android Video Playback----from Framework to Driver

I will analyze the process of  the local video playback in Android 4.1 on Pandaboard. Hardware acceleration for HD video playback also will be discussed. 1. Video File A video file usually contains two part: File Header and Coded Video Frames. So the

理解Android系统(一)

理解Android系统 Android 是业界流行的开源移动平台,受到广泛关注并为多个手机制造商作为手机的操作系统平台.由于它的开放性,市面上又出现了它的很多改良定制版本.且广泛的应用在手机.汽车.电脑等领域.因此,研究其安全架构及权限控制机制具有非常的重要性. 本章从 Android 层次化安全架构入手,详细地介绍 Android 平台的安全架构及其权限控制机制,涵盖 Android 应用程序权限申请方法等,并从源代码实现层面来解析该机制. 1.1 系统的层级架构 Android架构,其实就是

Android白话启动篇(Android booting process)

今天我们将深入Android的启动流程,从用户按下开机键到Android界面的过程.在谷歌上搜索"Android boot process"会得到很多很好英文文章,讲解Android启动这一过程,每个人讲述的角度不一样,通过阅读,对于Android的理解将会更加深刻.下面是链接,打不开的请翻墙!谢谢! https://www.google.com.hk/search?q=The+Android+Booting+process&oq=The+Android+Booting+pro

Android 系统启动过程详解

android 使用 linux 内核,一般运行在 ARM 体系架构上,android 设备启动的过程,应用层之下基本等同于linux, 从应用层第一个程序init开始有所区别,下面开始介绍. step1, boot rom 主要作用是加载 boot loader 进入内存并执行,boot rom 一般固化在芯片上,设备启动加电自检后从固定的地址开始执行 step2,boot loader 分2步执行,boot rom只加载了第一部分bootloader代码进入内存,这部分代码随即加载第二部分b

[android]system.img文件的打包和解包

1:system.img的两种格式 system2_0.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files) system1_0.img: Android sparse image, version: 1.0, Total of 393216 4096-byte output blocks in 1765 input chunks. 以上