zoukankan      html  css  js  c++  java
  • 解压 Android 系统中的 system.img

    本篇文章讲解 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
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    Office文档在线编辑的实现之二
    Office文档在线编辑的实现之一
    WebIM(5)----将WebIM嵌入到页面中
    WebIM(4)----Comet的特殊之处
    WebIM(3)----性能测试
    WebIM(2)---消息缓存
    WebIM(1)
    微信的通讯录首字母滑动的实现
    新浪微博认证新API调用
    Android小感悟-重写textview组件感悟
  • 原文地址:https://www.cnblogs.com/xunbu7/p/10844099.html
Copyright © 2011-2022 走看看