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. JSP异常之org.apache.jasper.JasperException(转)

    According to TLD or attribute directive in tag file, attribute items does not accep t any expression ...

  2. mac android apk反编译

    在mac os系统上反编译android apk,首先需要准备好以下3个文件: 1.apktool:https://ibotpeaches.github.io/Apktool/install/ 2.d ...

  3. CSS3详解:transform、transition

    CSS3 transform是什么? transform的含义是:改变,使-变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...

  4. 使用NPOI导出图片到EXCEL

    1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...

  5. Jenkins Kubernetes Slave 调度效率优化小记

    Jenkins K8S Slave 调度效率优化 by yue994488@126.com 使用kubernetes为测试工具Gatling进行大规模压测,压测期间发现Jenkins调度压测实例较慢, ...

  6. 初识Java网络编程

    事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作.Socket ...

  7. java 内部类和闭包

    内部类(inner class) public class Outer{ private String name; class Inner{ public String getOuterName(){ ...

  8. 设计模式的征途—11.外观(Facade)模式

    在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服 ...

  9. 自己动手修改Robotium代码(上)

    Robotium作为Android自动化测试框架,还有许多不完善的地方,也不能满足测试人员的所有要求.那么,本文以四个实际中碰到的问题为例,介绍改动Robotium源码的过程. public bool ...

  10. Android WebView 上传各种文件(包括拍照 录像 录音 文件 音乐 等,用到图片或拍照的,可以参考下)

    我也是从网上扒下来的,经过多次实验,找到了个好用的.网上能搜到最多的也就是这个解决方案,我英文不好,也没仔细研究,但大多数都是出自这: http://stackoverflow.com/questio ...