几种解包/打包启动镜像boot.img的方法(bootimg.exe,unpackbootimg, unmkbootimg,split_bootimg,obooting)

这几种方法都适用于android的boot.img解/打包

几个重要的打包时用到的参数:

  • base
  • cmdline
  • page_size
  • padding_size

一、bootimg.exe(推荐)

用法说明:

C:\tmp\mstar-bin-tool-master\unpacked\ee\ramdisk2>bootimg.exe -h
bootimg:
        Modified:cofface@gmail.com
supported arguments:
        --add-head
        --cml
        --cpio-list
        --czlib
        --dml
        --dzlib
        --remove-head
        --repack-565
        --repack-bootimg
        --repack-ramdisk
        --repack-rle
        --repack-zte-bin
        --rml
        --to-ext4
        --to-img
        --uml
        --unpack-565
        --unpack-bootimg
        --unpack-qsb
        --unpack-ramdisk
        --unpack-rle
        --unpack-updata
        --unpack-yafffs
        --unpack-yaffs
        --unpack-yaffs2
        --unpack-zte-bin

解包:

命令: bootimg.exe --unpack-bootimg
将boot.img与bootimg.exe置于同一目录下
如果要解包recovery.img,则先将recovery.img更名为boot.img

C:\tmp\mstar-bin-tool-master\unpacked\ee\ramdisk2>bootimg.exe --unpack-bootimg
arguments: [bootimg file]
bootimg file: boot.img
output: kernel[.gz] ramdisk[.gz] second[.gz]
base: 0x10000000
ramdisk_addr: 0x11000000
second_addr: 0x10f00000
tags_addr: 0x10000100
page_size: 2048
name: "27"
cmdline: "product.version=PD1304BT_A_1.10.0"
padding_size=2048
arguments: [ramdisk file] [directory]
ramdisk file: ramdisk
directory: initrd
output: cpiolist.txt
Found mtk magic, skip header.
Found header name ROOTFS
compress: True

共生产了4个新的文件或文件夹:
bootinfo.txt, kernel, initrd, cpiolist.txt, ramdisk
其中initrd和cpiolist.txt是ramdisk解包/解压后得到的
(把initrd和cpiolist.txt先用cpio备份,然后gzip压缩得到ramdisk)
在这里插入图片描述
修改:
通常修改权限时修改default.prop 、init.rc即可
(ro.secure=0 ,ro.debuggable=1 )
我们在initrd目录下增加一个测试文件jwjtest.txt
在这里插入图片描述
修改cpiolist.txt:
在最后加入一行:file jwjtest.txt initrd/jwjtest.txt 0750
在这里插入图片描述
打包:
命令格式 bootimg --repack-bootimg base cmdline page_size padding_size
命令:
bootimg --repack-bootimg 0x10000000 “product.version=PD1304BT_A_1.10.0” 2048 2048

C:\tmp\mstar-bin-tool-master\unpacked\ee\ramdisk2>bootimg --repack-bootimg 0x10000000 "product.version=PD1304BT_A_1.10.0" 2048 2048
arguments: [cpiolist file]
cpiolist file: cpiolist.txt
output: ramdisk.cpio.gz
compress_level: 6
mtk mode
arguments: [base] [cmdline] [page_size] [padding_size]
kernel: kernel
ramdisk: ramdisk.cpio.gz
second:
dt_image:
base: 0x10000000
ramdisk_addr: 0x11000000
second_addr: 0x10f00000
tags_addr: 0x10000100
name: 27
cmdline: product.version=PD1304BT_A_1.10.0
page_size: 2048
padding_size: 2048
output: boot-new.img

结果:
在这里插入图片描述

二、unpackbootimg

先在github或gitee上下载源码,然后linux下编译(make)
用法说明 :

usage: unpackbootimg
	-i|--input boot.img
	[ -o|--output output_directory]
	[ -p|--pagesize <size-in-hexadecimal> ]

解包:
命令:…/unpackbootimg -i ./boot-andr.img

