ramdisk制作

本文详细介绍了如何将ramdisk与内核Image分离存储并引导的方案,包括Busybox文件系统的制作、ramdisk文件系统的打包与压缩、内核配置、U-boot参数传递及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写的一篇制作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版本和交叉编译器版本,已经挂载上了但是起不来基本就是制作的文件系统有问题;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值