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