Android中system.img的兩種格式及其相互轉換方法

原文地址:http://www.2cto.com/kf/201501/373145.html

Android的同學經常會接觸到system.img。但是該文件經常以兩種格式出現:raw和sparse。

一種是raw ext4 image,即經常說的raw image,使用file觀察它: 其特點是完整的ext4分區鏡像(包含很多全零的無效填充區),可以直接使用mount進行掛載,因此比較大(一般1G左右)。
$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
信息非常明確了。
另一種是sparse ext4 image,即經常說的simg,使用file觀察它:
$ file system.img
system.img: data
就是說是一個非常普通的dat文件。由於它將raw ext4進行稀疏描述,因此尺寸比較小(沒有全零的無效填充區,一般在300到500M之間)。
android本身提供了源代碼工具在兩者之間轉換,源代碼位於:
system/core/libsparse/simg2img.c // 將sparse image轉換爲raw image;
system/core/libsparse/img2simg.c // 將raw image轉換爲sparse image;

如果完整的進行過一次Android的編譯,默認會將simg2img當作主機工具編譯出來,放在out/host/linux-x86/bin/simg2img處。 但默認是不會編譯img2simg的,我們可以手工進行編譯:
$ . build/envsetup.sh
$ lunch aosp_hammerhead-userdebug
$ make img2simg_host

這樣就會編譯出out/host/linux-x86/bin/img2simg。 如果要將system.raw.img轉換爲system.simg: $ img2simg system.raw.img system.simg
爲了方便沒有源代碼的同學,這裏提供img2simg的下載路徑: http://download.csdn.net/detail/howellzhu/8399215
對於simg2img,到處都可以找到了,還有windows版本的,這裏就不提供了。 使用方法:
$ simg2img  
$ img2simg   []


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章