使用 ramdisk 启动 linux ,需要以下配置:
1. linux 的配置文件 make menuconfig ->
选择 Driver -> block device -> ramdisk driver support
Genreral setup -> initrd support /* only support ,we didnot spesify the path or something
2.Linux bootargs
必须指定 root=/dev/ram 以及 ramdisk_size=40960 initrd=$ramdiskLoadAddr,$ramdiskSize
参考 9g45 上面的制作笔记:
设置参数:
"bootargs=mem=128M console=ttyS0,115200 initrd=$ramdiskLoadAddr,$ramdiskSize ubi.mtd=1 ubi.mtd=2 rw root=/dev/ram rw init=/init ramdisk_size=40960 androidboot.console=ttyS0 rootdelay=1 androidboot.mode=200" \
"bootcmd=nand read.i $kernelLoadAddr $kernelUbootAddr $kernelSize;nand read.i $ramdiskLoadAddr $ramdiskAddr $ramdiskSize; bootm $kernelLoadAddr $ramdiskLoadAddr"
其中使用参数没有指定 ramdisk_size=40960 的时候,系统无法 mount root filesystem。
40960 = 4 × 10240 40M
Android ramdisk 的修改
inflate_ramdisk()
{
cp $ANDROID_PATCH/out/target/product/$PRODUCT_DEVICE/ramdisk.img ramdisk.cpio.gz
gzip -d ramdisk.cpio.gz
[ -e "tmp" ] ||{ echo "mkdir tmp"; mkdir tmp;}
mv -f ramdisk.cpio tmp/
cd tmp
cpio -i -F ramdisk.cpio
cd ..
}
recreate_ramdisk()
{
cd tmp
rm ramdisk.cpio
cat ../list | cpio -o -H newc -O ../ramdisk.cpio
cd ..
gzip ramdisk.cpio
mv ramdisk.cpio.gz ramdisk.img
}
list 的生成基于 cpio -i -t -F ramdisk.cpio 。 如果使用 ls 命令,不能得到整个包的全部。
9g45 上面发现 sbin 目录下面的东西没有被打包。这里可以修改脚本使用 find 命令可以查找全部需要的文件:
find tmp/ -depth -print