1. 编译kernel,使kernel支持16M ext2格式的ramdisk
sudo make menuconfig
选中ext2, device drivers -> block devices --> Default RAM disk size 选为16M.
然后make uImage
2.生成ramdisk image
genext2fs -b 16384 -d fs_mini ramdisk_16M
mount到/mnt看下,
sudo mount -t ext2 -o loop ramdisk /mnt
sudo umount /mnt
gzip -v9 ramdisk
3.启动
uboot传给内核的参数, initrd表示init ramdisk放在0x30800000,大小16M,最开始的启动程序是根目录下面的linuxrc程序,控制台为ttySAC0, 根文件系统是/dev/ram
setenv bootargs initrd=0x30800000,16M init=/linuxrc console=ttySAC0 root=/dev/ram
启动,由于根文件系统在上面的命令行传入,所以bootm命令只用输入kernel在内存的地址
bootm 0x30007FC0
4.kernel和ramdisk在内存里面的分布
kernel: 0x30007FC0,大约从0x3000_0000偏移1M开始,这里kernel的大小大约2M,自解压后会更大,所以把ramdisk的空间向后方,偏移到8M开始
遗留问题:
1. 64M内存,可以弄32M的ramdisk吗?
2.内存里面有类ramdisk,那么内核怎么分配内存空间的?