biren@ubuntu:~/Downloads/android-unpackbootimg/jwj$ ../unpackbootimg -i ./boot-andr.img 
BOARD_KERNEL_CMDLINE product.version=PD1304BT_A_1.10.0
BOARD_KERNEL_BASE 10000000
BOARD_NAME 27
BOARD_PAGE_SIZE 2048
BOARD_HASH_TYPE sha1
BOARD_KERNEL_OFFSET 00008000
BOARD_RAMDISK_OFFSET 01000000
BOARD_SECOND_OFFSET 00f00000
BOARD_TAGS_OFFSET 00000100

解包后的文件:

$ ls
boot-andr.img          boot-andr.img-kerneloff   boot-andr.img-tagsoff
boot-andr.img-base     boot-andr.img-pagesize    boot-andr.img-zImage
boot-andr.img-board    boot-andr.img-ramdisk.gz  
boot-andr.img-cmdline  boot-andr.img-ramdiskoff
boot-andr.img-hash     boot-andr.img-secondoff

打包:
用mkbootimg,与下同。

三、unmkbootimg

先在github或gitee上下载源码,然后linux下编译(make)
用法说明:

Usage: ./bin/unmkbootimg [OPTIONS] <src>

Extracts the kernel, ramdisk, and second-stage bootloader from the
provided Android boot image, and outputs them to the same directory.
Furthermore, this also creates a remake script that recombines these
extracted images into newboot.img, by running mkbootimg with the
parameters extracted from the original image header of src.

OPTIONS:
	<src>: The source Android boot image file to extract from.
	-d <destDir>: Output extracted images here instead.
	-v: Verbose.
	-i: Print header information only, then exit.
	-r <remakeScript>: Save the remake script using this filename
		instead.
	-m <mkbootimgCmd>: Use this command in the remake script for
		mkbootimg instead.
	-n <newBootImgName>: Direct the remake script to output the
		remade boot image using this filename instead, rather than
		newboot.img.

解包:
命令:unmkbootimg ./boot-andr.img

android-unmkbootimg-master/jwj$ ../bin/unmkbootimg ./boot-andr.img 

注意:被解包的boot-andr.img前一定要有**./(点和斜杠)**
否则会出现如下错误 :

android-unmkbootimg-master/jwj$ ../bin/unmkbootimg boot-andr.img 
Error in changeDir(): Failed to create directory "". No such file or directory

解包后文件:

biren@ubuntu:~/Downloads/android-unmkbootimg-master/jwj$ ls -l
total 14436
-rwxrw-rw- 1 biren biren 6291456 Dec  3  2014 boot-andr.img
-rw-rw-r-- 1 biren biren 4113352 May 18 20:26 kernel.img
-rw-rw-r-- 1 biren biren  682322 May 18 20:26 ramdisk.img
-rwxr-x--- 1 biren biren     370 May 18 20:26 remkbootimg.sh

remkbootimg.sh内容:

#!/bin/sh
mkbootimg \
 --kernel "kernel.img" \
 --ramdisk "ramdisk.img" \
 --cmdline "product.version=PD1304BT_A_1.10.0"\
 --base 0 \
 --kernel_offset 0x10008000 \
 --ramdisk_offset 0x11000000 \
 --second_offset 0x10f00000 \
 --os_version "0.0.0" \
 --os_patch_level "2000-00-01" \
 --tags_offset 0x10000100 \
 --board "27" \
 --pagesize 0x800 \
 --output "newboot.img"

其中的base地址与上面的不一样,据说不指定base好像也没问题。

四、解包split_bootimg.pl, 打包mkbootimg

解包:
命令:./split_bootimg.pl boot.img

$ ls
boot.img   mkbootfs  mkbootimg  split_bootimg.pl

$ ./split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 4113352 (0x003ec3c8)
Ramdisk size: 682322 (0x000a6952)
Second size: 0 (0x00000000)
Board name: 27
Command line: product.version=PD1304BT_A_1.10.0
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.

多了2个文件:boot.img-kernel , boot.img-ramdisk.gz
打包:
mkbootimg用法说明 :

