FAT 文件系统
FAT(File Allocation Table)是与 Windows 兼容的文件系统,FatFs的编写遵循ANSIC,并且完全与磁盘 I/O 层分开,他独立(不依赖)于硬件架构。
FatFs文件系统的主要特点:
- Windows兼容的FAT文件系统;
- 不依赖于平台,易于移植;
- 代码和工作区占用空间非常小;
- 多种配置选项;
NFS 文件系统
NFS(Network File System)即网络文件系统,有Sun公司于1984年发布的分散式文件系统协议。也是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在NFS的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。NFS 用于文件分享不太适合大型的分散式系统。
NFS的主要特点:
- 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到;
- 用户不必在每个网络上的机器都有一个相同的目录,相同的目录可以被放在 NFS服务器上并且在网络上处处可用;
- 诸如软驱,CDROM 之类的存储设备可以在网络上面被其他机器使用,这可以减少整个网络上的可移动介质设备的数量。
ROM文件系统
ROMFS是一种相对简单、占用空间较小的只读文件系统,具备体积小,可靠性好,读取速度快等优点。同时支持目录,符号链接,硬链接,设备文件。
ROMFS是一种只读的文件系统,它使用顺序存储方式,所有数据,包括目录、链接等都按目录树的顺序存放,相对其他大型文件系统而言,ROMFS 非常节省空间。通常 ROMFS在嵌入式设备中作为根文件系统或者用于保存 bootloader 以便引导系统启动。
ROMFS 使用顺序存储方式,所有数据都是顺序存放的。因此 ROMFS 中的数据一旦确定就无法修改,这是 ROMFS 只能是一种只读文件系统的原因,它的数据存储方式决定了无法对 ROMFS 进行写操作。由于采用了顺序存放策略,ROMFS 中每个文件的数据都能连续存放,读取过程中只需要一次寻址操作,进而就可以读入整块数据,因此 ROMFS 中读取数据效率很高。
RAM 文件系统
RAMFS 将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制。将一些经常被访问而又不会更改的文件放在内存中,可以明显地提高系统的性能,而且在设备的调试初期其他 Flash 类型的文件系统还未能正常工作时,使用内存型文件系统可以方便设备的调试。
ROOT文件系统
ROOTFS(根文件系统)是一种特殊的文件系统,根文件系统是内核启动时挂载的第一个文件系统,因此根文件系统包括了系统启动时所必须的目录和关键性的文件,例如内核启动时所必需的 etc 目录,以及系统命令 bin 目录等,任何包括这些系统启动所必须的文件都可以成为根文件系统。
有些操作系统的 ROOTFS 属于虚拟类型的根文件系统,因为此文件系统并不存在于
具体的物理磁盘中,而是系统启动后动态创建的,并将此系统保存于内存中。
ROOTFS 的目录结构,如表 1 所示。
表 1 根文件系统目录结构
根文件系统 | 典型符号链接 | 功能 |
---|---|---|
/ tmp | /yaffs2/n1/tmp | 存放临时文件 |
/var | /yaffs2/n1/var | 存放可变的数据 |
/root | /yaffs2/n1/root | 根用户的目录 |
/home | /yaffs2/n1/home | 普通用户的目录 |
/apps | /yaffs2/n1/apps | 存放应用程序 |
/sbin | /yaffs2/n1/sbin | 系统级的可执行程序 |
/bin | /yaffs2/n1/bin | 普通的可执行程序 |
/usr | /yaffs2/n1/usr | 存放共享数据 |
/lib | /yaffs2/n1/lib | 存放共享库和内核模块 |
/qt | /yaffs2/n1/qt | 存放 Qt 相关文件 |
/ftk | /yaffs2/n1/ftk | 存放 FTK 相关文件 |
/etc | /yaffs2/n0/etc | 存放常用配置文件 |
/boot | /yaffs2/n0/boot | 存放加载器所需的文件 |
/usb | 无 | USB 挂载根节点 |
/yaffs2 | 无 | YAFFS 文件系统分区 |
/proc | 无 | PROC 文件系统根节点 |
/media | 无 | 移动设备挂载根节点 |
/mnt | 无 | 卷标挂载根节点 |
/dev | 无 | 设备挂载根节点 |
PROC 文件系统
为了方便访问内核信息,有些操作系统会提供 PROC 虚拟文件系统,该文件系统存在于/proc 目录,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。之所以将/proc 文件系统称为虚拟文件系统,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成。
/proc 目录下的文件及目录说明如表 2 所示。
文件/目录 | 描述(进程属性) |
---|---|
1 | 进程 ID 为 1 的进程信息目录 |
ksymbol | 内核符号表文件 |
posix | POSIX 子系统信息目录 |
net | 网络子系统信息目录 |
power | 电源管理子系统信息目录 |
fs | 文件系统子系统信息目录 |
version | 当前系统运行的内核版本号信息文件 |
kernel | 内核子系统信息目录 |
cpuinfo | 处理器相关信息文件 |
bspmem | 每个物理存储器设备(RAM 或 ROM) 在系统内存中的映射信息文件 |
self | 辅助性信息目录 |
yaffs | YAFFS 文件系统信息文件 |
通常使用脚本来访问/proc 目录下的文件,也可以从程序中使用常规 I/O 系统调用来访
问/proc 目录下的文件。但是在访问这些文件时,有以下限制:
- /proc 目录下的一些文件是只读的,即这些文件仅用于显示内核信息,但无法对其进行修改。/proc/pid
- 目录下的大多数文件就属于此类型。 /proc 目录下一些文件仅能由文件拥有者(或超级用户所属进程)读取。 除了/proc/pid
- 子目录中的文件,/proc 目录的其他文件大多属于 root 用户,并且仅有 root 用户能够修改那些可修改的文件。
YAFFS 文件系统
YAFFS(Yet Another Flash File System)是一个专门为 NAND Flash 存储器设计的嵌入式日志型文件系统,适用于大容量的存储设备,并且是在 GPL 协议下发布,可在其网站免费获得源代码。
YAFFS 是基于日志的文件系统,提供磨损平衡和掉电恢复的健壮性。它还为大容量的Flash 芯片做了很好的调整,针对启动时间和 RAM 的使用做了优化,它适用于大容量的存储设备。