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. Javascript下IE与Firefox下的差异兼容写法总结

    http://www.jb51.net/article/23923.htm     总结一部分IE和Firefox的javascript差异写法,对于像书写多浏览器兼容性更好的代码,可以参考下.   ...

  2. Java GC算法 垃圾收集器

    GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. ...

  3. MVC 页面静态化

    最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...

  4. redis特性 存储 API 集群 等

    公司组内技术分享,刚好最近工作用redis构建缓存,所以想同事们分享关于redis的一些知识, 这些知识不仅仅是包括一些API层,而是一些关于redis功能功能特性的 目前为什么使用redis构建缓存 ...

  5. 浅谈Maven

    最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...

  6. prometheus client_golang使用

    序言 Prometheus是一个开源的监控系统,拥有许多Advanced Feature,他会定期用HTTP协议来pull所监控系统状态进行数据收集,在加上timestamp等数据组织成time se ...

  7. Loadrunner web_url函数学习(转贴)

    http://blog.csdn.net/dfbrt56/article/details/3291461 ----------------------------------------------- ...

  8. SparkStreaming动态读取配置文件

    SparkStreaming动态读取配置文件 标签: SparkStreaming HDFS 配置文件 MySql 需求 要实现SparkStreaming在流处理过程中能动态的获取到配置文件的改变 ...

  9. SQL 之存储过程

    存储过程 是用来执行管理任务或应用复杂的业务规则, 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 存储过程的优点 存储过程已在服务器注册 执 ...

  10. Java提高十五:容器元素比较Comparable&Comparator深入分析

    我们经常用容器来存放元素,通常而言我们是不关系容器中的元素是否有序,但有些场景可能要求容器中的元素是有序的,这个时候用ArrayList  LinkedList  Hashtable HashMap ...