android檔案系統製作教程

來源:互聯網
上載者:User

 

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.rgb565

    android檔案系統製作教程(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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.