android系統又一次刷ROM簡記(一)
當須要對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簡記(一)