1 boot.img 

boot.img是由文件头信息,内核数据以及文件系统数据组成,它们之间非页面对齐部分用0填充

文件头信息的具体结构可以在system/core/mkbootimg/bootimg.h中看到:

struct boot_img_hdr  

{  

    unsigned char magic[BOOT_MAGIC_SIZE];  

    unsigned  kernel_size;  

    unsigned  kernel_addr;  

    unsigned  ramdisk_size;  

    unsigned  ramdisk_addr;  

    unsigned  second_size;  

    unsigned  second_addr;  

    unsigned  tags_addr;  

    unsigned  page_size;  

    unsigned  unused[2];  

    unsigned  char  name[BOOT_NAME_SIZE]  

    unsigned  char cmdline[BOOT_ARGS_SIZE]  

    unsigned  id[8]; //存放时间戳,校验和,SHA加密等内容  

}
2 生成boot.img 

在build/core/Makefile里,INSTALLED_BOOTIMAGE_TARGET 是生成boot.img ,其中参数为INTERNAL_BOOTIMAGE_ARGS ,该参数

主要是--kernel , 用到了BOARD_KERNEL_BASE ,而在device/qcom/BoardConfig.mk中,会定义 BOARD_KERNEL_BASE 

这样mkbootimg :

--kernel     kernel   --ramdisk   ramdisk.img  --cmdline $(BOARD_KERNEL_CMDLINE) 

--base $(BOARD_KERNEL_BASE)  --pagesize 2048 

 

mkbootimg的代码在system/core/mkbootimg 它分析参数后,依次写入header, kernel ,ramdisk . 

header参数为:

 kernel_addr  = base 0x8000  --- 内核加载的基地址

 ramdisk_addr = base 0x01100000

 tags_addr    = base 0x1000
确认 boot loader 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致,假设你的内核映像在

编译时用的基地址是 0xc0008000,但你的 boot loader 却将它加载到 0xc0010000 处去执行,那么内核映像

当然不能正确地执行了。
在Kernel/arch/arm 下面的Makefile.boot 中指定了内核编译链接的基地址。

zreladdr    ---- kernel_addr

params_phys ---- tags_addr
3 boot.img的加载

 在lk 中, smem_ptable_init 函数中会初始化 smem_apps_flash_start ,它通过读share memory ,也就是ARM9端传入的0:APPS 

 这样在targe_init函数中,会将offset = smem_apps_flash_start , 然后ptable_add将第一个分区的地址设置为offset .

 

 在ARM9 中 有两个文件 partition.h 和 partition.c 

 partition.h  中定义了:

   FLASH_PARTI_APPS  "0:APPS" --- 对于boot.img 

 partition.c  中定义了所有的分区的大小, 这样smem_apps_flash_start 其实就为ARM9的所有image的大小。

 

 4 ARM9中的实现

   函数smem_retrieve_mibib 中将分配 smem_alloc , 也就是有512 字节的 MIBIB区 

   

   MIBIB区 : 16个字节是header 

              每个分区 28个字节

              这样共有16个分区

  每个分区信息,flash_partition_entry 包括了name 和 offset .

  这样ARM11 测 根据name 为0:APPS 得到offset ,也就是该分区的起始地址。

  MIBIB 分区 是通过根据 mjnand -c mibib_xxx.cfg 得到 

boot.img的分析的更多相关文章

  1. Spring Boot 入门详细分析

    推荐阅读: 我们为什么要学习 Spring Boot 我们搭建 Spring Boot 项目,可以使用 Spring 为我们提供的初始化网站,那个可能不太方便,今天呢,我们就来说说如何使用 IDEA ...

  2. Spring Boot源码分析-配置文件加载原理

    在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读.今天让我们继续阅读源码,了解配置文 ...

  3. Spring Boot源码分析-启动过程

    Spring Boot作为目前最流行的Java开发框架,秉承"约定优于配置"原则,大大简化了Spring MVC繁琐的XML文件配置,基本实现零配置启动项目. 本文基于Spring ...

  4. 精尽Spring Boot源码分析 - 序言

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  5. 精尽Spring Boot源码分析 - Jar 包的启动实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  6. 精尽Spring Boot源码分析 - 文章导读

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  7. 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  8. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  9. 精尽Spring Boot源码分析 - 支持外部 Tomcat 容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  10. 精尽Spring Boot源码分析 - 剖析 @SpringBootApplication 注解

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

随机推荐

  1. LAMP环境的搭建

    [一些前言废话]一名web开发尤其是后端不懂LAMP环境的搭建,那就摊上事了,有些人说他一直用win下的wampServer这种傻瓜式环境搭建,用的挺好的,也有人说他用云服务器,搭配“一键搭建LAMP ...

  2. AngularJs学习笔记--directive

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...

  3. KMP_Best Reward

    大意:把一个字符串分成两串,假如一个字符串是回文串就可以加上它的VALUE,否则它的VALUE为0: KMP的特点是可以求出前缀与后面的字符串是否匹配, 注意回文串的特点,所以当我们把回文串反转的时候 ...

  4. IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题【转】

    转自:http://www.iefans.net/ie-shangchuan-bendi-lujing-fakepath/ 在使用<input id="file_upl" t ...

  5. 偏序集的Dilworth定理

    定理1 令(X,≤)是一个有限偏序集,并令r是其最大链的大小.则X可以被划分成r个但不能再少的反链.其对偶定理称为Dilworth定理:定理2 令(X,≤)是一个有限偏序集,并令m是反链的最大的大小. ...

  6. NGUI 自定义 Drag Item Script

    最近要实现一个NGUI效果. 查看了一下,NGUI有个自带 UIDragDropItem.cs 的组件进过修改后即可以实现. 下面贴上UI布局,代码: mDragDropItem.cs using U ...

  7. js弹出图片原图效果

    1.将js方法独立出来common.js function openwin(src){ var basePath = document.getElementById("basePath&qu ...

  8. 在 Java 中如何更高效地存储和管理 SQL 语句?

    [编者按]还在为管理 Java 代码中的 SQL 语句而烦恼吗?让 Zemian 帮你摆脱困境吧!本文系 OneAPM 工程师编译整理 注意:使用java.util.Properties#loadFr ...

  9. [C++]类的继承与派生

    继承性是面向对象程序设计的第二大特性,它允许在既有类的基础上创建新类,新类可以继承既有类的数据成员和成员函数,可以添加自己特有的数据成员和成员函数,还可以对既有类中的成员函数重新定义.利用类的继承和派 ...

  10. Linux客户/服务器程序设计范式1——并发服务器(多进程)

    引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...