本篇文章讲解 system.img 是什么东西,以及它的打包和解包方式

system.img 是什么

system.img 是 Android 系统中用来存放系统文件的镜像 (image) ,文件格式为 yaffs2 或者 ext 的文件系统 ,在 Android 源码编译后会生产该文件。它将被 init 进程通过解析 init.rc 文件挂载 (mount) 到 /system 目录或者说 system 分区下

如何制作 system.img

使用下面的命令来即可制作一个 system.img

$ make_ext4fs -s -T 1421464178 -S file_contexts -l 1073741824 -a system system.img system/

命令说明
make_ext4fs用于制作 Android 平台上 ext4 文件系统的镜像
参数说明
-s 表示安静处理,不输出动作,可选参数
-T 表示 Unix 时间戳,对 system.img 中的文件设置修改时间
-S 表示 sepolicy 的 file_contexts
-l 表示最大的文件大小(受限于分区大小)
-a 表示 Android 的挂载(mount)点,比如 system、userdata、recovery,make_ext4fs 会根据 private/android_filesystem_config.h 里定义好的权限来给文件夹里的所有文件重新设置权限,如果不指定 -a 参数,则使用默认权限
system.img 表示输出文件名
system/ 表示输入目录,该目录下有 framework、app、bin 等目录
命令执行完成后,会得到一个经过压缩的 system.img ,无法直接进行mount,我们后面具体会介绍如何查看 system.img 中的内容

如何解压 system.img

system.img 是包含在系统刷机包里面的,解压刷机包,通常会有两种情况

直接得到 system.img

在 Android 5.0 以前的版本(不包含 5.0),通过解压刷机包可以直接得到 system.img ,而 system.img 可能是 raw、yaffs2 或者 ext 的文件系统
使用 file 命令可以区分 system.img 的文件系统格式

$ file system.img

如果输出是 Linux rev 1.0 ext4 filesystem data ,则表明是 raw 文件
如果输出是 VMS Alpha executable ,则表明是 yaffs2 文件
如果输出是 data ,则表明是 ext 文件

查看 raw 格式的 system.img 内容

Linux rev 1.0 ext4 filesystem data 表明 system.img 是一个完整的分区镜像,可以直接用于挂载,使用下面的命令即可查看 system 的内容

$ mkdir system
$ sudo mount -t ext4 system.img system
解压 yaffs2 格式的 system.img

下载 unyaffs 源码,然后执行下面命令编译得到 unyaffs 可执行文件

$ gcc -o unyaffs unyaffs.c

创建一个 system 目录,将 unyaffs 和 system.img 放到 system 目录中,然后执行命令,即可解压到当前目录

$ unyaffs system.img
解压 ext 格式的 system.img

首先,需要用 simg2img 工具把 system.img 转为为 ext4 文件格式,该工具位于 out/host/linux-x86/bin/simg2img
工具用法

$ simg2img system.img system.ext4.img

会得到一个 system.ext4.img ,它是 raw 格式的完整镜像,可以使用上面介绍的方法进行查看

刷机包中无 system.img

在 Andriod 5.0 以后的版本,为了降低update.zip文件的大小和写入的数据量,所有的ROM包,都仿照增量包的方式进行打包了,我们解压刷机包,会得到以下三个带有 system 的文件

system.new.dat
system.patch.dat
system.transfer.list

system.new.dat文件实际上是由system.transfer.list描述的一个稀疏数组,使用 sdat2img 工具即可转换得到真正的 system.img

$ sdat2img system.transfer.list system.new.dat system.img

前两个参数分别是 trans list 文件和输入的 system.new.dat 文件,最后一个是输出的 system.img 文件名,生成的文件可以直接用于 ext4 的 mount

作者:为何是Hex的昵称
链接:https://www.jianshu.com/p/db70835d41c8
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

解压 Android 系统中的 system.img的更多相关文章

  1. Android系统中的广播(Broadcast)机制简要介绍和学习计划

    在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个 ...

  2. Android系统中 setprop,getprop,watchprops命令的使用

    如:在frameworks/opt/net/ims/src/java/com/android/ims/ImsManager.java if (SystemProperties.get("pe ...

  3. Android系统中setprop,getprop,watchprops命令的使用(转载)

    转自:http://blog.csdn.net/yao_guet/article/details/6531241 在android系统中,有一些初始化的配置文件,例如: /init.rc /defau ...

  4. 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...

  5. tar 只解压tar包中某个文件

    sh-4.1# ls test.tar sh-4.1# tar -tf test.tar ./ecs20161207.png ./ecs.png ./ecs.xml ./rds.png ./Scree ...

  6. Android系统中的6种模式

    Android系统中的6种模式 1:一般启动模式(normal mode):    功能是正常启动手机,方法为关机状态下按电源键启动. 2:安全模式(safe mode):    此模式和正常启动一样 ...

  7. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  8. 用adb pull命令从android系统中读取文件失败的原因及解决办法

    问题:使用adb pull命令从android系统中读取文件失败.显示:Permission denied   原因:是由于文件权限原因引起.       使用ls -l命令查看android系统中的 ...

  9. Android系统中的dp和px的转换

    android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX ...

随机推荐

  1. 一文解读HTTP2 (转)

    作为一个经常和web打交道的程序员,了解这些协议是必须的,本文就向大家介绍一下这些协议的区别和基本概念,文中可能不局限于前端知识,还包括一些运维,协议方面的知识,希望能给读者带来一些收获,如有不对之处 ...

  2. maven配置本地和远程仓库

    maven项目中我们不用挨个导入jar包,那这些Jar包从哪里来呢?当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库 ...

  3. 以太网驱动的流程浅析(二)-Ifconfig的详细代码流程【原创】

    以太网驱动流程浅析(二)-ifconfig的详细代码流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<L ...

  4. 关于CCTextFieldTTF的几点注意事项

    TextField 基本名词 IME:输入法编辑器 placeholder:默认显示 事项 两种创建方式,一种是以文字的大小为准,此时如果如果内容超过编辑框大小,会自动扩展:另一种添加了对编辑框大小的 ...

  5. go语言设计模式之observer

    observer.go package observer import ( "fmt" ) type Observer interface { Notify(string) } t ...

  6. UVA1401 Remember the word DP+Trie

    问题描述 洛谷(有翻译) 题解 DP,设\(opt_i\)代表前\(i\)个字符方案数. Trie优化,刷表法. \(\mathrm{Code}\) #include<bits/stdc++.h ...

  7. os 和 sys 的模块使用方法和模块

    os  的模块  方法 os.remove()删除文件 os.rename()重命名文件 os.walk()生成目录树下的所有文件名 os.chdir()改变目录 os.mkdir/maked ...

  8. dicom(dcm)文件批量Study Instance UID打包整理工具

    一款可以自动识别原始dicom文件Study Instance UID的工具. 如果你有一堆混乱不堪的dcm文件,这个小工具能帮助你将这些无序的dicom文件按照Study Instance UID压 ...

  9. IT兄弟连 Java语法教程 流程控制语句 循环结构语句3

    while循环 Java中的另外一种循环是while循环.while循环的语法格式如下: while(条件表达式){ 循环体; } 其中条件表达式定义了控制循环的条件,可以使任何有效的boolean表 ...

  10. python学习(day1-2)

    python 学习(day - 1-2 ) 变量:将运算的中间结果暂存到内存,以便后续程序调⽤. 变量的命名规则: 1, 变量由字⺟, 数字,下划线搭配组合⽽成 2, 不可以⽤数字开头,更不能是全数字 ...