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

--ramdisk

[ --second <2ndbootloader-filename> ]

[ --cmdline ]

[ --board ]

[ --base

]

[ --pagesize ]

-o|--output

常见的命令格式:

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

binwalk 提取bootimg_boot.img的解包与打包相关推荐

  1. 记一次修改DiyBox的经历(openwrt固件解包与打包)

    吐槽几句 做技术的有无私造福人类的,也有耍流氓坑人的.说的不是DiyBox,而是"信利".信利就是一家犯贱.祸害大学生.助纣为虐的流氓公司,其所谓的"防私接"技 ...

  2. 使用apktool解包和打包apk

    使用apktool解包和打包apk 下载apktool工具 解包 apktool d xxx.apk -f 植入代码 使用apktool解包要植入代码的apk(以下称为A), 使用apktool解包包 ...

  3. firmware linux 解包_路由器固件的解包与打包

    路由器固件的解包与打包 一.概述 当前大学生都被校园网的客户端困扰, 然而南京工程学院公布了 Linux 客户度解决方案, 或 者 Mentohust 解决方案, 可以在 Ubuntu 系统的计算机上 ...

  4. linux 解包与打包

    解包: tar xvf FileName.tar打包: tar cvf FileName.tar DirName

  5. apktool解包和打包apk

    下载apktool工具 解包 apktool d xxx.apk -f 或者 java -jar apktools.jar decode xxx.apk 植入代码 修改smali代码 重新打包 apk ...

  6. 如何查看apk安装包源代码??Android反编译apk,解包,打包,签名一体化实测 ,修改图片音频软件名称版本号等入门

    首先下载反编译工具包 下载地址 链接:  https://zly520.lanzoui.com/ibtuxhf7rab 一.反编译工具介绍 首先 如果你想改动图片音频之类的,见末尾! 1.apktoo ...

  7. python解包exe_Pyinstaller打包的EXE之解包

    1.EXE解包为文件 把pyinstxtractor.py和exe文件放在同个目录下 python pyinstxtractor.py xx.exe pyinstxtractor.py 内容--下载的 ...

  8. c语言 udp 解包_UDP打包及解包问题

    UDP打包及解包问题 (2012-04-11 00:12:39) 标签: 打包 包 杂谈 UDP打包及解包问题第一个问题: 想问下在VC++开发平台下,是否提供了UDP协议打包和解包的接口函数?通常所 ...

  9. 破解卡米 刷机包(ROM)的解包与打包过程

    解决:系统删除系统自带应用(以及改官方刷机包)不开机问题. 环境:Ubuntu,Python,Java: $ python3 --version Python 3.8.5$ java --versio ...

最新文章

  1. 简单JS实现走马灯效果的文字(无需jQuery)
  2. oracle中导出的sql文件转入mysql中的工作记录
  3. 【NLP】使用Google的T5提取文本特征
  4. Resource接口,及资源
  5. SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题
  6. python字符串创建_在Python上创建完整的字符串
  7. initrd的启动过程
  8. 三十七、【获取相机权限】
  9. Win10怎么把登录密码去掉
  10. 导数、偏导数、梯度、方向导数、梯度下降、二阶导数、二阶方向导数
  11. 蒟蒻的笔记本二、tarjan
  12. Codeforces Round #362 (Div. 2) B 模拟
  13. 关于柔性显示器工作原理及发展前景的探究
  14. mac系统下,vm虚拟机打不开/dev/vmmon,如何解决?
  15. 软著代办一般需要多少钱?
  16. 买蓝牙耳机什么牌子好用?国产蓝牙耳机十大排名
  17. virtualbox虚拟机窗口大小调整
  18. 英语自我介绍资料及范文
  19. Mongoose disconnected. Mongoose connection error: MongoError: Authentication failed. (node:1532) Unh
  20. IDEA中DEBUG时断点变成灰色

热门文章

  1. oracle rman备份 归档模式,Oracle RMAN备份归档与非归档模式
  2. 乐橙等待登录返回超时_等待登录返回超时什么意思
  3. epoll哪些触发模式_epoll的内部实现 百万级别句柄监听 lt和et模式非常好的解释...
  4. android 条码扫描控件,Android Zxing条码扫描自定义控件(附代码)
  5. springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
  6. Kotlin入门(28)Application单例化
  7. Android开发笔记(一百零一)滑出式菜单
  8. apimodel 可以重复吗_Web API是否需要有ViewModels层类?
  9. spring 相关框架面试题
  10. 使用git上传项目到github