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的更多相关文章

  1. In Depth : Android Boot Sequence / Process

    In Depth : Android Boot Sequence / Process What happened when I press power on button in my Android ...

  2. android boot.img 结构

    android 的boot.img 包括 boot header,kernel, ramdisk 首先来看看Makefile是如何产生我们的boot.img的: boot镜像不是普通意义上的文件系统, ...

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

    一.破解原理 Android手机获得Root权限,其实就是让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限. ...

  4. android boot.img unpack pack

    每次编译boot.img都要花比较长的时间,有时候只是更改其中的配置文件. 如果能够将boot.img解压,更改之后再打包的话,就能节省时间. boot.img tools是别人写好的工具,能很好的解 ...

  5. Android/Linux boot time分析优化

    如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...

  6. Android Bootloader LittleKernel的两篇文章 【转】

    转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...

  7. Run Android on Your Netbook or Desktop

    Run Android on Your Netbook or Desktop Would you like to try out Google's Android OS on your netbook ...

  8. imx6 android 进入文件系统闪屏

    imx6进入文件系统的时候都会闪屏,应该是framebuffer未初始化,就已经打开了背光.目前解决办法,在kenel阶段关闭背光,显示android的开机动画之后(此时framebuffer已经初始 ...

  9. Android Bootloader LittleKernel的两篇文章

    Android 开发之 ---- bootloader (LK) LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程 ...

随机推荐

  1. Python爬虫入门:Urllib库的高级使用

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  2. Oracle-2 - :超级适合初学者的入门级笔记--定义更改约束,视图,序列,索引,同义词

    接着我上一篇的写,在这感觉到哇 内容好多啊   上一篇,纯手打滴,希望给个赞! 添加约束的语法: 使用 alter table 添加或删除约束,但是不能修改约束 有效化或无效化约束 添加not nul ...

  3. 设计模式的征途—15.观察者(Observer)模式

    在日常生活中,交通信号灯指挥者日益拥挤的城市交通.红灯亮,汽车停止:绿灯亮,汽车继续前行:在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者.随着交通信号灯的变化,汽车的行为也会随之变化,一盏 ...

  4. python进阶-------进程线程(二)

    Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(G ...

  5. 一致性hash算法以及其在分布式系统中的应用(转)

    初始架构

  6. Java中static关键字的详解

    static关键字可以修饰方法和成员变量(不可以修饰局部变量,但是可以修饰内部类). static关键字方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者 ...

  7. 从cdn说起

    为什么要使用cdn 雅虎军规有一条规则建议我们是用cdn.随便在网上搜索,可以找到使用的cdn的好处. 再次强调第一条黄金定律,减少网页内容的下载时间.提高下载速度还可以通过CDN(内容分发网络)来提 ...

  8. python win32 简单操作

    源由 刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定:后来看到python可以操作win32相关的api,恰好这一段时间正在学习python,感觉练手的时候到了~~~ 下载 要注意Pyt ...

  9. tab面板,html+css

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Vuejs-组件-<slot> 标签分发内容

    资料来自:https://cn.vuejs.org/v2/guide/components.html#具名-Slot 在官方文档的基础上,更加细致的讲解代码. <slot> 标签中的任何内 ...