版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章嵌入式Linux文件系统第六章嵌入式Linux文件系统(1)Linux文件系统与文件管理虚拟文件系统VFS/dentry目录项对象/inode索引节点对象(2)嵌入式文件系统嵌入式Linux文件系统概述/JFFS2嵌入式文件系统/根文件系统Linux文件管理在Linux中,有三种基本的文件类型。目录可以包含普通文件和特殊文件,目录相当于Windows和MacOS中的文件夹。目录普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序负责。普通文件Linux与外部设备(例如光驱,打印机,终端,modern等)是通过一种被称为设备文件的文件来进行通信。Linux与外部设备之间输入输出的关系和输入输出到一个文件的方式是相同的。Linux和一个外部设备通讯之前,这个设备必须首先要有一个设备文件存在。例如,每一个终端都有自己的设备文件来供Linux写数据(比如出现在终端屏幕上)和读取数据(比如用户通过键盘输入)。设备文件案例:文件的打开在这个例子中,open()系统调用用于在只写模式下打开文件testfile.txt,所有者和用户组(0644)具有读取权限。如果open()系统调用失败,程序打印错误信息并返回1。否则,程序通过write()系统调用写入字符串"Hello",然后使用close()系统调用关闭文件。文件系统是操作系统用于确认磁盘或分区上的文件的方法和数据结构。文件系统是负责存取和管理文件信息的机构,用于对数据、文件以及设备的存取控制,它提供对文件和目录的分层组织形式、数据缓冲以及对文件存取权限的控制功能。文件系统具有以下主要功能:1.对文件存储设备进行管理,分别记录空闲区和被占用区,以便于用户创建、修改以及删除文件时对空间的操作。2.对文件和目录的按名访问、分层组织功能。3.创建、删除及修改文件功能。4.数据保护功能。5.文件共享功能
Linux文件系统概述PartOne6.1
为了支持多种不同的文件系统,采用了虚拟文件系统VFS(VirtualFilesystem)技术。虚拟文件系统是对多种实际文件系统的共有功能的抽象,它屏蔽了各种不同文件系统在实现细节上的差异,为用户程序提供了统一的、抽象的、标准的接口以便对文件系统进行访问,如打开,读,写等操作。虚拟文件系统VFS确保了对所有文件的访问方式都是完全相同的。虚拟文件系统VFS虚拟文件系统VFS虚拟文件系统VFS确保了对所有文件的访问方式都是完全相同的。(1)Device
Drivers,设备驱动用于控制所有的外部设备及控制器。由于存在大量不能相互兼容的硬件设备(特别是嵌入式产品),所以也必须有众多的设备驱动与之匹配。值得注意的是,Linux内核中将近一半的源码都是设备驱动。
(2)DeviceIndependentInterface,该模块定义了描述硬件设备的统一方式(统一设备模型),所有的设备驱动都遵守这个规则,同时可以用一致的形式向上提供接口。这样做可以有效降低开发难度。(3)LogicalSystems逻辑文件系统,每一种文件系统都会对应一个逻辑文件系统,它会实现具体的文件系统逻辑。
(4)SystemIndependentInterface,该模块主要面向块设备和字符设备,负责以统一的接口表示硬件设备和逻辑文件系统,这样上层软件就不再关心具体的硬件形态了。
(5)SystemCallInterface,系统调用接口,向用户空间提供访问文件系统和硬件设备的统一的接口。
VFS是底层文件系统的主要组件(接口)。这个组件导出一组接口,然后将它们抽象到行为可能差异很大的各个文件系统。VFS具有两个针对文件系统对象的缓存:inode索引节点对象和dentry目录项对象,它们缓存最近使用过的文件系统对象。每个文件系统实现(如ext2、JFFS2等等)可以导出一组通用接口供VFS使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。dentry目录项对象dentry
结构表示一个打开的目录项,structdentry{...structdentry*d_parent;//父目录指针structqstrd_name;//目录名字
structinode*d_inode;//指向inode结构
...conststructdentry_operations*d_op;//操作方法集...};当我们打开文件
/usr/local/lib/libc.so
文件时,内核会为文件路径中的每个目录创建一个
dentry
结构。inode索引节点对象inode
结构表示一个真实的文件。structinode{...uid_ti_uid;//文件所属用户gid_ti_gid;//文件所属组...structtimespeci_atime;//最后访问时间
structtimespeci_mtime;//最后修改时间
structtimespeci_ctime;//文件创建时间...unsignedshorti_bytes;//文件大小...
conststructfile_operations*i_fop;//文件操作方法集(用于设置file结构)...};inode索引节点对象inode有两个重要的成员i_op(inode操作函数表)和i_fop(文件操作函数表)。
i_op主要负责处理与文件或目录本身相关的元数据操作和结构性操作,如:创建和创建文件、删除文件、查找文件、修改权限等。
i_fop的类型为structfile_operations结构,其定义如下:虚拟文件系统VFS综合看来,Linux虚拟文件系统采用了面向对象设计思想,文件系统中定义的VFS相当于面向对象系统中的抽象基类,从它出发可以派生出不同的子类,以支持多种具体文件系统,但从效率考虑内核纯粹使用C语言编程,故没有直接利用面向对象的语义。
Ext2文件系统格式PartTwo6.26.2.1Ext2文件系统TheSecondExtendedFileSystem(ext2)文件系统是Linux系统中的标准文件系统,主要包括普通文件、目录文件、特殊文件和符号链接文件。Ext2文件系统是通过对Minix的文件系统进行扩展而得到的,其存取文件的性能良好,可以管理特大磁盘分区,文件系统最大可达4TB。早期Linux都使用ext2文件系统。在ext2文件系统中,文件由包含有文件所有信息的节点inode进行唯一标识。Ext2文件系统采用三级间接块来存储数据块指针,并以块(默认为1KB)为单位分配空间。在ext2系统中,所有元数据结构的大小均基于“块”,而不是“扇区”。块的大小随文件系统的大小而有所不同。而一定数量的块又组成一个块组,每个块组的起始部分有多种描述该块组各种属性的元数据结构。每个块组依次包括超级块、块组描述符、块位图和节点inode位图、inode表及数据块区。1.超级块每个ext2文件系统都必须包含一个超级块,其中存储了该文件系统的大量基本信息,如块的大小、每块组中包含的块数等。同时系统会对超级块进行备份,备份被存放在块组的第一个块中。超级块的起始位置为其所在分区的第1024个字节,占用1KB的空间,主要作用:存储文件系统的全局信息和运行状态,减少磁盘I/O。提供文件系统操作方法(s_op文件系统函数表)。以s_root为根目录,建立和维护文件系统内部文件树。通过s_fs_info可以访问实际文件系统超级块。
2.块组描述符一个块组描述符用以描述一个块组的属性。块组描述符组由若干块组描述符组成,描述了文件系统中所有块组的属性,存放于超级块所在块的下一个块中。3.块位图和节点inode位图块位图和inode位图的每一位分别指出块组中对应的哪个块或inode是否被使用。:5.数据块数据块中存放文件的内容,包括目录表、扩展属性、符号链接等4.节点inode表节点inode表用于跟踪定位每个文件,包括位置、大小等,不包括文件名。一个块组只有一个节点inode表。6.2.2目录结构在ext2文件系统中,目录是作为文件存储的。根目录总是在inode表的第二项,而其子目录则在根目录文件的内容中定义。目录项在include/linux/ext2_fs.h文件中定义,其结构如下:structext2_dir_entry_2{ __le32 inode; /*Inodenumber*/ __le16 rec_len; /*Directoryentrylength*/ __u8 name_len; /*Namelength*/ __u8 file_type; char name[EXT2_NAME_LEN]; /*Filename*/};6.3.1EXT3文件系统EXT3是第三代扩展文件系统(Thirdextendedfilesystem),EXT3是在EXT2基础上增加日志形成的一个日志文件系统,常用于Linux操作系统。日志文件系统最大的特点是会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。除开日志文件系统所具有的优点,Ext3的特点还主要有:(1)ext3文件系统在非正常关机状况下,系统无需检查文件系统,而且ext3的恢复时间也极短。(2)ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。(3)ext3文件系统可以不经任何更改,而直接加载成为ext2文件系统。由ext2文件系统转换成ext3文件系统也非常容易。(4)3种日志模式可选:日记、顺序、回写。可适应不同场合对日志模式的要求。(5)便于移植,无论是硬件体系或是内核修改,其移植工作均较容易。6.3.2EXT4文件系统第四代扩展文件系统EXT4(Fourthextendedfilesystem)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。2008年12月25日,LinuxKernel2.6.28的正式版本发布。随着这一新内核的发布,Ext4文件系统也结束实验期,成为稳定版。Ext4文件系统的特点主要包括:1.Ext4的文件系统容量达到1EB,而文件容量则达到16TB;2.
Ext4理论上支持无限数量的子目录;3.Ext4文件系统具有64位空间记录块数量;4.Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率;5.Ext4支持更大的i-节点和支持快速扩展属性和i-节点保留;6.Ext4给日志数据添加了校验功能,日志校验功能可以很方便地判断日志数据是否损坏;7.Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。嵌入式文件系统JFFS2PartFoue6.4嵌入式文件系统嵌入式文件系统是指嵌入式系统中实现文件存取、管理等功能的模块,这些模块提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。QNXVxWorksYaffs/yaffs2CramfsNFS主流的嵌入式操作系统的文件系统QNX提供多种资源管理器,包括各种文件系统和设备管理,支持多个文件系统同时运行;包括提供完全的POSIX以及UNIX语法的文件系统,支持多种闪存设备的嵌入式文件系统,支持对多种文件服务器WINDOWS、LANManager等的透明访问的SMB文件系统、FAT文件系统、CD一ROM文件系统等,并支持多种外部设备。QNXVxWorks的文件系统提供的组件一FFS“快速文件系统”非常适合于实时系统的应用。它包括几种支持使用块设备(如磁盘)的本地文件系统,这些设备都使用一个标准的接口从而使得文件系统能够被灵活的在设备驱动程序上移植。另外,也支持SCSI磁带设备的本地文件系统`。VXWORKS的I/O的体系结构甚至还支持一个单独的从系统上同时并存几个不同的文件系统,支持四种文件系统FAT、RT11FS、RAWFS、TAPES。VxWorksYaffs(YetAnotherFlashFileSystem)/yaffs2是专为嵌入式系统使用NAND型闪存而设计的日志型文件系统。速度快,挂载时间很短,对内存的占用较小。另外它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。Yaffs/yaffs2Yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与yaffs2的主要区别在于,前者仅支持小页(512Bytes)NAND闪存,后者则可支持大页(2KB)NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。Yaffs/yaffs2Cramfs(CompressedROMFileSystem)是Linux的创始人LinusTorvalds参与开发的一种只读的压缩文件系统。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs网络文件系统NFS(NetworkFileSystem)是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。NFS嵌入式Linux文件系统
扩展:ramfs文件系统ramfs是一个非常巧妙,利用VFS虚拟文件系统自身结构而形成的内存文件系统。ramfs没有自已的文件存储结构,它的文件存储于页缓存(pagecache)中,目录结构由dentry链表本身描述,文件则由虚拟文件系统VFS的inode结构本身描述。从ramfs的描述可以看出,虚拟文件系统VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式并对磁盘文件系统进行缓冲。ramfs文件系统ramfs是一种非常简单的文件系统,它直接利用linux内核已有的高速缓存机制,使用系统的物理内存,生成一个大小可以动态变化的的基于内存的文件系统。ramfs工作于虚拟文件系统层(VFS)层,不能被格式化。只有root用户才能进行ramfs写操作。通过查看Makefile文件可以检查ramfs依赖的模块。obj-y+=ramfs.ofile-mmu-y:=file-nommu.ofile-mmu-$(CONFIG_MMU):=file-mmu.oramfs-objs+=inode.o$(file-mmu-y)扩展:ramdisk文件系统ramdisk是一种将内存中的的一块区域作为物理磁盘进行使用的技术,也就是说,ramdisk是在内存区域中创建块设备用于存放文件系统的技术。对于用户而言,可以把ramdisk与通常的硬盘分区同等对待并使用。由于掉电后ramdisk的内容会消失,因而ramdisk不适合作为长期保存文件的介质。ramdisk文件系统为更好实现内核模块自动加载机制,基于ramdisk的initrd(BootLoaderinitializedRAMdisk)得以诞生。initrd是一个被压缩过的小型根目录,NorFlash通常容量较小,其主要特点是程序代码可以直接在Flash内运行。NorFlash具有RAM接口,易于访问,缺点是擦除电路复杂,写速度和擦除速度都比较慢,最大擦写次数约10万次,典型的块大小是128kB。NandFlash通常容量较大,具有很高的存储密度,从而降低了单位价格。NandFlash的块尺寸较小,典型大小为8kB,擦除速度快,使用寿命也更长,最大擦写次数可以达到100万次,但是其访问接口是复杂的I/O口,并且坏块和位反转现象较多,对驱动程序的要求较高。一般结论:由于NorFlash和NandFlash各具特色,因此它们的用途也各不相同,NorFlash一般用来存储体积较小的代码,而NandFlash则用来存放大体积的数据。NorFlash和NandFlash的对比JFFS2嵌入式文件系统
JFFS2文件系统层次操作实现垃圾收集平均磨损基本介绍数据压缩不足之处为了延长Flash的整体寿命需要均匀地使用各个块,这就需要磨损均衡的功能;为了提高Flash存储器的利用率,还应该有对存储空间的碎片收集功能;在嵌入式系统中,要考虑出现系统意外掉电的情况,所以文件系统还应该有掉电保护的功能,保证系统在出现意外掉电时也不会丢失数据。因此在Flash存储设备上,目前主要采用了专门针对Flash存储器的要求而设计的JFFS26.4.2JFFS2嵌入式文件系统1.JFFS2文件系统简介JFFS(JournalingFlashFileSystem)是瑞典的AxisCommunications公司专门针对嵌入式系统中的Flash存储器的特性而设计的一种日志文件系统。Redhat公司的DavidWoodhouse在JFFS的基础上进行了改进,从而发布了JFFS2(JournalingFlashFileSystemVersion2)。和JFFS相比,JFFS2支持更多节点类型,提高了磨损均衡和碎片收集的能力,增加了对硬链接的支持。JFFS2还增加了数据压缩功能,这更利于在容量较小的Flash中使用。和传统的Linux文件系统如ext2相比,JFFS2处理擦除和读写操作的效率更高,并且具有完善的掉电保护功能,使存储的数据更加安全。返回JFFS2在Flash上只存储两种类型的数据实体,分别为用于描述数据节点的jffs2_raw_inode和描述目录项jffs2_raw_dirent。
Jffs2_raw_dirent主要包括文件名、节点ino号、父节点ino号、版本号、校验码等信息,它用来形成整个文件系统的层次目录结构。
Jffs2_raw_inode主要包括文件ino号、版本号、访问权限、修改时间、本节点所包含的数据文件中的起始位置及本节点所包含的数据大小等信息,它用来管理文件的所有数据。一个目录文件由多个jffs2_raw_dirent组成。而普通文件,符号链接文件,设备文件,FIFO文件等都由一个或多个jffs2_raw_inode数据实体组成。返回返回structjffs2_inode_cache{structjffs2_scan_info*scan;
//在扫描链表的时候存放临时信息,在扫描结束以后设置成NULLstruct
jffs2_inode_cache*next;structjffs2_raw_node_ref*node;_u32ino;intnlink;};structjfffs2_raw_node_ref{
structjffs2_raw_node_ref*next_in_ino;
structjffs2_raw_node_refnext_phys;
_u32flash_offset;
_u32totlen;
};当进行写入操作时,在块还未被填满之前,仍然按顺序进行写操作,系统从free_list取得一个新块,而且从新块的开始部分不断地进行写操作,一旦free_list大小不够时,系统将会触发“碎片收集”功能回收废弃节点操作实现垃圾收集在JFFS中,文件系统与队列类似,每一个队列都存在唯一的头指针和尾指针。最先写入日志的节点作为头指针,而每次写入一个新节点时,这个节点作为日志的尾指针。每个节点存在一个与节点写入的顺序有关的version
节点,它专门用来存放节点的版本号。该节点每写入一个节点其版本号加1。节点写入总是从日志的尾部进行,而读/写点则没有任何限制。但是擦除和碎片收集操作总是在头部进行。当用户请求写操作时发现存储介质上没有足够的空余空间,也就表明空余空间已经符合“碎片收集”的启动条件。如果有垃圾空间能够被回收,碎片收集进程启动将收集垃圾空间中的垃圾块,否则,碎片收集就线程处于睡眠状态。返回平均磨损在JFFS中,碎片收集总是对文件系统队列头所指节点的块进行回收。如果该块填满了数据就将该数据后移,这样该块就成为空闲块。通过这种处理方式可以保证Flash中每块的擦除次数相同,从而提高了整个Flash芯片的使用寿命。返回数据压缩JFFS2提供了数据压缩技术,数据存入Flash之前,JFFS2会自动对其进行压缩。目前,内嵌JFFS2
的压缩算法很多,最常见的是zlib
算法,这种算法仅对ASCII
和二进制数据文件进行压缩。在嵌入式文件系统中引入数据压缩技术,使其数据能够得到最大限度的压缩,可以提高资源的利用率,有利于提高性能和节省开发成本。返回JFFS2的不足之处(1)挂载时间过长。JFFS2的挂载过程需要对闪存从头到尾的扫描,这个过程比较花费时间。
(2)磨损平衡具有较大随意性。JFFS2对磨损平衡是用概率的方法来解决的,这很难保证磨损平衡的确定性。在某些情况下,可能造成对擦写块不必要的擦写操作;在某些情况下,又会引起对磨损平衡调整的不及时。(3)扩展性很差。首先,闪存越大,闪存上节点数目越多挂载时间就越长。其次,虽然JFFS2尽可能的减少内存的占用,但实际上对内存的占用量是同i节点数和闪存上的节点数成正比的。返回根文件系统Linux根文件系统中一般有如下的几个目录:根文件系统是一种特殊的文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,它还是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本和服务加载到内存中去运行。/bin目录01/sbin目录02/dev目录03/etc目录04/home目录06/lib目录05/root目录07/usr目录08/var目录09/proc目录/tmp目录/mnt目录101211根文件系统/bin目录该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其他文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。01/sbin目录该目录下存放系统命令,即只有系统管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,/sbin目录必须和根文件系统在同一个分区中。/sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck、init等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。02/dev目录该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读/写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。比较重要的文件有/dev/null,/dev/zero,/dev/tty,/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节气知识:了解中国传统文化的小学主题班会课件
- 小学主题班会课件:和谐课堂共促成长
- 2026地方特色面试题目及答案
- 2026分析焦虑症面试题及答案
- 航空航天工程材料使用手册
- 2026轨道会计面试题及答案
- 农业气象观测精准度评估表
- 2026菏泽幼教面试题及答案
- 广东省清远市2026届高考适应性考试生物试卷含解析
- 建筑工程质量管控标准操作手册
- 燃气行业职业病培训课件
- 高空拓展安全培训课件
- 井下巷道巡查管理制度
- 餐饮店面卫生标准
- 物流行业GPS监控人员岗位职责
- 土方回填及土方运输工程量计算课件
- 危险化学品两重点一重大
- 2025年一建民航真题
- 华南理工大学《微积分Ⅰ(二)》2021-2022学年第一学期期末试卷
- 化学灾害事故现场的应急洗消课件市公开课一等奖省赛课微课金奖课件
- 货物生产、采购、运输方案(技术方案)
评论
0/150
提交评论