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. AngularJS学习篇(十五)

    AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 创建模块 你可以通过 AngularJS 的 angular. ...

  2. 企业级memcached部署(session共享)

    服务端部署 第一个里程碑:安装依赖关系 Memcache用到了libevent这个库用于Socket的处理. [root@nfs01 ~]# yum install libevent libevent ...

  3. Java的DAO设计模式

    用java的DAO模式实现对一个学生实体的增加,查询操作. 1.建立一个学生实体类 Student.java public class Student { private String sid; pr ...

  4. [转载] FreeMarker教程

    转载自http://www.blogjava.net/freeman1984/archive/2010/11/04/337239.html FreeMarker是一个模板引擎,一个基于模板生成文本输出 ...

  5. 前端面试题(5) 列举5种IE haslayout的属性及其值

    haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父 ...

  6. python之socket模块

    UDP client #!/usr/bin/env python2.7 #-*-coding:utf-8 -*- import socket s=socket.socket(socket.AF_INE ...

  7. IDEA热部署(二)---jetty插件启动maven项目

    jetty插件的配置 我们使用jetty插件来进行启动我们的maven项目,在pom.xml中进行配置: <plugins> <plugin> <groupId>o ...

  8. 八、VueJs 填坑日记之参数传递及内容页面的开发

    我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + ...

  9. FreeRTOS 移植到WIN10

    背景 标题表述的不准确,大意是移植到WIN10的PC机,Intel I5. 最近因为项目接触了FreeRTOS 实时操作系统,想对这个操作系统有一个更深入的了解,所以决定下载源码看看,下面这个链接的随 ...

  10. Python学习笔记整理总结【RabbitMQ队列】

    RabbitMQ是消息队列.之前学过的队列queue:线程queue(threading queue),只是多个线程之间进行数据交互.进程queue(processing queue),只是父进程与子 ...