biren@ubuntu:~/downloads$ ./mkbootimg --help
usage: mkbootimg
       --kernel <filename>
       --ramdisk <filename>
       [ --second <2ndbootloader-filename> ]
       [ --cmdline <kernel-commandline> ]
       [ --board <boardname> ]
       [ --base <address> ]
       [ --pagesize <pagesize> ]
       [ --ramdisk_offset <address> ]
       [ --dt <filename> ]
       -o|--output <filename>

命令:mkbootimg --kernel boot.img-kernel --ramdisk newramdisk.gz -o boot-new.img

$ ./mkbootimg --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz --cmdline "product.version=PD1304BT_A_1.10.0" --base 0x10000000 --pagesize 2048  -o boot-new.img

五、abootimg(推荐)

先安装2个包:build-essential abootimg

$ sudo apt-get install build-essential abootimg

用法说明:

$ abootimg -h
 abootimg - manipulate Android Boot Images.
 (c) 2010-2011 Gilles Grandou <gilles@grandou.net> 0.6

 abootimg [-h]
      print usage
 abootimg -i <bootimg>
      print boot image information
 abootimg -x <bootimg> [<bootimg.cfg> [<kernel> [<ramdisk> [<secondstage>]]]]
      extract objects from boot image:
      - config file (default name bootimg.cfg)
      - kernel image (default name zImage)
      - ramdisk image (default name initrd.img)
      - second stage image (default name stage2.img)
 abootimg -u <bootimg> [-c "param=value"] [-f <bootimg.cfg>] [-k <kernel>] [-r <ramdisk>] [-s <secondstage>]
      update a current boot image with objects given in command line
      - header informations given in arguments (several can be provided)
      - header informations given in config file
      - kernel image
      - ramdisk image
      - second stage image

      bootimg has to be valid Android Boot Image, or the update will abort.

 abootimg --create <bootimg> [-c "param=value"] [-f <bootimg.cfg>] -k <kernel> -r <ramdisk> [-s <secondstage>]
      create a new image from scratch.
      if the boot image file is a block device, sanity check will be performed to avoid overwriting a existing
      filesystem.

      argurments are the same than for -u.
      kernel and ramdisk are mandatory.

查boot.img配置信息:

$ abootimg -i boot-andr.img 

Android Boot Image Info:
* file name = boot-andr.img 
* image size = 6291456 bytes (6.00 MB)
  page size  = 2048 bytes
* Boot Name = "27"
* kernel size       = 4113352 bytes (3.92 MB)
  ramdisk size      = 682322 bytes (0.65 MB)
* load addresses:
  kernel:       0x10008000
  ramdisk:      0x11000000
  tags:         0x10000100
* cmdline = product.version=PD1304BT_A_1.10.0
* id = 0xac3936a1 0xba4262b4 0x71b59f89 0xdee58c3a 0x2ce40488 0x00000000 0x00000000 0x00000000 

当然这些信息在解包后的bootimg.cfg文件中也有
解包:
命令:abootimg -x boot-andr.img

$ abootimg -x boot-andr.img 
writing boot image config in bootimg.cfg
extracting kernel in zImage
extracting ramdisk in initrd.img

这里的zlmage是kernel
initrd.img是ramdisk
打包:
命令:abootimg --create …

