Android boot.img system.img ramdisk.img的解釋

img解析:linux

ramdisk.img:Android根文件系統,在android編譯系統生成的out/target/product/root目錄中android

結構:app

./init.trout.rc
./default.prop 保存一些調試參數,對於開發者至關重要
./proc
./dev
./init.rc         一些啓動參數
./init
./sys
./init.goldfish.rc
./sbin            
./sbin/adbd
./system  system.img掛載點
./data      userdata.img掛載點框架

 

userdata.img 保存用戶、應用信息。工具

結構:.net

/data/app  全部安裝後的app會移至此處,apk被拆成dex和apk,dex爲目標文件,apk爲資源包調試

/data/data 應用程序內部存儲信息,sharepreference、database,etcrest

 

system.img 包含整個android系統orm

結構:ip

system/app                   android出廠內置應用在此,同時,在這裏的app能夠得到一些特別的權限。

system/framework         android框架在此,不宜亂動,開發者可使用adb push + 拔電池開關機能夠快速驗證問題。(前提是eng版本)

Special App:

SystemUI.apk 狀態欄藏在裏面。

framework-res.apk包含整個系統res文件夾 including 系統UI、一些配置參數、theme、style、animation

 

recovery.img 按power鍵+音量上鍵(android默認)能夠進去,能夠執行T卡升級,format,backup userdata,restore userdata

結構:不知道

 

boot.img 包含一個Linux kernel (maybe named as zImage)和一個ramdisk。img文件結構在源碼system/core/mkbootimg/bootimg.h中聲明

uboot.img android啓動時第一個加載的鏡像,初始化硬件和基本輸入出系統。

 

因此通常flash到android設備中的img通常是這幾個:uboot.img,boot.img,recovery.img,userdata.img,system.img

system提取以及打包方法:

提取:adb pull system $dst_dir

便可將system.img解包提取到本地,

貌似GB的版本system.img用的文件系統爲yaffs,可使用mkyaffs(android自帶) 生成system.img 解包可使用網友自制的unyaffs解包。

ICS版本system.img使用的是ext4文件系統,可使用android自帶的mk_ext4fs工具打包system.img,目前網上對於ICS版本的討論較少,並無找到解包工具

 

ramdisk提取以及打包方法:

提取:因爲ramdisk各個設備商打包方法略有不一樣,因此不推薦直接從設備中提取,最好仍是找一個官方ramdisk,分析下結構。再作提取修改打包動做。

打包(android默認):mkbootimgfs $root_dir | gzip > ramdisk.img

所以ramdisk.img是一個gzip的壓縮包,裏面有個ramdisk的鏡像

因爲不一樣廠商打包方式有所不一樣,好比MTK會把gzip的壓縮包外面再加一個文件頭(雖然不知道是什麼,不過好像很厲害的樣子),不少廠商也會加個頭。不過能夠根據gzip的文件格式從加殼的ramdisk中將gzip提取出來,修改後,再把gzip放回去。

所以ramdisk的修改會比較麻煩。改得很差,則沒法開機。

 

boot.img打包解包方法:

解包:能夠根據bootimg.h文件頭格式,能夠本身編個程序解包,也可使用已有的工具進行解析:

split-bootimg.pl是一個國外網友自制的boot.img解包工具。解包後生成$bootimg_name-kernel.img 和 $bootimg_name-ramdisk.gz

打包:mkbootimg --kernel $kernelimg --ramdisk $ramdiskimg --kernel_base $kernel_base --page_size $page_size --cmd_line $cmd -o $out_image

--kernel --ramdisk 指定kernel ramdisk鏡像

--kernel_base --page_size 【可選】指定kernel基址和頁大小,若是有源碼能夠查看BoardConfig.mk

--cmd_line 指定一條命令,能夠在開機的時候執行。

-o 輸出鏡像名字

 

boot.img通常不要輕易換,很容易形成不開機,必定要注意備份。。

不開機的幾種緣由:

kernel_base錯了,uboot找不到kernel的引導程序。

ramdisk解包錯誤,沒法創建文件系統

 

android開機過程:

上電,加載uboot,初始化硬件

加載boot.img,加載linux內核,創建文件系統。

根據啓動模式,決定是正常啓動、recovery_mode factory_mode。

加載recovery.img或者system.img

刷機方法:

源碼編譯完成後,在out/target/product目錄下會生成選擇平臺的鏡像

將編好的img文件刷到手機中:

將boot.img和system.img拷到fastboot目錄下,

adb reboot bootloader令手機重啓計入fastboot模式

執行:

fastboot -w -p flashall

fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
fastboot flash userdata userdata.img

//fastboot flash cache cache.img

//fastboot flash ramdisk ramdisk.img

相關文章
相關標籤/搜索