文章出處http://code.google.com/p/androidteam/wiki/AndroidFileSystemAnalysis1Android 檔案系統分析
- 系統內容: ubuntu9.10
- Date: 03/09/2010
將Android源碼編譯後會在/home/zhaoruijia/zhaoAndroid/out/target/product/generic目錄下發現編譯後產生的3個鏡像檔案:system.img,ramdisk.img,userdata.img,其中system.img包括了主要的包、庫等檔案,userdata.img包括了一些使用者資料,模擬器載入這3個映像檔案後,會把
system和data分別載入到ramdisk檔案系統中的system和data目錄下ramdisk.img是模擬器的檔案系統,我們可以通過輸入:
zhaoruijia@zhaoruijia-ubunut:~$ androidemu zhaoruijia@zhaoruijia-ubunut:~$ adb shell
# lssqlite_stmt_journalsconfigcachesdcarddetcsystemsyssbinprocinit.rcinit.goldfish.rcinitdefault.propdatarootdev
觀察到在模擬器的shell雷根檔案系統結構,如果要進行核心移植,根檔案系統是必不可少的,目前有兩種方法獲得一個根檔案系統,一種方法是將模擬器中的檔案系統通過打包的方式拖出來,然後以此為基礎通過busybox重新定製一個根檔案系統,還有一種方法就是我們可以把ramdisk.img裡的所有檔案複製出來,system.img和userdata.img分別解壓到ramdisk檔案系統中的system和data目錄下,這裡由於Android源碼編譯後除了產生system.img,userdata.img之外還產生system和
data檔案夾,因此不需要解壓它們。只需將他們拷貝出來即可,然後使用網路檔案系統方式掛載Android檔案系統,具體步驟如下:
1、將ramdisk.img複製到/home/zhaoruijia/workspace1目錄下並將其名稱改為ramdisk.img.gz
zhaoruijia@zhaoruijia-ubunut:~/workspace1$ mv ramdisk.img ramdisk.img.gz
並使用命令
zhaoruijia@zhaoruijia-ubunut:~/workspace1$ gunzip ramdisk.img.gz zhaoruijia@zhaoruijia-ubunut:~/workspace1$ lsramdisk ramdisk.img
2、建立一個ramdisk檔案夾然後輸入如下:
zhaoruijia@zhaoruijia-ubunut:~/workspace1$ mkdir ramdiskzhaoruijia@zhaoruijia-ubunut:~/workspace1$ cd ramdiskzhaoruijia@zhaoruijia-ubunut:~/workspace1/ramdisk$ cpio -i -F /home/zhaoruijia/workspace1/ramdisk.img494 塊
3、然後把Android源碼編譯後產生的system和data裡的檔案複製到 ramdisk/system和 ramdisk/data下。這樣就得到一個檔案系統了。
zhaoruijia@zhaoruijia-ubunut:~/workspace1/ramdisk$ ls -l總用量 152drwxrwx--x 2 zhaoruijia zhaoruijia 4096 2010-03-10 17:42 data-rw-r--r-- 1 zhaoruijia zhaoruijia 118 2010-03-10 17:42 default.propdrwxr-xr-x 2 zhaoruijia zhaoruijia 4096 2010-03-10 17:42 dev-rwxr-x--- 1 zhaoruijia zhaoruijia 103184 2010-03-10 17:42 init-rwxr-x--- 1 zhaoruijia zhaoruijia 1677 2010-03-10 17:42 init.goldfish.rc-rwxr-x--- 1 zhaoruijia zhaoruijia 12215 2010-03-10 17:42 init.rcdrwxr-xr-x 2 zhaoruijia zhaoruijia 4096 2010-03-10 17:42 procdrwxr-x--- 2 zhaoruijia zhaoruijia 4096 2010-03-10 17:42 sbindrwxr-xr-x 2 zhaoruijia zhaoruijia 4096 2010-03-10 17:42 sysdrwxr-xr-x 10 zhaoruijia zhaoruijia 4096 2010-03-10 17:52 system
4、我們要使用網路檔案系統方式掛載Android檔案系統因此,我們需要建立/nfsroot目錄,再建立/nfsroot/Androidfs目錄,把剛才的Android檔案系統改名為Androidfs,並連結到/nfsroot/Androidfs
5、Android核心掛載/nfsroot/Androidfs之後,根據init.rc,init.goldfish.rc來初始化並裝載系統庫、程式等直到開機完成。init.rc指令碼包括了檔案系統初始化、裝載的許多過程。至於具體啟動過程我會在下一篇文章中結合init.c源碼來分析。
遺留問題:由於核心移植沒有成功能否通過網路檔案系統方式掛載還是未知數,本文只是一個參考,個人更看好從模擬器中獲得根檔案系統後通過busybox定製,做到後面再看了
http://home.eeworld.com.cn/my/space.php?uid=181697&do=blog&id=42953