嵌入式Linux开发学习rootfs通过ramdisk挂载技巧
Posted 与光同程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式Linux开发学习rootfs通过ramdisk挂载技巧相关的知识,希望对你有一定的参考价值。
概述
在工作中发现在很多产品的研发中总是会采用initramfs文件系统来作为挂载rootfs的方式,所以仔细了解了一下怎么挂载initramfs文件系统。
内核配置
首先必须确保内核是支持ramdisk的需要做一些配置
The [configuration](https://so.csdn.net/so/search?q=configuration&spm=1001.2101.3001.7020) of the kernel is as follow:
1) General setup-->[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
[*] Support initial ramdisks compressed using gzip
[*] Support initial ramdisks compressed using bzip2
2)device driver-->Block devices--> Loopback device support
RAM block device support
(16384) Default RAM disk size (kbytes)
3)ext2 filesystem support, enalbed by default
uboot 设置启动参数
如果启动流程并不复杂可以直接设置启动命令行,
CONFIG_BOOTCOMMAND
下面是我在qemu vexpress仿真平台上 通过模拟mmc
加载rootfs.cpio.gz 到内存 然后启动的设置
#define CONFIG_BOOTCOMMAND_RAM\\
"setenv bootargs root=/dev/ram0 rootfstype=ext2 rw "\\
"console=ttyAMA0 rdinit=/linuxrc initrd=0x61000000,100M ;"\\
"load mmc 0:2 0x60003000 zImage; "\\
"load mmc 0:2 0x60500000 vexpress-v2p-ca9.dtb; "\\
"load mmc 0:4 0x61000000 rootfs.cpio.gz; "\\
"bootz 0x60003000 - 0x60500000 ; "
当然 这只是一种方法,听说还可以使用mkimage工具
将rootfs.cpio.gz打包一层 然后直接传参数给 bootz
就像这样
bootz 0x60003000 0x61000000 0x60500000
总结
在使用initramfs的过程中我感觉相比于传统的我们直接
挂载块设备/dev/mmcblk0 /mmc/sda1 之类的挂载点来看
这种设置方式有其独特的优势:
- 相比于读写块设备 ,读写ram总归是会快很多的,系统性能会有所提高。
- 可以避免一些需要频繁擦写数据的情况对于块设备的消耗,可以提升设备寿命,对于不怎么开关机长期保持上电状态的设备比如交换机,网桥之类尤其如此。
- 所有数据都是临时的,用户怎么折腾都不会改变固件
当然缺点也是明显的:
ram大小是有限的,ram总归是比flash金贵,文件系统如果太大就不好使了,同时对于用户产生数据的保存直接存到ram的根文件系统是没用的。
当然这个问题也非常好解决,直接将块设备挂载到内存文件系统中的一个挂载点上,然后需要保存的用户数据保存到那个挂载点上的文件夹即可。
以上是关于嵌入式Linux开发学习rootfs通过ramdisk挂载技巧的主要内容,如果未能解决你的问题,请参考以下文章