第九章 嵌入式Linux 的文件系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1嵌入式系统第九章嵌入式Linux的文件系统2第九章Agenda9.1Linux的文件系统结构概要9.2MTD9.3嵌入式Linux专用的文件系统9.4如何构造根文件系统9.5Ramdisk39.1Linux的文件系统结构概要9.1.1Linux文件系统的特点9.1.2Mount命令9.1.3文件的类型9.1.4Linux常见的文件系统9.1.5VFS49.1.1Linux文件系统的特点文件系统是指操作系统中于管理文件有关的软件和数据。Linux的文件系统和Windows中的文件系统是有很大的区别的Windows文件系统是以驱动器的盘符为基础的,而且每一个目录是与相应的分区对应,例如“C:\Projects”是指此文件在C盘这个分区下。而Linux恰好相反,文件系统是一个文件树,且它的所有文件和外部设备(如硬盘,光驱等)都是以文件的形式挂结在这个文件树上,例如“/dev/floppy”。对于Windows而言,就是指所有分区都是在一些目录下。总之,在Windows下,目录结构属于分区;Linux下,分区属于目录结构。5Linux的目录结构/mntlibprocsbintmphomeetcusrdevbootvarbingrubrc.dsysconfig...testvbird...cdromfloppy...srcbinsbinlogspoolcache6根文件系统的基本结构目录内容bin必要的用户命令(二进制文件)boot引导加载程序使用的静态文件dev设备文件和其他特殊文件etc系统配置文件,包括启动文件home用户主目录,包括供服务帐号所使用的主目录,如FTPlib必要的链接库,如C链接库、内核模块mnt安装点,用于暂时安装文件系统opt附加的软件套件proc用来提供内核与进程信息的虚拟文件系统rootroot用户的主目录sbin必要的系统管理员命令(二进制文件)tmp暂时性文件usr在下层包含对大多数用户都有用的大量应用程序和文件var监控程序和工具程序所存放的可变数据7Mount在Linux中把每一个分区和某一个目录相对应,以后在对这个目录的操作就是对这个分区的操作,这样就实现了硬件管理手段和软件目录管理手段的统一,这个把分区和目录对应的过程叫做挂载(Mount),而这个挂载在文件树中的位置就是挂载点。这种对应关系可以由用户随时中断和改变。89.1.2Mount命令mount命令的功能是加载指定的文件系统。它的语法如下所示:命令格式:mount[-tvfstype][-ooptions]devicedir其中:1.-tvfstype指定文件系统的类型,通常不必指定。mount会自动选择正确的类型。2.-ooptions主要用来描述设备或档案的挂接方式。3.device要挂接(mount)的设备。4.dir设备在系统上的挂接点(mountpoint)。例如:mount-tnfs-onolock192.168.0.20:/home/mnt/nfs99.1.3文件的类型Linux中的文件类型与Windows中的文件类型有显著区别,其中最显著的区别在于Linux对目录和设备都当作文件来进行处理,这样就简化了对各种不同类型设备的处理,提高了效率。普通文件目录文件链接文件设备文件101.普通文件普通文件如同Windows中的文件一样,是用户日常使用最多的文件。它包括文本文件,shell脚本,二进制的可执行程序和各种类型的数据。112.目录文件在Linux中,目录也是文件,它们包含文件名和子目录名以及指向那些文件和子目录的指针。目录文件是Linux中存储文件名的唯一地方,当把文件和目录对应起来的时候,也就是用指针将其链接起来之后,就构成了目录文件。Linux系统中的每个文件都被赋予一个唯一的数值,而这个数值被称做索引节点。一个索引节点包含文件的所有信息Linux文件系统把索引节点号1赋于根目录,这也就是Linux的根目录文件在磁盘上的地址。Linux通过上下链接目录文件系统来实现对整个文件系统的操作。123.链接文件链接文件(软链接)有些类似于Windows中的“快捷方式”,但是它的功能更为强大。它可以实现对不同的目录、文件系统甚至是不同机器上的文件直接访问,并且不需要重新分配磁盘空间。13硬链接目录中每一对文件名和inode的对应关系称为一个硬链接。显然一个inode号可以出现在多个目录中,甚至可以在一个目录中多次出现,也就是说,一个文件可以有多个不同的名称硬链接是一个指针,指向文件索引节点,系统并不为它重新分配inode。硬链接节省空间,是Linux系统整合文件系统的传统方式存在不足之处:不可以在不同文件系统的文件间建立链接只有超级用户才可以为目录创建硬链接。14软链接软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。15区别硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而软链接显示的大小与原文件就不同了。164.设备文件Linux把设备都当作文件来进行操作,这样就大大方便了用户的使用。在Linux中,与设备相关的文件一般都在/dev目录下,它包括两种,一种是块设备文件,另一种是字符设备文件。块设备文件是指数据的读写,它们是以块(如由柱面和扇区编址的块)为单位的设备,最简单的如硬盘(/dev/hda1)等。字符设备主要是指串行端口等接口设备。179.1.4Linux常见的文件系统EXT2Ext2是GNU/Linux系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。其单一文件大小及文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的X86系统中,簇最大为4KB,则单一文件大小上限为2048GB,而文件系统的容量上限为16384GB。189.1.4Linux常见的文件系统Ext3Ext3是Ext2的下一代,也就是在保有目前Ext2的格式之下再加上日志功能。日志文件系统(JournalFileSystem):它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。199.1.4Linux常见的文件系统swapLinux中有一种专门用于交换分区的swap文件系统。在Linux中,使用整个交换分区来提供虚拟内存,其分区大小一般应是系统物理内存的2倍,而不像Windows使用交换文件。在安装Linux操作系统时,就应创交换分区,它是Linux正常运行所必须的,其类型必须是swap,交换分区由操作系统自行管理。209.1.5VFS虽然Linux内核是用C语言写的,但是其中借鉴了很多“面向对象”的思想VFS层类似于面向对象理论中的“抽象基类”的概念,而下面的一个个具体文件系统就相当于是这个抽象基类的“派生类”。所有对文件的操作如open,write,read等在VFS中只是实现了一个类似于“纯虚函数”的接口,针对每种具体的文件系统,就会使用其派生类中被“改写”的“虚函数”。219.1.5VFS这样一来就可以面向用户界面(系统调用)提供一个统一的编程接口。例如用户可以在不同的文件系统上创建文件,但所使用的函数或命令都是相同的。22第九章Agenda9.1Linux的文件系统结构概要9.2MTD9.3嵌入式Linux专用的文件系统9.4如何构造根文件系统9.5Ramdisk239.2MTD在Linux下,MTD(MemoryTechnologyDevice,存储技术设备)是用于访问存储设备(如ROM和Flash等)的系统。MTD的主要目的是为了使新的存储设备的驱动更加简单,为此,它在硬件和上层间提供了一个统一的抽象接口,把文件系统和存储设备相隔离。24MTD驱动程序MTD驱动程序是在Linux下专门为嵌入式环境应用而开发的一类驱动程序。相对于常规的块设备驱动程序,使用MTD驱动程序的主要优点在于,它主要是专门针对各种非易失性存储器(以Flash为主)而设计的,所以它对Flash有更好的支持,管理和基于扇区的擦除,读写操作的接口。259.3嵌入式Linux专用的文件系统9.3.1JFFS/JFFS29.3.2YAFFS/YAFFS29.3.3Cramfs269.3.1JFFS/JFFS22000年,Axis公司发布了日志式Flash文件系统jffs2001年初,RedHat公司在此基础上推出了jffs2文件系统。它们都是针对嵌入式系统中的Flash存储器进行设计的。27(1)JFFS存储格式第一版本的jffs是一个日志结构的文件系统。在Flash的存储空间中,数据和辅助信息都依次存放于其中。在该文件系统中,只有一种文件节点,它通过jffs_raw_inode这个结构进行描述。每个这样的节点都关联到某个文件上,其中包含了一个简单的头部,辅助信息以及存储的数据。由于在jffs中,大的文件都分为很多节点存放,所以除了必须存放数据之外,还要额外保存这段数据在文件中的偏移量。28(2)JFFS2:改进jffs2的节点头部中增加了一些新的信息,包括CRC校验码和节点类型等。由于jffs空间回收方式的缺陷,在jffs2中,所有的存储节点都不可以跨越Flash的块界限了。jffs2不再像jffs中只有一种节点,现在有3种节点类型了,分别用于表示擦除块的标记,普通文件,目录。文件系统的信息并不是像jffs中那样,全部保存在内存之中。可以很快取得的数据并不保存在内存之中,这样可以提高内存的利用率。增加了对数据的压缩。开始支持硬链接。299.3.2YAFFS/YAFFS2虽然JFFS/JFFS2是针对Flash建立的文件系统,它可支持NOR和NANDFlash,但是把它应用于NANDFlash还存在如下问题:JFFS需要通过建立在内存中的jffs_node结构体维护Flash中的日志节点,每个节点需要占用48个字节的内存空间。JFFS/JFFS2在挂载时需要扫描整个Flash的内容,以找出所有的日志节点,建立文件结构30YAFFSYAFFS(YetAnotherFlashFileSystem)是专门针对NANDFlash特点编写的日志文件系统。它克服了JFFS/JFFS2的缺点,具有如下特性:很小的内存空间占用。很短的挂载时间。跨平台的文件系统。31YAFFS2YAFFAS是效果很理想的NANDFlash上的文件系统但它不支持数据压缩,而且它仅对512字节页(后简称小页)大小的NANDFlash存储器。而很多大容量的NANDFlash(128MB以上),使用大小为2KB的页(后简称为大页),YAFFS并不能支持这种Flash。YAFFS2是为此而开发出来的。YAFFS2实现对大页Flash的支持。同时,YAFFS2在内存空间占用,垃圾回收速度,读写速度等方面均有大幅度提升。329.3.3CramfsCRAMFS最初是LinusTorvalds编写的一个文件系统,具有简单、压缩和只读等特点。是用于保存只读的根文件系统内容的一个很好的方案。CRAMFS主要的优点:是将文件数据以压缩形式存储,在需要运行的时候进行解压缩。由于它存储的文件形式是压缩的格式,所以文件系统不能直接在Flash上运行。虽然这样可以节约很多Flash存储空间,但是文件系统运行需要将大量的数据拷贝进RAM中,造成一定的浪费。339.4建立一个完整的文件系统方法1:手动创建一个根文件系统构建根文件系统的框架为根文件系统安装链接库为文件系统复

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功