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加密等内容
}
在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
编译时用的基地址是 0xc0008000,但你的 boot loader 却将它加载到 0xc0010000 处去执行,那么内核映像
当然不能正确地执行了。
zreladdr ---- kernel_addr
params_phys ---- tags_addr
在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的分析的更多相关文章
- Spring Boot 入门详细分析
推荐阅读: 我们为什么要学习 Spring Boot 我们搭建 Spring Boot 项目,可以使用 Spring 为我们提供的初始化网站,那个可能不太方便,今天呢,我们就来说说如何使用 IDEA ...
- Spring Boot源码分析-配置文件加载原理
在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读.今天让我们继续阅读源码,了解配置文 ...
- Spring Boot源码分析-启动过程
Spring Boot作为目前最流行的Java开发框架,秉承"约定优于配置"原则,大大简化了Spring MVC繁琐的XML文件配置,基本实现零配置启动项目. 本文基于Spring ...
- 精尽Spring Boot源码分析 - 序言
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - Jar 包的启动实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - 文章导读
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - 支持外部 Tomcat 容器的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 精尽Spring Boot源码分析 - 剖析 @SpringBootApplication 注解
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
随机推荐
- bzoj 3293 数学整理
和1045一模一样,找到这道题的时候还愣了下神,最后发现样例都是 一样的,直接粘了1045的代码,具体题解看 http://www.cnblogs.com/BLADEVIL/p/3468729.htm ...
- 15万甚至30万以内的SUV值不值得买?
大家好,这个帖子比较长,也是我一直以来长期实践.思考.验证的结论,不当之处还请指正,也欢迎大家来共 同讨论,已经买了此价位SUV的战友们,看完后也不要生气,毕竟我的出发点是注重行车安全,人非神明,是个 ...
- 科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生
科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生 黑科技,还是要提D.E.Shaw Research这个奇异的存在. 要讲这个黑科技,我们可能要扯远一点,先讲讲D.E. Shaw这个人是怎 ...
- 查找出现次数大于n/k的重复元素
本文是对一篇英文论文的总结:Finding Repeated Elements.想看原文,请Google之. 这个问题的简单形式是“查找出现次数大于n/2的重复元素”.我们先从简单问题开始,然后再做扩 ...
- Using Hooks
The following code examples demonstrate how to perform the following tasks associated with hooks: In ...
- RVA与Offset的换算函数
function RVAToFileOffset(FileName:string; RVA: Cardinal): Cardinal; var MemPE: TFileStream; PEDo ...
- 将HTML转成XHTML并清除一些无用的标签和属性
介绍 这是一个能帮你从HTML生成有效XHTML的经典库.它还提供对标签以及属性过滤的支持.你可以指定允许哪些标签和属性可在出现在输出中,而其他的标签过滤掉.你也可以使用这个库清理Microsoft ...
- HDOJ 2152 Fruit(母函数)
Fruit Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- vi编辑器的常见使用技巧
光标移动 在普通模式下, 1.按 h 向左移动光标 按 h + 数字n 可以向右移动 n个字符 比如 h + 5 就是向左移动5个字符 2.按j向下移动光标 3.按k向上移动光标 4.按 l 向 ...
- HDU4784 Dinner Coming Soon(dp)
当时区域赛的一道题.题意大概是这样的,有一个1~N的图,然后你要从1->N,其中每经过一条边需要消耗你的时间和金钱,每到一个地方可以选择什么都不做,或者买一包盐,卖一包盐,身上不能同时有超过B包 ...