1. 程式人生 > >android系統又一次刷ROM簡記(一)

android系統又一次刷ROM簡記(一)

recover com linu nsf 配置文件 loader ref 編寫 例如

當須要對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簡記(一)