- 论坛徽章:
- 0
|
在嵌入式Linux开发中, 往往需要为目标系统设置根文件系统, 这包括: 准备好根文件系统所需的内容, 选择目标系统的文件系统类型, 将根文件系统的内容转换为所用文件系统的格式, 将根文件系统安装到目标系统上. (这里假设目标系统的存储设备已经配置好了)
Ubuntu/Debian上默认未安装MTD工具, 首先安装它们:
$ sudo apt-get install mtd-tools
Ramdisk
The RAM disk driver is a way to use main system memory as a block device.
我们可以将Ramdisk和一般的块设备一样使用. 查看ramdisk信息:
$ ls -l /dev/ram*
brw-rw---- 1 root disk 1, 0 2006-09-18 17:45 /dev/ram0brw-rw---- 1 root disk 1, 1 2006-09-18 17:45 /dev/ram1...
Ramdisk的优点: 读写速度非常快, 适合用来制作initrd.
Ramdisk的缺点: 不具有永久性, 断电后无法保存. 且ramdisk大小不可更改, 浪费ram.
Ramdisk制作方法
可以利用空闲的块设备(比如软盘或未用的分区), 主机系统的RAM disk(/dev/ram0), loop设备来制作Ramdisk. /Documentation/ramdisk.txt中介绍的是使用/dev/ram0来制作ramdisk.
使用loop设备来制作Ramdisk最为简单:
# dd if=/dev/zero of=ramdisk.image bs=1k count=8192
使用dd命令建立一个8192KB的文件系统映像. 以/dev/zero对其初始化.
[color="#555555"]如果要向板子的文件系统中添加内容, [color="#555555"]不要修改既有的ramdisk, 而是重新创建一个ramdisk. 这样做是为了让映像获得更大的压缩比.
ramdisk只是个块设备, 需要将它格式化为特定的文件系统后才能使用:
# mke2fs -F -v -m0 ramdisk.image
-F : 迫使mke2fs在ramdisk.image上运行, 否则, mke2fs会抱怨ramdisk.image不是块设备.
-v : 以verbose模式运行
-m0 : 指定不必在文件系统上为"超级用户"保留任何block.(一般嵌入式Linux都是单用户系统).
也可以将ramdisk.image格式化为minix文件系统:
# mkfs.minix ramdisk.image
完成之后, 可以用file命令看到: ramdisk.image: Linux rev 1.0 ext2 filesystem data
将ramdisk格式化后, 就可以挂在它(假设挂在到当前目录中的ramdisk目录)
# mount -o loop ramdisk.image ramdisk
initrd
从字面意思就可以看出来, initrd = initial RamDisk. initrd被用来在flash中储存压缩过的文件系统.
在桌面或服务器版的Linux中, 在实际的根文件系统可用之前, initrd先被内核挂载为临时的根文件系统. 当完成了加载, 启动之后, initrd可能被卸载. 但在嵌入式Linux系统中, initrd往往被用来做为真正的根文件系统.
initrd和上面介绍的ramdisk有着不可分割的联系, 在/Documentation/ramdisk.txt中, 就有这样一句话:
It
[/url]
is required for initrd, an initial filesystem used if you need to load modules
[url=http://lxr.free-electrons.com/source/Documentation/ramdisk.txt#017]
in order to access the root filesystem.
据我理解, initrd就是在已经被格式化后的ramdisk中加入文件, 然后将其压缩的产物. 当然, ramdisk中的文件系统中要包含用于初始化的文件(可执行文件, 脚本或链接).
上接ramdisk的例子, 把ramdisk.image挂载之后, 向里面添加必须的文件. 然后将其卸载, 压缩:
构建一个可用的initrd这里不再赘述. 可参考本blog的:
开发板实务(5)——构建根文件系统
# umount ramdisk
# gzip -9 ramdisk -9 : 获得最大压缩比
tmpfs
与ramdisk, initrd不同, tmpfs是基于VM的, 具体可参考本blog的
开发板实务(4)——分析板子的文件系统
未完, 待续....
Reference
1, LinuxDevice.com上面的“
Flash Filesystems for Embedded Linux Systems
", 介绍了用于Nor Flash中的文件系统.
2, 内核源码数的/Documentation/ramdisk.txt介绍了ramdisk, Documentation/initrd.txt中介绍了initrd. 必看!
3, IBM dw上的
Linux初始RAM磁盘initrd)概述
4,
Linux中的Ramdisk与Initrd
5, , 第8章.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13991/showart_173007.html |
|