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)流程 ...
随机推荐
- 逻辑卷lvm创建、扩展、缩小
系统环境:CentOS Linux release 7.3.1611 (Core) 3.10.0-514.el7.x86_64 CentOS6与7配置方法大同小异.通常是在系统安装的时候创建lvm,然 ...
- selenium元素定位
在网页自动化测试中,我们要让程序自动模拟我们的点击.输入.悬浮.拖动等操作,完成我们的测试用例组. 输入.点击.打开这样的动词,已经包含在了selenium的方法中,可以直接调用(当然你也可以自己写) ...
- java Log4j日志配置详解大全
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- 直接调用VS.net2005中的配置界面
以前做Winform程序,居然专门做一个界面来配置连接字符串.今天无意中发现:竟然可以直接调用VS.net2005中的配置界面来处理. 使用方法也非常简单: 引用C:\Program Files\Mi ...
- C#抓取和分析网页的类
抓取和分析网页的类. 主要功能有: Ontology 1.提取网页的纯文本,去所有html标签和javascript代码 2.提取网页的链接,包括href和frame及iframe 3.提取网页的ti ...
- 结合java.util.TreeMap源码理解红黑树
前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...
- 网页如何展示PPT文档
最近再做一个新项目,其中有一个难点,就是如何在网页上展示PPT,我网上找到了几种方法,但是真正符合我目前这个项目的就只有这一种方法了, 使用PowerPoint to Flash将ppt文 ...
- NuGet的使用、部署、搭建私有服务
NuGet的使用.部署.搭建私有服务 前言 什么是NuGet? 为什么要使用NuGet NuGet的优点 使用 Get-Help NuGet Install-Package Get-Package U ...
- (一)IDEA工具开第一个springboot应用之helloworld
(一)IDEA工具开第一个springboot应用之helloworld 一.前置知识 1.maven相关知识 2.spring注解 3.RESTful API 二.idea开发第一个springbo ...
- c#使用PortableDeviceApiLib读取便携式设备(WPD:Windows Portable Devices)信息
相关名词解释: WPD( Windows Portable Devices) 译作Windows 便携设备 (WPD) 是一种驱动程序技术,可支持广泛的可移动设备,比如移动电话.数码相机和便携媒体播放 ...