splash1 :開機畫面,Nandroid備份為splash1.img
recovery :裝置序號為mtd1,該分區是復原模式(即開機按Home+End進入的介面),Nandroid備份為recovery.img
boot :裝置序號為mtd2,底層作業系統核心開機磁碟分割,掛載 為/目錄,Nandroid備份為boot.img
system :裝置序號為mtd3,G1的Android核心平台,掛 載為/system目錄,通常為唯讀,Nandroid備份為system.img
cache :裝置序號為mtd4,G1的緩衝臨時檔案夾,掛載為 /cache目錄,事實上除了T-mobile的OTA更新外,別無用處,Nandroid備份為cache.img
userdata :裝置序號為mtd5,G1中使用者安裝的軟體以及各種 資料,掛載為/data目錄,Nandroid備份為data.img
android檔案系統製作教程(2) —- 常用的fastboot命令
重啟G1:
$ fastboot reboot
刷所有分區並重啟手機
$ fastboot flashall
刷指定分區:
$ fastboot flash {partition} {file.img}
如:fastboot flash system /備份/system.img
擦除分區:
$ fastboot erase {partition}
如:fastboot erase system
使用update.zip整體重新整理
$ fastboot update {update.zip}
刷自訂開機畫面:
$ fasboot flash splash1 mysplash.rgb565android檔案系統製作教程(3) —- 利用Makefile製作update.zip
從update.zip這個刷機包反推的介紹整個android檔案系統的製作過程
並編寫了一個Makefile檔案,利用 Makefile的”依賴檢查”機制管理各種檔案的產生步驟和依賴關係;
-1.前期準備將所有的檔案都放在/home/xiaoliang/workspace 目錄下,目錄下有這些檔案夾:
auto-sign data system META-INF root
兩個環境變數含義和必須的目錄:
SRC_HOME : android原始碼所在的目錄,例如我放在 /home/xiaoliang/android_src 下
JAVA_HOME: JAVA SDK的目錄,我的是 /server/jdk1.5.0_21
0.進行一次原始碼編譯
1.然後看下面的Makefile #設定環境變數,JAVA_HOME預設就有
SRC_HOME=/home/liangwei/android_src
#它依賴於system,data,META-INF三個目錄和一個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
#依賴於ramdisk.img 和 kernel.img 兩個鏡像
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
#其實它就是源碼編譯後產生的zImage,拷貝過來改個名字
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
2.總結一下,其實update.zip主要就是三個部分組成: 啟動部分: root檔案夾 + zImage核心鏡像 = boot.img
系統檔案部分: system檔案夾
使用者檔案部分: data檔案夾
就是:root + system + data + zIamage = update.zip
3.檔案的出處 root,system,data檔案夾: 來自”$(SRC_HOME)/out/target/product/generic”
zIamage: 來自”$(SRC_HOME)/kernel/msm/arch/arm/boot/zImage”
4.刷機指令碼:META-INF檔案夾 該需要自己建立,並且裡麵包含1個檔案 : 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製作啟動介面initlogo.rle
用圖片工具編輯好想要的png之後,儲存為logo.png
在logo.png所在命令下執行命令:
#使用ImageMagick內建的convert命令,進行raw格式轉換
convert -depth 8 logo.png rgb:logo.raw
#android內建的rgb2565工具,對raw檔案進行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