boot.img linux,Android boot.img 结构-深圳网站优化推广公司

boot.img linux,Android boot.img 结构

Android 的boot.img 包括 boot header,kernel, ramdisk

首先来看看Makefile是如何产生我们的boot.img的:

boot镜像不是普通意义上的文件系统,而是一种特殊的Android定制格式,由boot header,压缩的内核,ramdisk以及second stage loader(可选)组成,可以从mkbootimg.h文件中看到。

boot,img文件跳过4k的文件头之后,包括两个 gz包,一个是boot.img-kernel.gz:Linux内核,一个是boot.img-ramdisk.cpio.gz

大概的组成结构如下

*** +-----------------+

** | boot header     | 1 page

** +-----------------+

** | kernel              | n pages

** +-----------------+

** | ramdisk           | m pages

** +-----------------+

** | second stage    | o pages

** +-----------------+

boot header为包括命令行参数等等,地址为000-----0xFFF

ramdisk为 1F8B0800000000开头

kernel为 0000A0E1 重复8遍开头

关于boot header这个数据结构我们需要重点注意,在这里我们关注其中几个比较重要的值,这些值定义在boot/boardconfig.h里面,不同的芯片对应vendor下不同的boardconfig,在这里我们的值分别是(分别是kernel/ramdis/tags载入ram的物理地址):

#define PHYSICAL_DRAM_BASE   0x00200000

#define KERNEL_ADDR          (PHYSICAL_DRAM_BASE + 0x00008000)

#define RAMDISK_ADDR         (PHYSICAL_DRAM_BASE + 0x01000000)

#define TAGS_ADDR            (PHYSICAL_DRAM_BASE + 0x00000100)

#define NEWTAGS_ADDR         (PHYSICAL_DRAM_BASE + 0x00004000)

上面这些值分别和我们开篇时候提到的那几个名词相对应,比如kernel_addr就是ZTEXTADDR,RAMDISK_ADDR就是INITRD_PHYS,而TAGS_ADDR就是PARAMS_PHYS。bootloader会从boot.img的分区中将kernel和ramdisk分别读入RAM上面定义的地址中,然后就会跳到ZTEXTADDR开始执行。

ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。以下是一个典型的ramdisk中包含的文件列表:./init.trout.rc

./default.prop

./proc

./dev

./init.rc

./init

./sys

./init.goldfish.rc

./sbin

./sbin/adbd

./system

./data

如果要分离可以用winhex将boot。img打开

找到0000A0E1 到1F8B0800000000的前面的数据块保持为ramdisk.img

找到1F8B0800000000到文件尾部的数据块保持为kernel

out/host/linux-x86/bin/mkbootimg  --kernel out/target/product/msm7630_surf/kernel --ramdisk out/target/product/msm7630_surf/ramdisk.img --cmdline "console=ttyMSM1,115200n8 androidboot.hardware=qcom" --base 0x00200000 --pagesize 4096 --output out/target/product/msm7630_surf/boot.img

根据上面的命令我们可以首先看看mkbootimg 这个工具的源文件:system/core/mkbootimg.c。看完之后我们就能很清晰地看到boot.img的内部构造,它是由boot header /kernel  /ramdisk /second stage构成的,其中前3项是必须的,最后一项是可选的。

header + padding + kernel + padding + ramdisk + padding + ...

4 * 2, magic,固定为"ANDROID!"

4 * 1, kernel长度,小端unsigned

4 * 1, kernel地址,应为base + 0x00008000 (base为0x200000)

4 * 1, ramdisk长度,小端unsigned

4 * 1, ramdisk地址,应为base + 0x01000000

4 * 1, second stage长度,小端unsigned,为0

4 * 1, second stage地址,应为base + 0x00f00000

4 * 1, tags地址,应为base + 0x00000100

4 * 1, page大小,小端unsigned, 为2048或者4096

4 * 2, 未使用,固定为0x00

4 * 4, 板子名字,一般为空

4 * 128, 内核命令参数,为mem=211M console=ttyMSM2,115200n8 androidboot.hardware=qcom console=ttyUSBCONSOLE0 androidboot.console=ttyUSBCONSOLE0

4 * 8, id, 为sha之类,实际写0x00就可

padding, 以上header为608字节,把这部分补齐到page_size * 2大小

kernel_size, kernel内容

padding,把kernel_size补齐到page_size * 2

ramdisk_size, ramdisk内容

padding, 把ramdisk补齐到page_size * 2

second_size, second内容,一般为0

padding, 补齐second_sise为page_size,一般为0

配合 boot.img 来看会比较好理解.

faec2cf7cbed05784ecea907737a4217.gif

由此可知boot_img_hdr中各成员值为:

84678bfa447bb4357285ae9ec99d743f.gif

ff229a45d8952b233266aa295354cc5c.gif

TAGS_ADDR 如上 target//rules.mk 所定义的 : 0x40200100,所以 boot_linux(), 就是传入TAGS_ADDR,

然后将资料写入 tag, tag 的结构如下所示.

2f722125baf4b0cb379b1009b5c9c4aa.gif

然后进入到 kernel 的入口函数: entry(0, machtype, tags)0b1331709591d260c1c78e86d0c51c18.png

猎豹白嘉丽 CSDN认证博客专家 CSDN认证企业博客
码龄7年 暂无认证
93
原创
-
周排名
24万+
总排名
12万+
访问
等级
50
积分
17
粉丝
15
获赞
0
评论
92
收藏
私信
为什么被折叠? 到【灌水乐园】发言
前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

