Embedded Linux常见文件系统介绍
时间:2006-09-18 来源:zzzppp
在嵌入式Linux开发中, 往往需要为目标系统设置根文件系统, 这包括: 准备好根文件系统所需的内容, 选择目标系统的文件系统类型, 将根文件系统的内容转换为所用文件系统的格式, 将根文件系统安装到目标系统上. (这里假设目标系统的存储设备已经配置好了)
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/ram0
brw-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对其初始化.
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 is required for initrd, an initial filesystem used if you need to load modules in order to access the root filesystem.
据我理解, initrd就是在已经被格式化后的ramdisk中加入文件, 然后将其压缩的产物. 当然, ramdisk中的文件系统中要包含用于初始化的文件(可执行文件, 脚本或链接).
上接ramdisk的例子, 把ramdisk.image挂载之后, 向里面添加必须的文件. 然后将其卸载, 压缩:
# 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, <构建嵌入式Linux系统>, 第8章.
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/ram0
brw-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对其初始化.
如果要向板子的文件系统中添加内容, 不要修改既有的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 is required for initrd, an initial filesystem used if you need to load modules 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, <构建嵌入式Linux系统>, 第8章.
相关阅读 更多 +