有不少方法能夠製做提取Android的文件系統,今天我給你們講一下如何從make完成的source code中把文件系統提取出來。linux
在編譯完成的android源碼目錄中,文件系統的存放位置是:source/out/target/product/generic/android
一、Android文件系統的結構c#
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目錄下。ide
二、分離Android文件系統出來spa
system.img,ramdisk.img,userdata.img映像文件是採用cpio打包、gzip壓縮的,能夠經過file命令驗證:code
root@linux-home:~/kernel/out/target/product/generic# file ramdisk.img
ramdisk.img: gzip compressed data, from Unixip
Android源碼編譯後除了生成system.img,userdata.img以外還生成system和 userdata文件夾,所以不須要解壓它們。Android源碼編譯後還生成root文件夾,其實root下的文件與 ramdisk.img 裏的文件是同樣的,不過這裏仍是介紹怎樣把 ramdisk.img解壓出來:get
將ramdisk.img複製一份到任何其餘目錄下,將其名稱改成ramdisk.img.gz,再用gunzip命令將其解壓,操做以下源碼
//將ramdisk複製到當前工做目錄qt
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或者別的方式去掛載文件系統了。