splash1 :開(kāi)機畫(huà)面,Nandroid備份為splash1.img
recovery :設備序列號為mtd1,該分區是恢復模式(即開(kāi)機按Home+End進(jìn)入的界面),Nandroid備份為recovery.img
boot :設備序列號為mtd2,底層操作系統內核啟動(dòng)分區,掛載 為/目錄,Nandroid備份為boot.img
system :設備序列號為mtd3,G1的Android核心平臺,掛 載為/system目錄,通常為只讀,Nandroid備份為system.img
cache :設備序列號為mtd4,G1的緩存臨時(shí)文件夾,掛載為 /cache目錄,事實(shí)上除了T-mobile的OTA更新外,別無(wú)用處,Nandroid備份為cache.img
userdata :設備序列號為mtd5,G1中用戶(hù)安裝的軟件以及各種 數據,掛載為/data目錄,Nandroid備份為data.img
android文件系統制作教程(2) —- 常用的fastboot命令
android文件系統制作教程(3) —- 利用Makefile制作update.zip
從update.zip這個(gè)刷機包反推的介紹整個(gè)android文件系統的制作過(guò)程
并編寫(xiě)了一個(gè)Makefile文件,利用 Makefile的”依賴(lài)檢查”機制管理各種文件的生成步驟和依賴(lài)關(guān)系;
將所有的文件都放在/home/xiaoliang/workspace 目錄下,目錄下有這些文件夾:
auto-sign data system META-INF root
兩個(gè)環(huán)境變量含義和必須的目錄:
SRC_HOME : android源代碼所在的目錄,例如我放在 /home/xiaoliang/android_src 下
JAVA_HOME: JAVA SDK的目錄,我的是 /server/jdk1.5.0_21
#設置環(huán)境變量,JAVA_HOME默認就有
SRC_HOME=/home/liangwei/android_src
#它依賴(lài)于system,data,META-INF三個(gè)目錄和一個(gè)boot.img鏡像,并且它需要簽名
update.zip : boot.img $(shell find system data META-INF)
#生成update_unsign.zip
zip -qr update_unsign.zip system data META-INF boot.img
#簽名
$(JAVA_HOME)/bin/java -jar auto-sign/signapk.jar auto-sign/testkey.x509.pem auto-sign/testkey.pk8 update_unsign.zip update.zip
#刪除中間文件
rm -f update_unsign.zip
#依賴(lài)于ramdisk.img 和 kernel.img 兩個(gè)鏡像
boot.img:ramdisk.img kernel.img
#使用mkbootimg制作
$(SRC_HOME)/out/host/linux-x86/bin/mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel kernel.img --ramdisk ramdisk.img -o boot.img
#其實(shí)它就是源碼編譯后生成的zImage,拷貝過(guò)來(lái)改個(gè)名字
kernel.img:$(SRC_HOME)/kernel/msm/arch/arm/boot/zImage
cp -f $(SRC_HOME)/kernel/msm/arch/arm/boot/zImage ./kernel.img
#是將root文件夾使用mkbootfs制作的鏡像
ramdisk.img:$(shell find root)
$(SRC_HOME)/out/host/linux-x86/bin/mkbootfs ./root |gzip > ramdisk.img
啟動(dòng)部分: root文件夾 + zImage內核鏡像 = boot.img
系統文件部分: system文件夾
用戶(hù)文件部分: data文件夾
就是:root + system + data + zIamage = update.zip
root,system,data文件夾: 來(lái)自”$(SRC_HOME)/out/target/product/generic”
zIamage: 來(lái)自”$(SRC_HOME)/kernel/msm/arch/arm/boot/zImage”
該需要自己創(chuàng )建,并且里面包含1個(gè)文件 : com/google/android/update-script ,內容為:
show_progress 0.500000 0
format SYSTEM:
copy_dir PACKAGE:system SYSTEM:
set_perm_recursive 0 0 0755 0644 SYSTEM:
set_perm_recursive 0 2000 0755 0755 SYSTEM:bin
set_perm 0 3003 02755 SYSTEM:bin/netcfg
set_perm 0 3004 02755 SYSTEM:bin/ping
set_perm 0 0 04755 SYSTEM:bin/su
set_perm 1002 1002 0440 SYSTEM:etc/dbus.conf
set_perm 1014 2000 0550 SYSTEM:etc/dhcpcd/dhcpcd-run-hooks
set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh
set_perm_recursive 0 0 0755 0555 SYSTEM:etc/ppp
show_progress 0.200000 0
delete_recursive DATA:dalvik-cache
copy_dir PACKAGE:data DATA:
set_perm_recursive 1000 1000 0771 0555 DATA:dalvik-cache
write_raw_image PACKAGE:boot.img BOOT:
show_progress 0.200000 10
android文件系統制作教程(4) —- makefile腳本,制作各種單獨的分區文件ramdisk.img,system.img,boot.img
#***********************************
# build android rom script
#***********************************
SRC_HOME=/home/liangwei/android_src
update.zip : boot.img $(shell find system data META-INF)
rm -rf update_unsign.zip
zip -qr update_unsign.zip system data META-INF boot.img
$(JAVA_HOME)/bin/java -jar auto-sign/signapk.jar auto-sign/testkey.x509.pem auto-sign/testkey.pk8 update_unsign.zip update.zip
rm -f update_unsign.zip
boot.img:ramdisk.img kernel.img
$(SRC_HOME)/out/host/linux-x86/bin/mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel kernel.img --ramdisk ramdisk.img -o boot.img
kernel.img:$(SRC_HOME)/kernel/msm/arch/arm/boot/zImage
cp -f $(SRC_HOME)/kernel/msm/arch/arm/boot/zImage ./kernel.img
kernel-qemu:$(SRC_HOME)/kernel/common/arch/arm/boot/zImage
cp -f $(SRC_HOME)/kernel/common/arch/arm/boot/zImage ./kernel-qemu
ramdisk.img:$(shell find root)
$(SRC_HOME)/out/host/linux-x86/bin/mkbootfs ./root |gzip > ramdisk.img
system.img : $(shell find system)
$(SRC_HOME)/out/host/linux-x86/bin/mkyaffs2image ./system system.img
userdata.img:$(shell find data)
$(SRC_HOME)/out/host/linux-x86/bin/mkyaffs2image ./data userdata.img
userdata-qemu.img:userdata.img
rm -rf userdata-qemu.img
cp userdata.img userdata-qemu.img
initlogo.rle:logo.png
convert -depth 8 logo.png rgb:logo.raw
$(SRC_HOME)/out/host/linux-x86/bin/rgb2565 -rle <logo.raw >initlogo.rle
cp -rf initlogo.rle data/data/com.android.mysplash/
rm -rf logo.raw
.PHONY:run
run:system.img ramdisk.img kernel-qemu userdata-qemu.img
/server/android-sdk-linux_86/tools/emulator -show-kernel -sysdir ./
android文件系統制作教程(5) —- 兩行命令從png制作啟動(dòng)界面initlogo.rle
用圖片工具編輯好想要的png之后,保存為logo.png
在logo.png所在命令下執行命令:
#使用ImageMagick自帶的convert命令,進(jìn)行raw格式轉換
convert -depth 8 logo.png rgb:logo.raw
#android自帶的rgb2565工具,對raw文件進(jìn)行rle565格式轉換
$(SRC_HOME)/out/host/linux-x86/bin/rgb2565 -rle <logo.raw >initlogo.rle
#然后將initlogo.rle拷貝到android系統根目錄,也就是root目錄底下
cp initlogo.rle root/
#刪除中間文件
rm -f logo.raw
聯(lián)系客服