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:
输出路径当中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的更多相关文章
- In Depth : Android Boot Sequence / Process
In Depth : Android Boot Sequence / Process What happened when I press power on button in my Android ...
- android boot.img 结构
android 的boot.img 包括 boot header,kernel, ramdisk 首先来看看Makefile是如何产生我们的boot.img的: boot镜像不是普通意义上的文件系统, ...
- 另一种root方法,Android boot.img破解
一.破解原理 Android手机获得Root权限,其实就是让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限. ...
- android boot.img unpack pack
每次编译boot.img都要花比较长的时间,有时候只是更改其中的配置文件. 如果能够将boot.img解压,更改之后再打包的话,就能节省时间. boot.img tools是别人写好的工具,能很好的解 ...
- Android/Linux boot time分析优化
如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...
- Android Bootloader LittleKernel的两篇文章 【转】
转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...
- 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 ...
- imx6 android 进入文件系统闪屏
imx6进入文件系统的时候都会闪屏,应该是framebuffer未初始化,就已经打开了背光.目前解决办法,在kenel阶段关闭背光,显示android的开机动画之后(此时framebuffer已经初始 ...
- Android Bootloader LittleKernel的两篇文章
Android 开发之 ---- bootloader (LK) LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程 ...
随机推荐
- Javascript下IE与Firefox下的差异兼容写法总结
http://www.jb51.net/article/23923.htm 总结一部分IE和Firefox的javascript差异写法,对于像书写多浏览器兼容性更好的代码,可以参考下. ...
- Java GC算法 垃圾收集器
GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. ...
- MVC 页面静态化
最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...
- redis特性 存储 API 集群 等
公司组内技术分享,刚好最近工作用redis构建缓存,所以想同事们分享关于redis的一些知识, 这些知识不仅仅是包括一些API层,而是一些关于redis功能功能特性的 目前为什么使用redis构建缓存 ...
- 浅谈Maven
最近的有用到Maven 所以就大概跟大家谈一下Maven 1什么是Maven? Maven我个人的理解就是项目架包管理 通俗易懂的来说就是管理配置你项目中的所有jar包的 废话不多说 Maven去ht ...
- prometheus client_golang使用
序言 Prometheus是一个开源的监控系统,拥有许多Advanced Feature,他会定期用HTTP协议来pull所监控系统状态进行数据收集,在加上timestamp等数据组织成time se ...
- Loadrunner web_url函数学习(转贴)
http://blog.csdn.net/dfbrt56/article/details/3291461 ----------------------------------------------- ...
- SparkStreaming动态读取配置文件
SparkStreaming动态读取配置文件 标签: SparkStreaming HDFS 配置文件 MySql 需求 要实现SparkStreaming在流处理过程中能动态的获取到配置文件的改变 ...
- SQL 之存储过程
存储过程 是用来执行管理任务或应用复杂的业务规则, 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 存储过程的优点 存储过程已在服务器注册 执 ...
- Java提高十五:容器元素比较Comparable&Comparator深入分析
我们经常用容器来存放元素,通常而言我们是不关系容器中的元素是否有序,但有些场景可能要求容器中的元素是有序的,这个时候用ArrayList LinkedList Hashtable HashMap ...