相关内容推荐

江东区网站制作公司视频打赏制作网站靖江外贸网站制作如何收费闵行高端定制网站制作公司山东网站制作团队泉州网站制作更改网站制作公司如何收费无锡网站制作网站象山视频网站制作节目的有哪些宁夏网站首页制作市南区网站制作东阳淘宝店铺网站如何制作济南机械类网站制作公司保险行业杭州网站制作报价制作辉县网站便便玩玩在线制作网站神农架营销型网站制作华人网站制作书签现在制作一个网站需要什么东西象山学网站制作需要哪些语言梅县租房网站制作景洪响应式网站制作制作网站前端用什么语言惠州微网站制作网站制作合同如何签订外推软件怎么制作网站利用weebly制作网站网站制作消息弹窗窗口伊宁响应式网站制作福州 网站制作公司制作视频的资源网站宾阳网站制作同城相亲网站怎么制作微博动图制作网站果洛企业网站开发制作主机屋制作网站操作步骤弹窗坑人网站怎么制作涧西网站制作哪里有达芙妮网站制作冰淇淋英文游戏币网站制作学生社团网站制作php制作网站留言板延庆网站制作企业网站乐山网站后台制作有什么可以学ppt制作的网站益阳网站制作公司推荐如何建设公司网站专业制作团队象山企业网站制作好吗制作网站上添加微信二维码汕头专门网站制作上海网站制作慕枫制作网站软件手机app影院网站制作起泡企业静态网站制作报告周渝民电影网站制作灯饰灯具网站制作网站制作有哪些职业网站导航下拉菜单怎样制作的中关村图书大厦网站制作聊城摄影网站制作象山报名网站制作包括哪些方面模特卡免费制作网站大型网站制作设计东坑网站制作哪些好中堂网站制作哪儿好网站制作素材关于音乐复兴区网站制作网站制作甲方、乙方权利义务吴江免费网站制作海南动漫网站制作北京网站制作专业福建网站网页制作公司短连接制作网站用友网站制作书签网站制作导航分隔符南昌哪里有网站制作兰蔻网站制作美食如何制作网站首页效果图通知制作网站定兴网站制作公司连环画网站制作贴纸网站都是在哪里制作的旅行网站制作壁纸网站制作费用甄选乐云践新武汉 光谷 制作网站林业网站制作起泡我的世界很火的壁纸制作网站外贸网站 制作奎文区英文网站制作哪家靠谱一搜同志网站制作乐乐南方网站制作壁纸模型网站制作雪糕唐山酒店行业的网站制作app的源码可以制作网站吗朔州网站制作设计nginx网站制作安庆网站制作费用静态网站后台怎么制作武宁制作网站seo怎么制作网站鬼网站制作壁纸玉溪网站建设制作B站封面制作网站工商网站制作手工免费钓鱼网站制作杂志网站制作表格财务简历制作网站广东肇庆专业网站制作制作招募海报网站兰州东方制作网站西宁市网站建设制作服务海宁旅行网站如何制作廊坊网站制作小玩具收纳怎样制作网站认证手机主题制作网站oxiu电影网站如何制作讲解视频客车网站制作视频网站设计制作价钱低普陀区网站制作技巧中山专门网站制作如何制作一个公司网站视频制作网站模板需要什么基础京山租房网站制作桦甸网站制作与推广扬州专业seo网站制作费用制作架空地图网站桌面壁纸网站制作雪糕梁平官方网站制作费用做网站制作哪家可靠制作数据网站烟台网站制作计划太阳能促销录音制作网站315网站制作贴纸适合大学生自己制作的网站大学生制作网站西安制作网站排名日照电脑网站制作公司丰县网站推广制作自己怎么制作刷业务的网站知名网站制作蛋糕井陉网站建设制作多少钱哪里有小报制作网站网站制作教学+百度云门头沟网站制作平台霍山租房网站制作果敢网站制作贴纸网站二维码制作价格怎样制作网站设计图小说微信网站制作廊坊中高端网站制作灵宝网站制作价格12306网站制作奶茶兖州网站制作源码什么在线网站可以制作技术路线图北青旅网站制作表格国内培训行业网站制作制作公司网站_价格日照电脑网站制作公司专业网站制作仪表合生元网站制作手工用友网站制作书签胶州制作网站生化电影网站制作昌平制作网站吴江网站制作价格龙泉网站制作教程制作弹幕网站多少钱如何制作链接自己网站的app网站地图制作干花教程平安租房网站制作宁波制作电子文书网站制作网站实训设计要求css网站头部制作保定网站制作计划seo制作网站优化买药网站制作冰淇淋片片网站制作雪糕网站效果图制作表情包的软件网站制作服务费用南昌 网站制作网站制作要注意哪些ff14头像制作网站吴江专业网站制作网站江苏网站建设制作有什么方案网站制作分辨率像素交易便民信息网怎么制作网站类似知乎的网站如何制作吉林市制作网站公司制作小型网站多少钱武汉网站制作内容优化佛山智能网站制作服务图片贺卡制作网站乐平网站制作方案临海个人制作的网站如何上线资兴外贸网站制作推广附近网站制作价格南京营销型网站制作公司制作小网站免费资深的食品行业网站制作如何制作网站右侧悬浮二维码

合作伙伴

深圳网站优化推广公司

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统

>