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 Boot包扫描原理 三.Spring Boot自动配置原理 Spring Boot启动原理分析 一.依赖导入原理 父项 ...
- 全志H3 uboot传参到内核分析,boot.scr文件分析
传参过程 uboot倒计时结束,默认以bootcmd来启动内核,它等于 fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr} 上面两 ...
- spring boot 源码分析(七) 事件机制 之 SpringApplicationEvent
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 前面的文章我们讲解了一下spring boot配置文件加载的相关源码分析,下面我们将从源码角度讲解一下spring ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
概述 我们知道 Spring Boot 能够创建独立的 Spring 应用,内部嵌入 Tomcat 容器(Jetty.Undertow),让我们的 jar 无需放入 Servlet 容器就能直接运行. ...
- spring boot 启动流程分析
spring boot 框架凭借极简配置,一键运行和强大的第三方框架集成等特点,受到广大开发者的青睐,基本成为java开发中必不可少的基础的框架.spirng boot带给我们这么多便利的背后,它都做 ...
- spring boot源码分析之SpringApplication
spring boot提供了sample程序,学习spring boot之前先跑一个最简单的示例: /** Copyright 2012-2016 the original author or aut ...
- Spring Boot————BeanCreationNotAllowedException异常分析
引言 在对数据库进行新增记录的JUnit测试时,抛出一个BeanCreationNotAllowedException异常: 异常分析与解决 异常信息太长,图片截不下,粘贴来看: Exception ...
- Spring Boot————Spring Boot启动流程分析
一.引言 Spring Boot 的启动虽然仅仅是执行了一个main方法,但实际上,运行流程还是比较复杂的,其中包含几个非常重要的事件回调机制.在实际生产开发中,有时候也会利用这些启动流程中的回调机制 ...
- Java程序细胞工厂_Spring Boot实现原理分析
1.各种Bean 如果我们把Spring想象成人体,把Bean当做细胞的话,那么正是不同种类bean的相互协作才使得spring这个大工厂正常运行,有些bean做管理工作,有些bean为其它bean服 ...
最新文章
- ASP.NET中 DropDownList+GridView(网格视图)的使用前台绑定[高]
- python代理池_用Python搭建一个简单的代理池
- python和sql_Python和SQL 2017的强大功能
- cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除
- 一个很好的机器学习普及网站
- 【idea】idea快捷键(更新中....)
- bzoj千题计划164:bzoj5123: 线段树的匹配
- QQ2006 界面编程
- 各个刷流量软件总结对比
- 水经注万能地图下载器下载的瓦片如何应用到web端的cesium中
- 2014年实习生招聘之多益网络实习生招聘笔试题—2014/04/17
- 网页计算器 html代码原理,HTML网页之计算器代码
- 更多python内容请移步
- [个人学习]透视画法的一点记录
- Spring Boot入门(05):了解Spring Boot的starter入门 | 超级详细,建议收藏
- WMI Provider Host(wmiprvse.exe)占用CPU高的解决方案
- HTTP 请求方法 GET/POST/PUT/DELETE
- 南京邮电大学微型计算机原理与接口技术答案,微型计算机原理与接口技术南京邮电大学...
- 阿里面试官问我Mybatis,我怂了吗?
- 线程休眠 java_Java线程休眠和线程让步
热门文章
- Maven解决静态资源过滤问题
- 025_jdbc-mysql-Statement的sql注入问题
- 044_定义类或对象
- 031_div和span
- python元祖迭代_python *式语法在迭代一个元组序列时的逻辑?
- xbox acc驱动win7_Xbox老大:希望第一方工作室能推出更多单机游戏_电竞
- 保存oracle数据之后乱码,Oracle保存中文数据和读取数据页面显示乱码解决方案
- linux+历史命令',Linux历史命令管理以及用法
- android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧
- 华为云计算之快照技术