之前写的一篇制作initramfs的总结是将initramfs和内核Image打包在一起的方案,因为我们有款产品需要将ramdisk和Image分开存储,所以这篇文章讲解ramdisk分开引导的方案。
1.Busybox文件系统制作
请参考之前的文章:
https://blog.youkuaiyun.com/m0_38096844/article/details/97786761
2.打包ramdisk文件系统
这里推荐使用系统ramdisk制作工具genext2fs
(1)在虚拟机中使用apt-get安装genext2fs;
(2)打包ramdisk文件系统
genext2fs -b 4096 -d rootfs ramdisk.image //4096为指定打包ramdisk大小,可根据需要调整大小;
(3)压缩ramdisk.image文件
gzip -9 -f ramdisk.image
(4)如果是加载uImage可能还得加个u-boot的头,可利用u-boot源码tools目录下的mkimage工具
mkimage -n 'Ramdisk Image' -A arm -O linux -T ramdisk -C gzip -d ramdisk.image.gz ramdisk.image.gz.uboot
以上一个完整的ramdisk压缩包已经制作完成。
3.内核配置
(1)支持initrd/initramfs
(2)支持ramdisk内存块设备,Default Ram disk size根据自己制作的ramdisk包大小设置
(3)支持EXT2/EXT4等文件系统
4.U-boot参数传递
setenv bootargs root=/dev/ram0 rw initrd=0x21100000,8M init=/linuxrc console=ttyS0,115200n8
initrd指定内核加载ramdisk的内存地址,大小为8M,init指定ramdisk初始化程序
5.注意点
(1)检查内核各项配置是否完整,如ext2、ext4是否支持;
(2)检查ramdisk加载到内存中的位置是否有问题;
INITRD: 0x28000000+0x00500000 is not a memory region - disabling initrd
...
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
(3)检查ramdisk大小和内核中的默认配置是否相差太大,不能识别ramdisk可能是这个问题;
(4)多试几个Busybox版本和交叉编译器版本,已经挂载上了但是起不来基本就是制作的文件系统有问题;