Android ramdisk,boot,system.img 解包和打包

一、ramdisk介绍

ramdisk通过字面意思就大概能理解意思,ram disk虚拟内存盘,将ram模拟成硬盘来使用的文件系统。对于传统的磁盘文件系统来说,这样做的好处是可以极大提高文件访问速度;但由于是ram,所以在掉电后,这部分内容不能保存。ramdisk文件系统是在系统上电后直接从磁盘一次性加载到内存,在整个运行期间都不会有写回操作,所以,任何修改都掉电后丢失。

二、ramdisk.img介绍

ramdisk.img是编译Android生成的一个镜像文件,最后和kernel一起打包生成boot.img镜像。ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件和init.*.rc等相关启动脚本以及sbin目录下的adbd工具。如下图所示
在这里插入图片描述

三、ramdisk.img 解压

ramdisk.img是将上图目录打包压缩而来的,我们可以通过下面命令,来解压出其中的内容
首先使用file命令查看ramdisk.img文件类型

akin@akin:~/work/7722$ file ramdisk.img 
ramdisk.img: gzip compressed data, from Unix

将ramdisk.img 重命名为gzip格式

akin@akin:~/work/7722$ mv ramdisk.img ramdisk.img.gz
akin@akin:~/work/7722$ ls
ramdisk.img.gz

使用gzip解压ramdisk.img.gz文件

akin@akin:~/work/7722$ gunzip ramdisk.img.gz 

再次用file命令查看文件类型

akin@akin:~/work/7722$ file ramdisk.img 
ramdisk.img: ASCII cpio archive (SVR4 with no CRC)

这时候使用cpio来提取ramdisk.img中的内容

四、ramdisk.img 压缩

修改相应要修改的文件后,打包成ramdisk.img文件的步骤如下:

akin@akin:~/work/7722/temp$ find .|cpio -ov -H newc | gzip > ../ramdisk.img 
.
./factory_init.rc
./proc
./sepolicy
./init.recovery.mt6735.rc
./file_contexts
./selinux_version
./ueventd.rc
./sys
./meta_init.modem.rc
./property_contexts
./init.aee.rc
./sbin
./sbin/mkfs.f2fs
./sbin/watchdogd
./sbin/adbd
./sbin/healthd
./sbin/ueventd
./data
./init.modem.rc
./init.xlog.rc
./meta_init.project.rc
./charger
./enableswap.sh
./init.project.rc
./init.zygote64_32.rc
./default.prop
./init.ssd.rc
./dev
./factory_init.project.rc
./system
./init
./init.zygote32.rc
./service_contexts
./fstab.mt6735
./init.trace.rc
./seapp_contexts
./init.mt6735.usb.rc
./init.rc
./meta_init.rc
./init.environ.rc
./init.mt6735.rc
./init.usb.rc
4784 blocks
akin@akin:~/work/7722/temp$ cd ..
akin@akin:~/work/7722$ ls
ramdisk.img  temp

system.img 解压、修改、
将system.img 转换成ext4 格式,然后挂载到/home/temp/目录 就可以修改了

akin@akin-machine:~/tools/system$ simg2img system.img system.img.ext4
akin@akin-machine:~/tools/system$ sudo mount system.img.ext4 ~/temp/
akin@akin-machine:~/tools/system$ sudo umount ~/temp/

打包

akin@akin-machine:~$ make_ext4fs -s -l 604M -a system system.img temp/
Creating filesystem with parameters:
    Size: 633339904
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7744
    Inode size: 256
    Journal blocks: 2416
    Label: 
    Transparent compression: none
    Blocks: 154624
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 1212/38720 inodes and 67353/154624 blocks
    Total files: 1085
    Total bytes: 252503255
akin@akin-machine:~$ ls
8085Q    Desktop    examples.desktop  Pictures    temp       Videos
android  Documents  Music             Public      Templates
bin      Downloads  -n                system.img  tools

recovery.img

1.获取recovery.img
第一种:从原厂刷机包中提取recovery.img
第二种:从手机上面提取

 root手机
 adb shell 
 su
 1.如果是高通芯片的手机,采用以下命令将recovery.img拷贝出来
 dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/storage/sdcard/recovery.img

 或者是:
 cd /dev/block/flatform/msm_sdcc.1/by-name/
 ls -al命令可以看到revoery其实是个链接文件,链接到/dev/block/mmcblk0p*  这个分区块,因此也可以使用一下命令:
 dd if=/dev/block/mmcblk0p16 of=/storage/sdcard/recovery.img
2.如果是MTK芯片的手机

有两种方式:

