每次编译boot.img都要花比较长的时间,有时候只是更改其中的配置文件。

如果能够将boot.img解压,更改之后再打包的话,就能节省时间。

boot.img tools是别人写好的工具,能很好的解决boot.img解包的问题。

参考链接:

http://mtksupport.blogspot.ru/2015/07/tool-bootimg-tools-unpack-repack-ramdisk.html

https://forum.xda-developers.com/showthread.php?t=2319018

boot.img unpack

从上面的网址中下载boot.img tool。我下载的是bootimg_tools_7.8.13.zip。

解压之后会有如下几个文件。

tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ll -h
total 4.9M
drwxrwxr-x 3 tony tony 4.0K Feb 24 17:39 ./
drwxrwxr-x 11 tony tony 4.0K Feb 24 11:03 ../
-rwxrwxr-x 1 tony tony 5.0K Feb 24 11:03 boot_info* # 查看boot.img信息
-rwxrwxr-x 1 tony tony 28K Feb 24 11:03 mkbootimg* # 打包boot.img
-rwxrwxr-x 1 tony tony 371 Feb 24 11:03 repack_ramdisk* # 打包ramdisk
-rwxrwxr-x 1 tony tony 7.2K Feb 24 11:03 split_boot* # 分离bootimg
-rwxrwxr-x 1 tony tony 580899 Feb 27 13:24 umkbootimg*
-rwxrwxr-x 1 tony tony 257 Feb 27 13:24 unpack*
-rwxrwxr-x 1 tony tony 287 Feb 24 11:03 unpack_ramdisk* # 解压ramdisk

boot_info查看boot.img的信息,后续从新打包的时候会用到。

tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ./boot_info ../boot.img
PAGE SIZE: 2048
BASE ADDRESS: 0x10800000
RAMDISK ADDRESS: 0x11800000
CMDLINE: 'console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale'
  • boot.img 解包
tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ./split_boot ../boot.img
Page size: 2048 (0x00000800)
Kernel size: 4825724 (0x0049a27c)
Ramdisk size: 183962 (0x0002ce9a)
Second size: 0 (0x00000000)
Board name:
Command line: 'console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale'
Base address: (0x10800000) Writing boot/boot.img-kernel ... complete.
Writing boot/boot.img-ramdisk.cpio.gz ... complete.
Unpacking ramdisk... complete.

在当前目录生成了一个boot的目录,内容如下:

tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ls boot -lh
total 4.8M
-rw-rw-r-- 1 tony tony 4.7M Feb 27 11:26 boot.img-kernel
-rw-rw-r-- 1 tony tony 180K Feb 27 11:26 boot.img-ramdisk.cpio.gz
drwxrwxr-x 8 tony tony 4.0K Feb 24 13:26 ramdisk

boot.img-kernel是kenel的镜像

boot.img-ramdisk.cpio.gz是ramdisk的压缩包。

ramdisk是boot.img-ramdisk.cpio.gz解压之后的目录。

boot.img pack

  • ramdisk pack

从新打包ramdisk。

tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ./repack_ramdisk boot/ramdisk/
625 blocks #在 boot目录生成new-ramdisk.cpio.gz文件
tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ls boot
boot.img-kernel boot.img-ramdisk.cpio.gz new-ramdisk.cpio.gz ramdisk
  • boot.img pack

从新打包boot.img,命令行比较长,所以写成一个脚本。

repack_boot.sh

#!/bin/sh

set -x  # 脚本运行时,在终端输出每条运行的命令。

cmdline="console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale"

page_size=2048

base_addr=0x10800000

ramdisk_addr=0x11800000

./repack_ramdisk boot/ramdisk

./mkbootimg --cmdline "$cmdline" --base $base_addr --ramdiskaddr $ramdisk_addr --pagesize $page_size --kernel boot/boot.img-kernel --ramdisk boot/new-ramdisk.cpio.gz -o boot.img

运行时,输出如下所示。在当前目录生成boot.img文件。

