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的结果



更多相关文章

  1. Android文件系统的提取方法(一)
  2. Android发送邮件附带文件
  3. android的文件系统结构及其引导过程的初步理解
  4. Android中的文件权限操作
  5. Android Studio如何生成APK文件

随机推荐

  1. 【Android 开发入门】我为什么要在Androi
  2. Android(安卓)sqlite 使用框架
  3. Android Jetpack之CameraX使用
  4. 我的Android之旅——学习、项目、心态
  5. Android 定位不依赖三方sdk
  6. Google 正在悄悄解决 Android 的碎片化
  7. Android应用程序的开发
  8. Android(安卓)Studio Wear Demo
  9. Android(安卓)入门第四讲04-小结-Recycle
  10. Android小项目之十二 设置中心的界面