Android 源碼編譯後獲得system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的 文件系統,system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數據,emulator負責加載這3個映像文件後,會 把system.img和userdata.img分別加載到 ramdisk文件系統中的system和 userdata目錄下(會發覺有類似性)。linux
咱們會發覺編譯生成的root文件夾內容與android運行時根目錄內容類似,ramdisk根文件系統中包含一些對於啓動android的很重要的文 件,好比內核啓動完後加載的第一個進程init、一些重要的配置文件等,總之它控制着整個android的啓動。根據 init.rc,init.goldfish.rc來初始化並裝載系統庫、程序等直到開機完成。init.rc腳本包括了文件系統初始化、裝載的許多過 程。init.rc的工做主要是:
1)設置一些環境變量
2)建立system、sdcard、data、cache等目錄
3)把 一些文件系統mount到一些目錄去,如,mount tmpfs tmpfs /sqlite_stmt_journals
4)設置一些文件的 用戶羣組、權限
5)設置一些線程參數
6)設置TCP緩存大小android
以下圖是ramdisk.img解壓出來的文件,其直接掛載在根目錄下,在它的分區下只有只讀權限,後面system.img userdata.img從新掛載在system和data目錄下後從新配置了權限,因此想init init.rc sbin目錄都是隻要只讀權限,好比想要修改sbin下的healthd就只能從新燒ramdisk.img了sql
生成的system.img,ramdisk.img,userdata.img映像文件是採用cpio打包、gzip壓縮的,能夠經過file命令驗 證:
file ramdisk.img,輸出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 ,咱們能夠學習怎麼樣把 ramdisk.img解壓出來。將ramdisk.img複製一份到任何其餘目錄下,將其名稱改成 ramdisk.img.gz,並使用命令
gunzip ramdisk.img.gz,而後新建一個文件夾,叫ramdisk吧,進入,輸入 命令cpio -i -F ../ramdisk.img,這下,你就能看見並操做ramdisk裏面的內容了。而後把Android源碼編譯後生成的system和 userdata裏的文件複製到 ramdisk/system和ramdisk/userdata下。這樣就獲得一個文件系統了。緩存
還會發現,根文件系統下的sys就是一個Linux。app
=============================================================框架
在android 1.5 模擬器上加載 android 2.1 的系統:佈局
本 文編譯出來的3個img文件是2.1版的。能夠用system.img和ramdisk.img 替換1.5的版本:學習
命 令以下:字體
打 開android 1.5的模擬器 ,同時加載system.img和ramdisk.img.net
emlator -avd sdk_1_5 -ramdisk [ramdisk.img路徑] -system [system.img的路徑]
啓 動後能夠看到設置中的手機版本變成了2.1版。
=============================================================
對於android系統文件夾,好比out/target/prod t/smdk6410/system目錄,說明以下:
system/app 這個裏面主要存放的是常規下載的應用程序,能夠看到都是以APK格式結尾的文件。在這個文件夾下的程序爲系統默認的組件,本身安裝的軟件將不會出如今這 裏,而是/data/文件夾中。
system/bin 這個目錄下的文件都是系統的本地程序,從bin文件夾名稱能夠看出是binary二進制的程序,裏面主要是linux系統自帶的組件。
system/etc 從文件夾名稱來看保存的都是系統的配置文件,好比APN接入點設置等核心配置。
system/fonts 字體文件夾,除了標準字體和粗體、斜體外能夠看到文件體積最大的多是中文字庫,或一些unicode字庫。
system/framework 主要是一些核心的文件,從後綴名爲jar能夠看出是是系統平臺框架。
system/lib lib目錄中存放的主要是系統底層庫,如平臺運行時庫。
system/media 鈴聲音樂文件夾,除了常規的鈴聲外還有一些系統提示事件音
system/usr 用戶文件夾,包含共享、鍵盤佈局、時間區域文件等。