分享

android文件系统制作教程...

 昵称128678 2011-06-10

android文件系统制作教程

文章分类:移动开发

android文件系统制作教程(1) —- 认识android文件系统分区

 

 

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

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多