dd if=/dev/recovery of=/storage/sdcard/recovery.img bs=1024 count=6144
dd if=/dev/block/mmcblk0 of=/storage/sdcard/recovery.img skip=xxxx bs=1024 count=6144


注意:bs的值目前可以固定1024,count的值需要查看cat /proc/dumchar_info文件对应的recovery大小来确定(高通平台没有dumchar_info这个文件),

比如size一列为0x600000,那么count的值为6144,也就是6M,如果为0x700000,那么count的值为7168,也就是7M大小。

skip代表偏移,因为MTK平台recovery和boot等都在一个相同的分区中,通过地址偏移量来区分,这就是为什么高通平台不需要执行bs 和count的原因。

解包

#./mkboot recovery.img outFilePath

打包

./mkboot outFilePath recovery.img
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法:http://blog.csdn.net/asmcvc/article/details/11770851 工具: unyaffs,mkyaffs2image 其中unyaffs有windows版本和linux版本,mkyaffs2image只有linux版本。 windows版本的unyaffs用法: 把system.img复制到unyaffs的相同目录下,cmd命令下cd到unyaffs的目录下,然后执行命令:unyaffs system.img unyaffs会把system.img解压到其目录下。 linux版本的unyaffs用法: 把unyaffs复制到/usr/bin目录下,并修改权限为可执行。 然后cd到system.img目录下(假定目录为system目录),执行命令:unyaffs system.img 然后对system目录下的文件进行修改。 注意:修改完后的文件要修改一下权限,尽量和其他文件的权限保持一致。例如:chmod 644 framework-res.apk mkyaffs2image用法: 复制到/usr/bin目录下,并修改权限为可执行。 这里以打包system目录为system.img为例,执行命令: mkyaffs2image system system.img 然后把新生成的system.img复制替换掉原:adt-bundle-windows-x86\sdk\system-images\android-17\armeabi-v7a\system.img 执行bat批处理命令启动模拟器: D:\adt-bundle-windows-x86\sdk\tools\emulator-arm.exe -avd AndroidVM -partition-size 128 这里以修改android系统启动画面为例: 打开解包目录下的\framework\framework-res.apk 替换图片:framework-res.apk\assets\images\android-logo-mask.png为下图: 然后对\framework\framework-res.apk文件重新签名,复制到linux下后修改文件权限和原来一致。 然后mkyaffs2image system system.img打包生成新的system.img,替换原来的system.img,并启动模拟器,效果图如下: 修改代码: 工具:odextools(参考:《一键odex批量合并工具odextools的重新整理与使用》)、dexopt-wrapper 其中odextools.bat的代码: 批处理有一处bug:每打包一次会把odex文件删除掉,导致在后面的打包过程中会出现找不到:system/framework/core.odex类似的错误,因此只需要在打包完后不删除odex文件即可,找到del /f !apkx!.odex 1>nul 2>nul改为:::del /f !apkx!.odex 1>nul 2>nul,也就是注释掉这一行代码。 具体使用方法(操作在windows下): 在odextools\romdir目录下创建文件夹:system 利用unyaffs解包system.img后,把所有文件复制到system目录下。 然后运行odextools.bat,如图: 选择一个需要整合odex的目录选项即可。odextools.bat会自动设置环境变量,使用baksmali.jar来反编译odex为smali,然后再调用smali.jar打包为classes.dex, 然后再打包到相应的apk包(framework目录下对应的是jar后缀的,实际上也是个apk包),最后再重新签名。 如果要修改代码,则需要把上面重新打包生成的apk文件,利用常规方法反编译后修改smali代码,例如插桩输入log信息。然后再回编译并重新签名。 最后一步:因为system.img中的apk是优化过的,apk主目录下是没有classes.dex文件的,而是一个被优化过的odex文件,用于优化启动速度。 因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,然后删除apk包里的classes.dex,并在相同目录下放置与apk包同名的odex文件。 按照原system目录的文件结构组织好后,目录复制到linux环境下使用mkyaffs2image重新打包成system.img
### 回答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等文件,可以对这些文件进行修改和定制。然后可以使用mkbootimgAndroid Image Kitchen将修改后的文件重新打包为新的boot.img文件。这样,就可以实现对Android系统启动过程中的各种配置和组件进行修改和定制。 这些工具集对于Android系统开发和定制非常有用,可以帮助开发者理解和修改Android系统的启动过程,同时也可以帮助厂商和用户改变和优化系统的启动行为。然而,由于涉及到系统底层,使用这些工具集需要谨慎操作,避免对系统造成损害。 ### 回答3: Androidboot.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(内核文件)、ramdiskramdisk文件)、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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值