1. 初识ramdisk:嵌入式开发的"内存磁盘"
第一次接触ramdisk这个概念时,我正在调试一个嵌入式智能家居网关。设备频繁读写SD卡导致寿命骤减,当时 mentor 说了句"试试把根文件系统放到内存里运行"——这就是我与ramdisk的初次邂逅。简单来说,ramdisk就是把内存模拟成磁盘的技术,在Linux启动时将压缩的文件系统解压到内存中运行。
这种设计在嵌入式领域特别常见,我经手的路由器、工控机、物联网设备几乎都用到了这个技术。它的核心优势有三点:
- 闪电速度:内存读写比闪存快几个数量级
- 延长寿命:避免频繁擦写存储介质
- 干净环境:每次重启都恢复原始状态
在实际项目中,ramdisk通常与内核镜像打包在一起。比如用Buildroot构建系统时,勾选BR2_TARGET_ROOTFS_INITRAMFS选项就会生成包含rootfs的内核镜像。这个设计让我想起瑞士军刀——把常用工具都集成在紧凑空间里,随时可用。
2. 构建ramdisk的三种姿势
2.1 内核配置法
最正统的方式是通过内核配置系统。在.config中添加这些关键配置:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/path/to/rootfs.cpio"
我习惯用menuconfig界面操作,位置在:
Device Drivers -> Block devices -> RAM block device support
General setup -> Initial RAM filesystem support
记得2018年调试RK3399开发板时,就因为漏选CONFIG_BLK_DEV_INITRD导致内核panic,折腾了整整两天。这个教训让我养成了保存配置版本的好习惯。
2.2 Buildroot集成法
对于嵌入式开发,Buildroot是更优雅的选择。在make menuconfig中开启:
Target options -> Filesystem images -> initial RAM filesystem linked into linux kernel
Buildroot会自动完成这些操作:
- 生成rootfs.cpio
- 调用内核构建系统
- 将cpio嵌入内核镜像
有个实用技巧:通过BR2_TARGET_ROOTFS_INITRAMFS_COMPRESSION可以选择压缩算法。gzip压缩率高但耗CPU,LZO则是性能与压缩率的平衡点。
2.3 手工打造法
当需要定制特殊功能时,我会手动构建:
# 生成文件系统目录
mkdir -p rootfs/{bin,dev,etc,lib}
# 制作cpio归档
find rootfs | cp


241

被折叠的 条评论
为什么被折叠?



