嵌入式linux系统的开发——文件系统的分区和挂载
前言
当我们新买的硬盘安装在电脑上后,必须要对硬盘分区和文件系统格式化后才能使操作系统能够在分区内正常读写和保存文件。所谓分区即是将硬盘划分为多个空间范围,我们可以在不同的分区内存放不同的文件以便于管理。而对分区后的硬盘空间格式化则是按文件系统格式划分存储单元,使操作系统可以识别和使用这些空间范围。可以形象地把一个硬盘相当于一个城市,分区则是将城市分为几个区,格式化即是在每个区内指定相应的街道、门牌,这样人们就能快速的找到指定的地点。
嵌入式Linux中广泛使用Flash作为存储介质,Flash具有高可靠性、高存储密度、低价格、非易失、擦写方便等优点。在Flash上也可以运行文件系统,其中针对Flash存储器的特性而设计的jffs2(journaling flash file system version 2)文件系统十分合适。由于Flash中各个块的最大擦除次数有限,jffs2文件系统具有磨损均衡功能,可以均匀地使用各个块,延长Flash的整体寿命。jffs2文件系统还具有对存储空间的碎片收集功能,以提高Flash存储器的利用率。最为重要的是作为日志型文件系统,jff2文件系统能够避免意外掉电而导致数据丢失的情况。
在Linux中为了文件系统更好地访问Flash存储器而设计了mtd(memory technology devices), 提供了对Flash操作的一系列标准接口,这样jffs2文件系统就可建立在mtd中的mtd_block模块之上对FLash进行操作。
一般情况下Linux的基本分区会包括uboot、kernel和rootfs,我们可以通过挂载分区的方式接入更多的分区,本文主要介绍如何在Flash介质上实现分区和jffs2文件系统格式化,并将分区挂载至Linux系统中。
分区与目录树的关系
Linux内所有数据都以文件的形态来呈现,而所有的文件都在目录树结构下。目录树(directory tree)是以根目录为主,向下呈现分支状的一种文件系统目录结构,系统指定了每个目录的作用和其中的文件类型,最上层是根目录(/),/dev、/etc、/mnt等其余所有的目录都为根目录的子节点。根文件系统分区挂载到了根目录下,如果没有其他任何分区挂载,根目录下的所有目录都在根文件系统的分区下,在任何目录下读写操作实际操作的是根文件系统分区。
当我们想使用其他分区时,必须将这个分区挂载到一个已经存在的目录下(如/mnt等),或者挂载到自己建立的目录(如/mnt/media),挂载后这个目录成为这个分区的访问入口,而这个目录下以前的内容将不再可用,因此像/lib、/dev、/etc、/usr这类存放系统文件的目录不能进行挂载,否则操作系统将无法找到所需的文件而引起崩溃。
文件系统格式
Linux系统中每个分区都需要有一个文件系统,这些分属不同分区的、单独的文件系统分别挂载到目录树中形成一个系统的目录层次结构。可以使用flash_erase工具以jffs2文件系统对分区进行格式化。
flash_erase工具的使用说明如下。 root@Yuanxiao:/sbin# flash_erase --help Usage:
flash_erase [options] MTD_DEVICE <start offset> <block count> Erase
blocks of the specified MTD device. Specify a count of 0 to erase to
end of device.-j, --jffs2 format the device for jffs2 -N, --noskipbad
don't skip bad blocks -u, --unlock unlock sectors before
erasing -q, --quiet do not display progress messages--silent same as --quiet --help display this help and exit --version output version information and exit
Flash存储器的分区信息位于dts文件中,cat /proc/mtd命令可查看分区情况。此处对mtd5分区以jffs2文件系统进行格式化,由于mtd5分区的size为0xe80000,擦除大小为0x10000,因此需要232个块操作。分区格式化后可见每个块的前12个字节内容由FF变为文件系统的头部信息。
分区挂载实现
lsblk命令可列出所有可用的块设备的信息,从中可知Flash上分区情况和挂载点。mount命令将mtd5分区的文件系统挂载到指定的/mnt/media目录下,-t选项指明了以jffs2文件系统类型挂载,挂载后mtd5分区和/mnt/media目录关联起来,我们访问/mnt/media目录即访问mtd5分区。
总结
当分区挂载完成后就可正常访问分区,我们可使用df命令查看当前被挂载分区的空间使用情况,包括分区总容量、已用容量、可用容量、挂载点等信息显示,-h 选项以方便阅读方式显示,-T选项会显示文件系统的类型。