Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为bootimg,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。
Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg(out/host/linux-x86/bin/)来打包。
在制作手机ROM时,有时会单独编译内核或抽出根文件进行修改内容,比如我只编译内核,其余的地方不变。这样重新安装巨大的Android开发环境实在不划算。因此很多bootimg解包工具被人开发出来,这一些工具都是把内核和根文件系统从一个现成的bootimg抽取出来,修发后再次打包还原。
一常见的解包工具
因为bootimg的格式比较简单,它主要分为三大块(有的可能有四块)
因此很多人开发分析工具,有是linux shell脚本,比如repack-zImage,也有人采用perl,还有C语言编写的 unbootimg,
我使用的是在源码位置system/core/mkbootimg/ 下的 mkbootimg。为了简化,蓝点工坊把与mkbootimg中打包工具和解包工具以及所包含的libmincrpty库抽出来,并且重写一个Makefile,作为开源项目。
使用者只需要在linux(需安装gcc,make,一般是标配)或windows(需要安装mingw)的命令行执行make,即可产生可执行文件mkbootimg ,unpackbootimg。
二解/打包工具使用
解包工具:unpackbootimg
常见格式
unpackbootimg -i \tmp\bootimg -o \out
这一句命令行表示把bootimg解包,所有文件输出到out目录下
它会解压出如下文件:
bootimg-zImage (内核文件)
bootimg-ramdiskgz (根文件系统打包文件)
bootimg-cmdline (mkbootimg cmdline参数)
bootimg-pagesize (mkbootimg pagesize参数)
bootimg-base (mkbootimg base参数)
打包工具:mkbootimg (Android自带)
常见的命令格式:
/mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/bootimg-ramdiskgz -o bootimg --base 02e00000
这句含义是把内核文件zImage和boot目录下的根文件压缩包 bootimg-ramdiskgz打包成bootimg
其中cmdline和base的值均来源于unpackbootimg的结果
1、 下载bootimgexe 放到D盘。
2、 把要提取的ROM包里的bootimg提取出来 放到bootimg文件夹目录。
3、 运行cmd系统命令,进入D: bootimg目录(D盘的话 先d: 然后再cd bootimg),接着输入bootimg --unpack-bootimg。 解开bootimg文件,得到kernel和ramdiskgz两个文件,ramdiskgz文件可以删除。
4、把kernel文件改名为zImage。
5、找一个老版本的内核文件包,然后用zImage、bcm4329ko分别替换老版本内核文件包中的同名文件, 路径是: kernel/zImage 和system/lib/modules。
6、老内核随便改什么名字。刷机包里面的META-INF里面是签名和刷机用的脚本什么的。com/google/android/ updater-script文件是刷机时显示的文字,用notepad打开,ui_print(" ")括号里面可以改成随意文字,然后关闭保存,再就是可以刷机进去了。
欢迎分享,转载请注明来源:品搜搜测评网