生成ramdisk-uboot.img和解压ramdisk-uboot.img
- out/host/linux-x86/bin/mkbootfs out/target/product/903/root | out/host/linux-x86/bin/minigzip > out/target/product/903/ramdisk.img
- mkimage -A arm -O linux -T ramdisk -C none -a 0x20800000 -n "ramdisk" -d out/target/product/903/ramdisk.img out/target/product/903/ramdisk-uboot.img
解压:
How to extract the ramdisk content from uboot format ramdisk image
假設有一包ramdisk "initrd.gz",使用u-boot下的mkimage建立uboot format ramdisk image (ramdisk-uboot.img)在原本的ramdisk image前加64 bytes檔頭資訊:
tools/mkimage -A arm -O linux -T ramdisk -C none -a 0x20800000 -n "ramdisk" -d initrd.gz ramdisk-uboot.img
可以用下面的指令 extract the ramdisk content (init.gz) from uboot format ramdisk image
dd if=ramdisk-uboot.img of=ramdisk.img.gz bs=1 skip=64
android编译后生成的ramdisk是一个gzip格式的文件
# file ramdisk.img
ramdisk.img: gzip compressed data, from Unix
那么先解压,因为后缀不是.gz,所以用-s 选项
gunzip -S .img ramdisk.img
这样生成了一个新文件ramdisk
查看是什么格式
# file ramdisk
ramdisk: ASCII cpio archive (SVR4 with no CRC)
ok,是一个cpio格式的文件
再次解压
先创建一个目录,假设叫rfs,并进入
# cpio -i -F ../ramdisk
512 blocks
这下,你就能看见并操作ramdisk里面的内容了。当然你也可以直接在外面进行操作,但是还是建议把cpio解压缩出来的内容全部集中在一个文件夹里面,因为一会我们还要将其压缩成新的ramdisk.img。
OK,现在开始修改步骤吧。用任何一款编辑器打开init.rc,首先在PATH那里加上你的Busybox安装路径,然后注释内容,我们要手工启动他们。
# zygote { # exec / system / bin / app_process # args { # 0 - Xzygote # 1 / system / bin # 2 –zygote # } # autostart 1 # }# runtime { # exec / system / bin / runtime # autostart 1 # }
在这里需要注意,不要同时把两者都注释了,注释某一个,再试验手工启动它,如果两者同时注释我这里有问题,无法启动。
好,接下来,使用下列命令重新打包成镜像
cpio -i -t -F ../ramdisk.img > list
cpio -o -H newc -O lk.img < list
当前目录下生成的lk.img就是我们的新镜像了。使用自己的镜像启动emulator;