zoukankan      html  css  js  c++  java
  • 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: 输出路径


    当中kernelramdiskoutput是必需要传入的參数,其他都是可选的


    演示样例:

    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







  • 相关阅读:
    20、Python之函数参数的使用
    19、Python之函数的基本使用
    18、Python之文件修改及f.seek的使用
    17、Python之文件处理的其他方法
    15、字符编码
    14、Python基本数据类型及内置方法(集合)
    13、Python基本数据类型及内置方法(列表、元组、字典)
    12、Python基本数据类型及内置方法(数字、字符串)
    11、Python流程控制之for循环
    10、Python流程控制之while循环
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7364528.html
Copyright © 2011-2022 走看看