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

Android系统镜像解析:从boot.img到recovery.img的深度拆解 本文深入解析Android系统镜像,重点拆解boot.imgrecovery.img的结构与功能。从内核、ramdisk到设备树,详细介绍了镜像打包解包过程,并对比分析两者在启动流程应用场景上的差异。内容涵盖GKI架构变化、自定义Recovery实践以及常见问题排查技巧,为Android系统开发者提供全面的技术参考。 阅读详情

一、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
Android ROM解包打包全流程:从工具链到定制实战 在嵌入式系统与移动开发领域,固件(Firmware)是硬件设备运行的基础软件层,它直接控制硬件操作并向上层操作系统提供接口。其核心原理在于将预先编译好的二进制代码配置文件存储在设备的非易失性存储器中,系统启动时加载执行。这项技术的价值在于允许开发者深度定制设备功能、优化性能、修复漏洞或适配特定硬件。在Android生态中,ROM(Read-Only Memory)刷机包是固件的一种常见形式,广泛应用于手机、电视盒子等设备的系统升级与个性化定制。通过解包ROM,开发者可以修改系统分区文件、集成Root权限( 阅读详情

相关推荐

安卓ROM解包打包实战:从系统镜像定制到刷机包制作

安卓系统镜像(ROM)是移动设备操作系统的核心载体,其本质是一个包含多个分区的结构化容器。理解ROM的格式与分区结构是进行系统定制的基础,常见的格式包括Android Sparse Image(.imgRecovery Flashable ZIP(.zip)。解包打包过程涉及文件系统操作、镜像格式转换刷机脚本编写,其技术价值在于允许开发者深度定制系统、移除预装应用、集成Root权限或优化性能。在应用场景上,这项技术广泛应用于老旧设备焕新、系统精简、功能增强以及个性化定制。本文以电视盒子等安卓设备为例

weixin_33933118的博客 468

system image解包打包工具

system image解包打包工具,支持ext4文件系统格式,通常Android系统system,userdata,vendor 都是ext4,ROM制作必备工具,好的工具正在渐渐在互联网上消失

system.img解包打包工具

最近需要对system.img进行解包,修改系统属性添加自己的APK,再打包烧录,整理俩个方法。 system.img解包打包工具方法一 1、把system.img转换成ext4格式 ./simg2img system.img system_ext4.img 2、挂载ext4到systemMount目录进行修改 sudo mount system_ext4.img systemMount/ -o loop 3、修改完成后 unmount 退出挂载使用如下命令

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 9625

安卓机型一键解包打包工具 做rom的工具

安卓机型一键解包打包工具 做rom的工具 解包 打包系统 解包rec 解包boot 打包rec 打包boot 解包系统 解包其他分区img等 对应到解包打包选项较多 资源自测较好 建议win7以上机型使用 资源较大。建议留有空间解压

DD命令分割,合并文件

<br />dd命令linux下一个非常有用的磁盘命令。它可以将指定大小的块拷贝成一个文件,并在拷贝的同时执行指定的转换。<br />UNIX已经提供了文件切割功能,能完成这个功能的UNIX命令就是DD。 <br />要切割的大文件为DGJD,共98336321字节,则: <br />dd if=dgjd of=zz1 bs=1 count=20000000 <br />dd if=dgjd of=zz2 bs=1 count=20000000 skip=20000000 <br />dd if=dgjd

merry3688的专栏 6555

linuxsystem.img、vendor.imgboot.img解包打包android rom修改)

出来的镜像systest.img就是修改过的,可以重命名为system.img,接下来你就可以cd到sysmain中修改镜像内容了!

键盘的起始页 1万+

adb修改什么文件获取root权限_【沙发管家】电视盒智能电视如何通过ADB获取ROOT权限?...

如何通过adb获取root权限(安卓电视盒智能电视通用)Android 系统rom里面最主要的就3个文件:boot.imgsystem.img、userdata.img其中boot.img 存放着内核以及Android系统的配置信息,比如android系统各文件夹的读写权限,adb 的权限。所以如果你要修改adb的root权限,修改boot.img对应的地方就行了。system.im...

weixin_39860108的博客 1826

Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

原创:http://www.cnblogs.com/cute/p/4140230.html Linux解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. Linux解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img

chongyang198999的专栏 1262

android 主要镜像(image)解析

img解析: ramdisk.img:android根文件系统,在android编译系统生成的out/target/product/root目录中 结构: ./init.trout.rc ./default.prop 保存一些调试参数,对于开发者相当重要 ./proc ./dev ./init.rc         一些启动参数 ./init ./sys ./init.gold

吴工的专栏 9558

Linux解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

Android源码编译成功后会输出映像文件:system.img,boot.img, ramdisk.img,userdata.img等等。有时我们需要修改里面的内容,下面列出在Linux下如何解包/打包这些映像文件。 ramdisk.img ramdisk.img是经cpio打包、并用gzip压缩的文件。 解包: 新建一个工作目录,把当前目录更改为该工作目录,执行下面命令(注意: img

yulix的专栏 1万+

linux解压img到文件夹,解压压缩android img文件

boot.imgbootrecovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘,ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。以下是一个典型的ramd...

weixin_35414484的博客 1234

Android ROM定制进阶:Linux环境下三大核心镜像(system/vendor/boot)的深度编辑与重打包实战

本文详细介绍了在Linux环境下对Android ROM三大核心镜像(system/vendor/boot)的深度编辑与重打包实战。从环境准备、镜像格式解析到具体修改流程,涵盖了system.img的空间调整、vendor.img的SELinux上下文处理以及boot.img的内核修改技巧,并提供了验证与刷机的实用避坑指南,帮助开发者高效完成Android ROM定制。

weixin_30675247的博客 432

android内核怎么制作,如何制作android nexus one的内核

Several people have already figured out the details on their own, but I have gotten requests to do a more comprehensive tutorial on how the boot and recovery images are structured, and how you can edi...

weixin_39822993的博客 262

MagiskBoot 实战指南:5 步搞定 Android boot.img 解包、修改与重打包

MagiskBoot 是 Magisk 项目中负责处理 Android 启动镜像的核心命令行工具,能对 boot.img 执行解包ramdisk 修改、内核 cmdline 调整与重打包,也支持 DTB 设备树拆分合并 AVB 签名校验。适合需要 root 设备、修改系统组件或制作自定义启动镜像的进阶用户,以及想理解 Android 启动链的开发者。如果只有编译环境想自研构建,可以先克隆源码仓

gitblog_01168的博客 787

MagiskBoot 使用指南:一条命令解包与重打包 Android 启动镜像 boot.img

拿到一个 `boot.img`,想改内核参数、注入一个脚本,甚至装上 root,却不知道该从哪里下刀——直接 hex 编辑又怕把镜像搞成砖。这正是 MagiskBoot 要解决的问题:它是 Magisk 自带的命令行工具,专门用来安全地解包(unpack)与重打包(repack)Android 启动镜像(boot image),顺带处理 CPIO 归档 DTB 设备树。本文带你从真实需求出发,先

gitblog_00570的博客 476
上一篇: linux的initrd机制和initramfs机制之initramfs
下一篇: usb gadget configfs 验证
EmbbyDroider
博客等级 码龄12年 25粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值