解壓 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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM