Android产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg(out/host/linux-x86/bin/)来打包。 在制作手机ROM时,有时会单独编译内核或抽出根文件进行修改内容,比如我只编译内核,其余的地方不变。这样重新安装巨大的Android开发环境实在不划算。因此很多boot.img解包工具被人开发出来,这一些工具都是把内核和根文件系统从一个现成的boot.img抽取出来,修发后再次打包还原。一.常见的解包工具因为boot.img的格式比较简单,它主要分为三大块(有的可能有四块)因此很多人开发分析工具,有是linuxshell脚本,比如repack-zImage,也有人采用perl,还有C语言编写的unbootimg, 我使用的是在源码位置system/core/mkbootimg/下的mkbootimg。为了简化,蓝点工坊把与mkbootimg中打包工具和解包工具以及所包含的libmincrpty库抽出来,并且重写一个Makefile,作为开源项目。使用者只需要在linux(需安装gcc,make,一般是标配)或windows(需要安装mingw)的命令行执行make,即可产生可执行文件mkbootimg,unpackbootimg。二.解/打包工具使用解包工具:unpackbootimg常见格式 unpackbootimg-i.\tmp\boot.img-o.\out 这一句命令行表示把boot.img解包,所有文件输出到out目录下它会解压出如下文件:boot.img-zImage(内核文件)boot.img-ramdisk.gz(根文件系统打包文件) boot.img-cmdline(mkbootimgcmdline参数) boot.img-pagesize(mkbootimgpagesize参数) boot.img-base(mkbootimgbase参数)打包工具:mkbootimg(Android自带)常见的命令格式: ./mkbootimg --cmdline'no_console_suspend=1console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img--base02e00000 这句含义是把内核文件zImage和boot目录下的根文件压缩包boot.img-ramdisk.gz打包成boot.img. 其中cmdline和base的值均来源于unpackbootimg的结果
1
boot映像并不是一个完整的文件系统,它是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。
2
/*
** +-----------------+
** | 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) ** 3. load each element (kernel, ramdisk, second) at ** the specified physical address (kernel_addr, etc) ** 4. prepare tags at tag_addr. kernel_args[] is ** appended to the kernel commandline in the tags. ** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr ** 6. if second_size != 0: jump to second_addr ** else: jump to kernel_addr */
ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件
看这里是不是显得头大呢,,,今天哥们分享的教程是比较简单的,不需要认识这些东西是做什么的,有什么用,。只需要要一个简单的工具就能实现你想要解包boot.img的问题。。。
3
下载一个ROM助手,百度搜索下就行,最好是官网下载,蘑菇论坛。
安装并打开它,在主界面上你会找到“解包IMG”功能的按钮,
4
点击后把你的boot镜像文件加载进去,等待几分钟,就能把boot的镜像解开了 ,,上面提示打开文件夹,点击之后,就能找到boot解开后的全部内容,在这里你想怎么编辑就怎么编辑。
看到木有boot解包就是这么简单,其实ROM助手还可以解包recovery 、userdara等镜像文件。只要用了就看到,步骤和上面的操作时一样的 。
5
K!好了,修改大家就自己去奋斗吧,其实说实话,安卓本来基于LINUX就是在那系统下玩的,用WINDOWS的就比较吃亏了。。截止目前ROM助手还没有打包功能,相信他们开发团队很快就能完善这项功能的说。我这里根据我的经验来分享下如何打包boot镜像文件,这里需要用命令符
开始-运行-cmdd:回车cd boot回车bootimg --repack-bootimg 0x200000 "mem=211M console=null androidboot.hardware=qcom" 2048 4096
出现“output boot.img”的字样就显示打包成功
6
到这里就完全打包解包无压力了,额,recovery userdara 解包打包,就直接按照这个操作步骤即可完成。
http://jingyan.baidu.com/article/86f4a73e60fb2937d65269f6.html
仅供参考