ramdisk 的 root filesystem

使用 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

你可能感兴趣的:(ramdisk 的 root filesystem)