標籤:情況 架構 out oid 包括 inux other 字型 介面
當須要對android系統進行大刀闊斧的改造的時候,應該清晰的瞭解android各個image的組成才幹做到庖丁解牛。
首先在android燒寫過程中須要燒寫的檔案主要包含uboot.bin\boot.img\system.img\userdata.img\recovery.img等檔案。
小米的刷機檔案主要包含data\META-INF\recovery\system\blob\boot.img\file_contexts檔案。
Data目錄下僅僅有一個目錄miui從名字能夠知道裡面存放的檔案主要是小米的使用者介面檔案。
system/app 這個裡面主要存放的是常規下載的應用程式,能夠看到都是以APK格式結尾的檔案。在這個目錄下的程式為系統預設的組件,自己安裝的軟體將不會出如今這裡,而是\data\目錄中。
system/bin 這個檔案夾下的檔案都是系統的本地程式,從bin檔案夾名稱能夠看出是binary二進位的程式,裡面主要是Linux系統內建的組件(命令)
system/etc 從目錄名稱來看儲存的都是系統的設定檔,比方APN存取點設定等核心配置。
system/fonts 字型目錄。除了標準字型和粗體、斜體外能夠看到檔案體積最大的可能是中文字型檔。或一些unicode字型檔當中DroidSansFallback.ttf檔案大小
system/framework framework主要是一些核心的檔案。從尾碼名為jar能夠看出是是系統平台架構。
system/lib lib檔案夾中存放的主要是系統底層庫,一些so檔案,如平台執行時庫
system/media/audio 鈴聲音樂目錄,除了常規的鈴聲外另一些系統提示事件音。
system/usr 使用者目錄,包括共用、鍵盤配置、時間地區檔案等
system/priv-app 能夠存放自己編寫的一些app檔案
system/vendor 存放產品相關檔案
bootimg檔案是由Image和ramdisk.img檔案產生。在/build/core/Makefile檔案裡有相關的描寫敘述。# the boot image, which is a collection of other images.
INTERNAL_BOOTIMAGE_ARGS := \
$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \
--kernel $(INSTALLED_KERNEL_TARGET) \
--ramdisk $(INSTALLED_RAMDISK_TARGET)
在system/core/mkbootimg/bootimg.h中有詳細打包的描寫敘述。
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
從上面可以清晰的看出boot.img檔案的構成主要是將kernel以及ramdisk.img檔案打包而且加入檔案頭完畢。
假設須要改動小米官方給出的檔案的情況下,能夠使用
#./split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 6695672 (0x00662af8)
Ramdisk size: 1276106 (0x001378ca)
Second size: 0 (0x00000000)
Board name:
Command line:
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... Complete.
解包ramdisk檔案。首先要建立一個目錄用於存放解壓後的檔案,進入目錄之後,運行以下命令:
#gzip -dc ../boot.img-ramdisk.gz | cpio -i
對檔案作出改動之後,須要又一次做成boot.img檔案。
使用mkbootfs工具(mkbootfs工具是編譯完成Android源碼以後。就會在~/android-src/out/host/linux-x86/bin自己主動產生)來又一次建立ramdisk。能夠使用例如以下命令來操作:
#mkbootfs ./ramdisk | gzip > ramdisk-new.gz
使用mkbootimg來又一次建立boot.img,mkbootimg也能夠在~/android-src/out/host/linux-x86/bin檔案夾中能夠找到:
#mkbootimg --cmdline ‘no_console_suspend=1 console=null‘ --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img
android系統又一次刷ROM簡記(二)
android系統又一次刷ROM簡記(一)