ramdisk.img system.img userdata.img 分析


本文轉自:http://blog.csdn.net/wuye110/article/details/8463820

  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目錄下。

      Ramdisk鏡像是采用cpio打包,gzip壓縮的。用file驗證:

# file ramdisk.img    

輸出:

# ramdisk.img: gzip compressed data, from Unix 

為了便於說明問題,我們將ramdisk.img拷貝到其它一個目錄,然后按以下步驟將ramdisk.img還原為目錄樹:

    # mv ramdisk.img ramdisk.img.gz 
  # gunzip ramdisk.img.gz 
  # mkdir ramdisk 
  #cd ramdisk 
  # cpio i F ../ramdisk.img 

這樣,就得到一個完整的ramdisk目錄,與out/target/product/generic/root對比后,我們發現它們是一樣的內容。 通過執行以下的操作,我們可由目錄樹再生成ramdisk鏡像

  # cd ramdisk   # find . | cpio -o -H newc | gzip > ../ramdisk-new.img

ramdisk.img其實是對root目錄的打包和壓縮,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緩存大

system.img userdata.img這兩個鏡像都屬於yaffs2文件格式,生成方式是一樣的。我們就以system.img為例來說明。

System.img 生成 system目錄樹 所需工具unyaffs

# mkdir system 
# cd system 
# unyaffs ../system.img 

system目錄樹生成system.img 所需工具 mkyaffs2image,Android源碼編譯后會生成該工具,在 out/host/linux-x86/bin 目錄下。 命令格式:

# mkyaffs2image system/ system_new.img

system.img文件是system目錄的一個映像,類似於linux的根文件系統的映像,放着android的應用程序,配置文件,字體等

        android啟動時首先加載ramdisk.img鏡像,並掛載到/目錄下,並進行了一系列的初始化動作,包括創建各種需要的目錄,初始化console,開啟服務等。System.img是在init.rc中指定一些腳本命令,通過init.c進行解析並掛載到根目錄下的/system目錄下的。
對於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      用戶文件夾,包含共享、鍵盤布局、時間區域文件等。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM