1. 程式人生 > >【android】各映象檔案img介紹

【android】各映象檔案img介紹

       Android 原始碼編譯後,在out/target/product/generic下生成的三個映象檔案:ramdisk.img,system.img,userdata.img以及它們對應的目錄root,system,data。 ramdisk.img是根檔案系統,system.img包括了主要的包、庫等檔案,userdata.img包括了一些使用者資料,android載入 這3個映像檔案後,會把 system和 userdata分別載入到 ramdisk檔案系統中的system和 data目錄下。

system目錄下的內容如下所示:

在app的目錄下是所有的apk包,即包含了Android原始碼自身所釋出的應用程式,又包含了使用者自己編譯的應用程式apk包,bin目錄下是基本的命令,系統的本地程式,主要是Linux系統自帶的元件,etc目錄包含了一些配置檔案和指令碼檔案,比如APN接入點設定等核心配置,framework目錄下包含了系統執行所需要眾多的jar包,lib目錄存放了所有的庫,檔案系統底層庫,如平臺執行時庫,xbin中也包含了多種命令,usr目錄中有使用者資料夾,包含共享、鍵盤佈局、時間區域檔案等。

root目錄下的內容如下所示:

在root目錄下,有個Android最重要的程序——init,這是Android啟動執行的的第一個程序,還有兩個非常重要的指令碼檔案:init.fs100.rc和init.rc這是Android在剛開始啟動時,需要首先載入的兩個啟動指令碼,根據腳本里的內容,來完成一系列的啟動工作,data目錄是userdata.img映象要掛載的目錄,system即為system.img映象需要掛載的目錄,dev目錄是系統啟動後,系統的裝置檔案目錄。

data目錄在系統編譯完成後是空的。

雖然整個Android的編譯系統生成了三部分內容,但是我們也可以將這三部分組合在一起,然後直接做成一個映象,燒到開發板當中,就可以啟動系統了!具體的操作就是,將system下所有的東西直接放在root目錄下的system目錄裡,將使用者的資料直接放在data下,這樣做成一個目錄fs100_root,然後將此目錄直接使用工具來做成映象,如下所示:

最後將fs100_root.img燒到nand flash當中,這樣即可啟動開發板。

而recover.img和boot.img相比較,區別如下:

1)recovery.img其實已經是進入了Linux系統

(2)recovery.img為了具有恢復系統的能力,比普通的boot.img目錄結構中:
       1、多了/res/images目錄,在這個目錄下的圖片都是恢復時我們看到的背景畫面。
       2、多了/sbin/recovery二進位制程式,這個就是恢復用的程式。
       3、/sbin/adbd不一樣,應該和恢復有關。

(3)Android系統中的初始化程式(init)和初始化配置檔案(default.prop、init.trout.rc、init.rc、init.goldfish.rc、)都不一樣。這就是系統沒有進入圖形介面

而進入了類似文字介面,並可以通過簡單的組合
         鍵進行恢復的原因。

通過查閱相關資料,對android的recovery模式有了一定的瞭解:

Android可以通過Recovery模式,實現恢復出廠設定、OTA升級、patch升級及firmware升級。在關機後,同時按下home + power鍵可以進入recovery模式。
大部分升級(包括刷機)都可以通過一個SD卡中的"updata.zip"檔案升級包進行傻瓜式升級(步驟簡單的升級)。而這一過程就是在系統進入Recovery模式後,通過升級程式執行升級包中“META-INF/com/google/android/update-script指令碼來執行各種不同的自定義升級,指令碼中是一組recovery模式下系統能識別的UI控制命令和檔案系統操作命令,例如write_raw_image(燒寫FLASH分割槽)、copy_dir(複製目錄)等等。