小记:
ramdisk.img ramdisk-uboot.img打包
cd out/target/product/xxxx
../../../host/linux-x86/bin/mkbootfs root/ | ../../../host/linux-x86/bin/minigzip > ramdisk.img
mkimage -A arm -O linux -T ramdisk -C none -a 0x40800000 -n "ramdisk" -d ramdisk.img ramdisk-uboot.img
这样你可以修改root下面的文件,然后打包成ramdisk,通过fastboot flash ramdisk ramdisk-uboot.img 烧入设备。
查看帮助信息mkimage -h:
Usage:
./mkimage -l image
-l ==> list image header information 镜像头信息(0x40个字节的头)
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'指定CPU的体系结构,取值 表示的体系结构:
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、
solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、
u-boot、rtems、artos
-T ==> set image type to 'type' 指定映象类型,可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C ==> set compression type 'comp' 指定映象压缩方式,可以取以下值:
none 不压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方式
-a ==> set load address to 'addr' (hex) 指定映象在内存中的加载地址,映象下载到内存中时的始地址
-e ==> set entry point to 'ep' (hex) 指定映象运行的入口点地址,就是-a参数指定的值加上0x40
因为前面有个mkimage添加的0x40个字节的头
-n ==> set image name to 'name' 指定映象名
-d ==> use image data from 'datafile' 指定制作映象的源文件
-x ==> set XIP (execute in place) 即芯片内执行,指应用程序可以直接在flash闪存内运行
备注:
ramdisk解包
首先在linux终端下使用命令file ramdisk.img,打印出如下字符ramdisk.img: gzip compressed data, from Unix,可以看出,它是一个gzip压缩的格式,下面对其进行解压,使用fedora自带的工具进行解压,或者使用gunzip进行解压(可能需要将扩展名改为.gz),可以看到解压出一个新的ramdisk.img,这个ramdisk.img是使用cpio压缩的,可以使用cpio命令对其进行解压,cpio –i –F ramdisk.img,解压后可以看到生成了一些文件夹和文件。看到这些文件就会明白,它和root目录下的内容完全一样。说明了ramdisk.img其实是对root目录的打包和压缩。
system.img打包
使用mkyaffs2image或者make_ext4fs 根据build/core/Makefile里面的INTERNAL_USERIMAGES_USE_EXT标志位决定。(其他版本的Makefile可能不一样,标志位应该也不一样。)
mkyaffs2image参考网上的:
../../../host/linux-x86/bin/mkyaffs2image system system.img
如果加入参数 -f fix file stat for devices,理论上用于修改文件状态而已,无法用于添加文件。
make_ext4fs,制作ext4 文件系统:
在build/core/Makefile里面,找到build-systemimage-target,加入个echo “===============”用于定位,然后全编译一遍,根据输出的==============你就可以知道系统打包system.img所用的参数了,当然如果整个系统都是你负责,那参数你肯定知道啦。
我这边是
make_ext4fs -s -l 314572800 -a system out/target/product/mid_c1002/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/mid_c1002/system
-l 是len ,应该是分区的大小
-a 是android的挂载点
如果使用make_ext4fs -h可以看到:
make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ] [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ] [ -L <label> ] [ -f ] [ -a <android mountpoint> ] <filename> [<directory>]
注意make_ext4fs 是在编译完源码后生成的,在out/host/linux-x86/bin/下面。
recovery 打包过程
http://blog.csdn.net/zjujoe/article/details/6230575
如果系统是用uboot启动,则打包是跟打包ramdisk一样,只是地址不同。
$(MKBOOTFS) $(TARGET_RECOVERYIMAGE_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
mkimage -A arm -O linux -T ramdisk -C none -a 0x30800000 -n "ramdisk" -d $(ramdisk_recovery) $(recovery_ramdisk_uboot)