博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

AC郎拿度

我哼着小曲, 当当足球先生, 捧捧世界杯, 过过门将, 推推远角, 踩踩单车, 玩玩牛尾巴, 泡泡名模...
   zzzppp.cublog.cn
关于作者  
我好人啊...
daily.zp@gmail.com

我的分类  




Embedded Linux常见文件系统介绍
在嵌入式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/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章.


 发表于: 2006-09-18,修改于: 2006-09-18 21:18 已浏览1659次,有评论1条 推荐 投诉

  网友评论
  corncc 时间:2007-03-06 16:17:15 IP地址:218.206.193.★
RAMDISK应该也属于initrd,因为RAMDISK需要initrd来调入到内存中。initrd命令一般出现在grub或者lilo的配置文件中,在2.4内核中与/dev/ram0匹配。


  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.00814

京ICP证041476号