有很多方法可以制作提取Android的文件系統,今天我給大傢講一下如何從make完成的source code中把文件系統提取出來。
在編譯完成的android源碼目錄中,文件系統的存放位置是:source/out/target/product/generic/
1、Android文件系統的結構
Android源碼編譯後得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統,system.img包括瞭主要的包、庫等文件,userdata.img包括瞭一些用戶數據,emulator加載這3個映像文件後,會把 system和 userdata分別加載到 ramdisk文件系統中的system和 userdata目錄下。因此,我們可以把ramdisk.img裡的所有文件復制出來,system.img和userdata.img分別解壓到 ramdisk文件系統中的system和 userdata目錄下。
2、分離Android文件系統出來
system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip壓縮的,可以通過file命令驗證:
root@linux-home:~/kernel/out/target/product/generic# file ramdisk.img
ramdisk.img: gzip compressed data, from Unix
Android源碼編譯後除瞭生成system.img,userdata.img之外還生成system和 userdata文件夾,因此不需要解壓它們。Android源碼編譯後還生成root文件夾,其實root下的文件與 ramdisk.img 裡的文件是一樣的,不過這裡還是介紹怎樣把 ramdisk.img解壓出來:
將ramdisk.img復制一份到任何其他目錄下,將其名稱改為ramdisk.img.gz,再用gunzip命令將其解壓,操作如下
//將ramdisk復制到當前工作目錄
root@linux-home:~# cp kernel/out/target/product/generic/ramdisk.img ./
root@linux-home:~# ls
android2.3.6-source.tar.bz2 Documents overview.png qt-book-examples.tar.gz
android_fs_rjm.tar.bz2 Downloads Pictures ramdisk.img
bin kernel Public Templates
Desktop Music qt-book Videos
//將其命名為ramdisk.img.gz
root@linux-home:~# mv ramdisk.img ramdisk.img.gz
//用gunzip解壓
root@linux-home:~# gunzip ramdisk.img.gz
接下來,建立一個叫ramdisk的文件夾,進入,輸入以下命令
cpio -i -F ../ramdisk.img
然後 ls
過程如下:
root@linux-home:~# cd ramdisk
root@linux-home:~/ramdisk# ls
root@linux-home:~/ramdisk# cpio -i -F ../ramdisk.img
456 blocks
root@linux-home:~/ramdisk# ls
data dev init.goldfish.rc proc sys ueventd.goldfish.rc
default.prop init init.rc sbin system ueventd.rc
至此我們已經可以看到文件系統的內容瞭。
最後,把Android源碼編譯後生成的system和 userdata裡的文件復制到 ramdisk/system和 ramdisk/userdata下。這樣就得到一個文件系統瞭。你就可以用nfs或者別的方式去掛載文件系統瞭。
作者 任加孟