tony@tony:~/myandroid/out/target/product/sabresd_6dq/bootimg_tools$ ./repack_boot.sh
+ cmdline=console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale
+ page_size=2048
+ base_addr=0x10800000
+ ramdisk_addr=0x11800000
+ ./repack_ramdisk boot/ramdisk
625 blocks
+ ./mkbootimg --cmdline console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0 androidboot.hardware=freescale --base 0x10800000 --ramdiskaddr 0x11800000 --pagesize 2048 --kernel boot/boot.img-kernel --ramdisk boot/new-ramdisk.cpio.gz -o boot.img

Tony Liu

2017-2-27, Shenzhen

android boot.img unpack pack的更多相关文章

  1. In Depth : Android Boot Sequence / Process

    In Depth : Android Boot Sequence / Process What happened when I press power on button in my Android ...

  2. android boot.img 结构

    android 的boot.img 包括 boot header,kernel, ramdisk 首先来看看Makefile是如何产生我们的boot.img的: boot镜像不是普通意义上的文件系统, ...

  3. 另一种root方法,Android boot.img破解

    一.破解原理 Android手机获得Root权限,其实就是让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限. ...

  4. android boot.img

    android在启动时uboot推断有没有组合健按下或者cache分区的升级文件来决定进入哪个系统(可能还有别的推断方式) 有组合健按下或者cache分区有升级文件,则载入recovery.img进入 ...

  5. Android/Linux boot time分析优化

    如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...

  6. 解压 boot.img

    ./split_bootimg.pl boot.img Page size: 2048 (0x00000800) Kernel size: 7062084 (0x006bc244) Ramdisk s ...

  7. Lenovo k860i 移植Android 4.4 cm11进度记录【上篇已完结】

    2014.5.16 为了验证一下下载的CM11的源码有没有问题,决定编译一下cm官方支持的机器,手上正好有台nexus7 2012,就拿它为例测试一下在mac os x平台的整个编译过程. 1. 最开 ...

  8. 从Android设备中提取内核和逆向分析

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57074695 一.手机设备环境 Model number: Nexus 5 OS ...

  9. Android Bootloader LittleKernel的两篇文章 【转】

    转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...

随机推荐

  1. Linux常见的进程调度算法

    进程调度:在操作系统中调度是指一种资源分配. 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法. 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源 ...

  2. Axure多人协作

    这几天搞<材料採购系统>需求.我们组须要分模块画模型图,可是假设每一个人各自画各自的,最后整合,这样就太麻烦了.小左说Axure能够实现多人协作,于是我就研究了一下.我们组已经在用了.以下 ...

  3. AGPS定位基本机制

    http://www.cnblogs.com/magicboy110/archive/2010/12/12/1903927.html 位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能 ...

  4. springboot http2

    转 Spring Boot With Http2 原文链接 http://www.jianshu.com/p/3d7ac535d6a0 拓展链接 http://www.jianshu.com/p/97 ...

  5. introduction to python for statistics,analysis笔记2

    一.行列式连接concatenate函数,axis=0是垂直拼接,axis=1是水平拼接 x=np.array([[],[,]]); y=np.array([[],[,]]); z=np.concat ...

  6. 常见的web负载均衡方法总结

    Web负载均衡的方法有很多,下面介绍几种常见的负载均衡方法. 1.用户手动选择方法 这是一种较为古老的方式.通过在主站首页入口提供不同线路.不同服务器连接的方式,来实现负载均衡.这种方式在一些提供下载 ...

  7. TCP通信的三次握手和四次撒手的详细流程(顿悟)

    TCP(Transmission Control Protocol) 传输控制协议 三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位 ...

  8. linux批量备份服务器配置文件和目录的脚本

    这篇文章主要介绍了linux下批量备份服务器配置文件和目录的方法,需要的朋友可以参考下 功能:1. 只在备份机执行,远程的服务器只需要允许备份机用root通过密钥登录:2. 在备份机上配置需要备份哪些 ...

  9. 如何进行SVN数据迁移并保存版本号数据

    如何从一台服务器192.168.8.2迁移到另一台服务器192.168.8.30进行SVN数据迁移并保存版本号数据 工具/原料   SVN 方法/步骤   1 打开远程服务,连接192.168.8.2 ...

  10. 链队列的C++实现

    #include<iostream> using namespace std; //节点类 template<class T> struct QNode { T data; Q ...