设为首页收藏本站

移动叔叔

搜索
查看: 5845|回复: 55

[教程] boot.img文件的解包/打包/工具/献给需要的人

[复制链接]
发表于 2015-8-24 19:01:57 | 显示全部楼层 |阅读模式
                                              来源于    gl_jiang@126


Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。


Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg(out/host/linux-x86/bin/)来打包。

在制作手机ROM时,有时会单独编译内核或抽出根文件进行修改内容,比如我只编译内核,其余的地方不变。这样重新安装巨大的Android开发环境实在不划算。因此很多boot.img解包工具被人开发出来,这一些工具都是把内核和根文件系统从一个现成的boot.img抽取出来,修发后再次打包还原。


一.常见的解包工具
因为boot.img的格式比较简单,它主要分为三大块(有的可能有四块)


+—————–+
| boot header | 1 page
+—————–+
| kernel | n pages
+—————–+
| ramdisk | m pages
+—————–+
| second stage | o pages
+—————–+
n = (kernel_size + page_size – 1) / page_size
m = (ramdisk_size + page_size – 1) / page_size
o = (second_size + page_size – 1) / page_size
0. all entities are page_size aligned in flash
1. kernel and ramdisk are required (size != 0)
2. second is optional (second_size == 0 -> no second)
因此很多人开发分析工具,有是linux shell脚本,比如repack-zImage,也有人采用perl,还有C语言编写的 unbootimg,



我使用的是在源码位置system/core/mkbootimg/ 下的 mkbootimg。为了简化,蓝点工坊把与mkbootimg中打包工具和解包工具以及所包含的libmincrpty库抽出来,并且重写一个Makefile,作为开源项目。
使用者只需要在linux(需安装gcc,make,一般是标配)或windows(需要安装mingw)的命令行执行make,即可产生可执行文件 mkbootimg ,unpackbootimg。


二.解/打包工具使用
解包工具:unpackbootimg


usage: unpackbootimg
-i|–input boot.img
[ -o|--output output_directory]
[ -p|--pagesize ]
常见格式
unpackbootimg -i .\tmp\boot.img -o .\out

这一句命令行表示把boot.img解包,所有文件输出到out目录下


它会解压出如下文件:

boot.img-zImage (内核文件)

boot.img-ramdisk.gz (根文件系统打包文件)
boot.img-cmdline (mkbootimg cmdline参数)
boot.img-pagesize (mkbootimg pagesize参数)

boot.img-base (mkbootimg base参数)


打包工具:mkbootimg (Android自带)
H:\ttt>mkbootimg.exe
error: no output filename specified
usage: mkbootimg
--kernel <filename>
--ramdisk <filename>
[ --second <2ndbootloader-filename> ]
[ --cmdline <kernel-commandline> ]
[ --board <boardname> ]
[ --base <address> ]
[ --pagesize <pagesize> ]
-o|--output <filename>
常见的命令格式:
./mkbootimg--cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
这句含义是把内核文件zImage和boot目录下的根文件压缩包 boot.img-ramdisk.gz打包成boot.img.
其中cmdline和base的值均来源于unpackbootimg的结果


需要工具:
  • unpackbootimg        百度网盘:
    游客,如果您要查看本帖隐藏内容请回复
  • repack-bootimg.pl    百度网盘:
    游客,如果您要查看本帖隐藏内容请回复



发表于 2015-8-24 22:08:04 来自手机版 | 显示全部楼层
强贴必须强顶啊

 

回复

使用道具 举报

发表于 2015-8-24 20:11:25 | 显示全部楼层
我也想解包boot 可惜没看懂

 

回复

使用道具 举报

发表于 2015-8-24 21:46:31 来自手机版 | 显示全部楼层
谢谢分享

 

回复

使用道具 举报

发表于 2015-8-24 19:27:29 来自手机版 | 显示全部楼层
支持顶起

 

回复

使用道具 举报

发表于 2015-8-24 22:40:52 来自手机版 | 显示全部楼层
真不错,正需要!

 

回复

使用道具 举报

发表于 2015-8-24 22:15:15 | 显示全部楼层
好东西啊,谢谢楼主分享

 

回复

使用道具 举报

发表于 2015-8-25 11:15:48 来自手机版 | 显示全部楼层
。。。。。

 

回复

使用道具 举报

发表于 2015-8-25 12:27:35 来自手机版 | 显示全部楼层
虽然看不懂,但顶大神

 

回复

使用道具 举报

发表于 2015-8-25 21:19:44 来自手机版 | 显示全部楼层
你确定可以用吗?mtk 在boot.img添加了特殊代码,直接打包估计没法开机

 

回复

使用道具 举报

发表于 2015-8-27 21:45:47 来自手机版 | 显示全部楼层
ghghjjjk

 

回复

使用道具 举报

发表于 2015-8-27 21:52:59 来自手机版 | 显示全部楼层
兔兔我做最做最

 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

© 2008-2018 移动叔叔. 版权所有,专业的网络售后平台 ( 黔ICP备14003359号-1 )

商务合作点击这里给我发消息|Email:service@mobileuncle.com|手机版|Archiver|移动叔叔     

GMT+8, 2018-10-17 17:41 , Processed in 0.298966 second(s), 12 queries , Gzip On, Memcache On.

返回顶部