$ abootimg --create newboot.img -f bootimg.cfg -k zImage -r initrd.img
  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android系统的boot.img文件是Android固件中的一个重要部分,它包含了Android系统的内核和一些初始化脚本等文件。解包打包boot.img文件是进行Android固件定制或修改的重要步骤之一。 在解包打包boot.img文件时,可以使用一些工具集来辅助完成。以下是一些常用的工具集: 1. Android Kitchen:这是一个基于Linux系统的命令行工具集,可以用来解包打包boot.img文件。它提供了一系列的命令,如unpackbootimg用于解包boot.img,mkbootimg用于打包boot.img。使用Android Kitchen工具集需要一些基本的Linux命令行操作知识。 2. Magisk Manager:这是一个通用的Android系统修改工具,其中包含了解包打包boot.img文件的功能。Magisk Manager可以通过安装Magisk框架来实现对Android系统的修改,并且提供了可视化的操作界面,方便用户进行boot.img解包打包操作。 3. Android Image Kitchen:这是另一个基于Linux系统的命令行工具集,用于解包打包Android系统的映像文件,包括boot.img文件。Android Image Kitchen提供了一系列的命令,如unpackimg用于解包boot.img,repackimg用于打包boot.img。 除了上述工具集外,还有一些第三方的GUI工具可供使用,如Magisk Manager中提供的可视化操作界面,以及一些名为"bootimage-tools"的工具集。 总之,解包打包boot.img文件是进行Android固件定制或修改的重要环节之一,可以通过一些命令行工具集,如Android Kitchen、Android Image Kitchen等,或者一些GUI工具,如Magisk Manager等,来实现这一操作。这些工具集提供了相应的命令或操作界面,方便用户进行boot.img解包打包操作。 ### 回答2: Android boot.img解包打包工具集是用于对Android系统中的boot.img文件进行解包打包操作的一组工具集。 解包工具集包括: 1. binwalk:可以用于识别和提取boot.img文件中的各种结构和组件。 2. Unpackbootimg:可以将boot.img文件解包为ramdisk.img、kernel和cmdline等组成部分。 3. mkbootimg:可以重新打包解包后的ramdisk.img、kernel和cmdline等组成部分为新的boot.img文件。 4. Android Image Kitchen:可以提取和重新打包boot.img文件中的各种文件、分区和可执行程序。 5. Bootimg-tools:提供了一系列工具来处理boot.img文件,包括解包、打印信息、拆分和合并等操作。 使用这些工具集,可以将boot.img文件解包为其包含的ramdisk、kernel和cmdline等文件,可以对这些文件进行修改和定制。然后可以使用mkbootimg或Android Image Kitchen将修改后的文件重新打包为新的boot.img文件。这样,就可以实现对Android系统启动过程中的各种配置和组件进行修改和定制。 这些工具集对于Android系统开发和定制非常有用,可以帮助开发者理解和修改Android系统的启动过程,同时也可以帮助厂商和用户改变和优化系统的启动行为。然而,由于涉及到系统底层,使用这些工具集需要谨慎操作,避免对系统造成损害。 ### 回答3: Android的boot.img是一个包含了Linux内核和设备树的镜像文件,用于引导Android设备的启动过程。解包打包boot.img需要使用一些专门的工具集。 解包boot.img的工具集主要包括以下几个工具: 1. mkbootimg工具:用于解析和生成Android boot.img文件,可以从boot.img中提取出内核、ramdisk、cmdline等信息。 2. unmkbootimg工具:用于解包boot.img文件,将其中的内核、ramdisk、cmdline等内容提取出来。可以使用该工具将boot.img解包boot.img-zImage(内核文件)、boot.img-ramdisk.gz(ramdisk文件)等。 3. simg2img工具:用于将boot.img中的system.img(系统分区镜像解包为ext4格式的文件系统,以便进行修改和查看。 4. mkdtimg工具:用于打包设备树文件,依赖于设备树编译工具,可以将设备树编译成设备树二进制文件(.dtb)后再使用mkdtimg打包成dt.img 文件,然后将dt.img文件与之前解包得到的zImage、ramdisk等文件一起打包为新的boot.img打包boot.img的工具集主要包括以下几个工具: 1. mkbootimg工具:用于生成新的boot.img文件,需要提供新的zImage(内核文件)、ramdisk(ramdisk文件)、cmdline等参数。 2. mkdtimg工具:用于打包设备树文件,将设备树二进制文件(.dtb)打包为dt.img文件,然后将dt.img文件与zImage、ramdisk等文件一起打包为新的boot.img。 以上是Android boot.img解包打包工具集的一些介绍。需要注意的是,操作boot.img需要一定的技术知识和经验,不当的操作可能导致设备变砖或无法正常启动,因此使用前请谨慎,并在了解清楚操作步骤后进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中微中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值