1、2022年11月18日星期五第第9章文件系统章文件系统-哈尔滨哈尔滨理工大学电子邮件系统理工大学电子邮件系统 本章主要内容本章主要内容本章主要介绍:本章主要介绍:Linux的文件系统结构。的文件系统结构。Linux采用的采用的VFS,支持如,支持如romfs、ramfs、ex2、jffs2、ms-dos、nfs等各种文件系统。等各种文件系统。Linux源程序和开发板根文件系统源程序和开发板根文件系统romfs的目录结的目录结构和功能描述。构和功能描述。在在uClinux中文件的打开和读写操作示例。中文件的打开和读写操作示例。目目 录录9.1 文件系统结构文件系统结构9.2 文件系统类型文件系统
2、类型 9.2.1 romfs文件系统文件系统 9.2.2 ramfs文件系统文件系统 9.2.3 JFFS与与JFFS2文件系统文件系统 9.2.4 EXT2文件系统文件系统 9.3 文件系统目录结构文件系统目录结构 9.3.1 romfs文件系统目录结构文件系统目录结构 9.3.2 uClinux源程序结构源程序结构 9.4 简单编程事例简单编程事例 n Linux透明的支持许多不同的文透明的支持许多不同的文件系统,将各种安装的文件和文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系件系统以一个完整的虚拟文件系统的形式呈现给用户。统的形式呈现给用户。9.1 文件系统结构 将文件系统的
3、操作和管理纳入统一的框架将文件系统的操作和管理纳入统一的框架当中来,使得内核的文件系统接口,如同标准的的当中来,使得内核的文件系统接口,如同标准的的文件系统文件系统“总线总线”,让用户通过同一组系统调用来,让用户通过同一组系统调用来管理和操作不同类型文件系统上的文件。这个统一管理和操作不同类型文件系统上的文件。这个统一的、抽象的、虚拟的文件系统接口,被称为的、抽象的、虚拟的文件系统接口,被称为VFS(virtual组标准的文件操作接组标准的文件操作接FileSystem Switch),主要包含一口。,主要包含一口。VFS与具体文件系统的关系与具体文件系统的关系如图如图9-1所示所示。9.1
4、文件系统结构 n 简介简介 图9-1 VFS与具体文件系统的关系与具体文件系统的关系用户程序(进程)用户程序(进程)VFSminixFAT设备文件设备文件Ext2文件系统操作的系统文件系统操作的系统调用界面,包括调用界面,包括read(),write(),open(),close()等等函数函数sys_read()sys_write()sys_open()等等通过通过file结构结构中的中的f_op指指针实现的针实现的”文件系统总文件系统总线线”用户空间用户空间系统空间系统空间 ntfs windows NT windows NT的文件系统的文件系统 msdos dos dos的文件系统的文件
5、系统 isofs 光盘文件系统光盘文件系统 nfs 网络文件系统网络文件系统 romfs rom rom中的文件系统中的文件系统 smbfs 即即sambasamba,可以在网络中,可以在网络中与与 win98 win98、winnt winnt 共享共享 proc 目录目录/proc/proc下的特殊文件系统下的特殊文件系统 jffs flash flash中的文件系统中的文件系统n 用户访问磁盘文件系统时,对于目录树下的用户访问磁盘文件系统时,对于目录树下的访问,访问,最终将转换成对这一部分物理磁盘的访最终将转换成对这一部分物理磁盘的访问问n 对于设备文件的访问,最终将转换成对于对对于设备
6、文件的访问,最终将转换成对于对于驱动程序的访问。于驱动程序的访问。9.1 文件系统结构n 文件访问n 对于其他特殊文件的访问,一般是在对于其他特殊文件的访问,一般是在Linux的内存数据结构中完成的。的内存数据结构中完成的。注意注意:这两种系统文件的访问最终都这两种系统文件的访问最终都反映在磁盘驱动程序上反映在磁盘驱动程序上!对于磁盘文件系统中文件的访问,对于磁盘文件系统中文件的访问,是在文件目录树的结构下,对于有组织是在文件目录树的结构下,对于有组织的数据进行的;而对磁盘设备文件进行的数据进行的;而对磁盘设备文件进行访问,则是对于线性空间内数据的访问,访问,则是对于线性空间内数据的访问,也就
7、是无法看到数据的组织情况。也就是无法看到数据的组织情况。图图9-2 Linux文件系统层次图文件系统层次图 9.2 文件系统类型 romfsramdisk,JFFSNFS 9.2.1 romfs文件系统n简介简介 romfs(rom file system)是一种只读文件是一种只读文件系统,系统的管理代码占用的空间比较小,系系统,系统的管理代码占用的空间比较小,系统创建统创建romfs文件系统需要使用文件系统需要使用genromfs工具。工具。值得注意的是,值得注意的是,romfsromfs的文件访问权限的文件访问权限和属主这些信息尚未完全实现。和属主这些信息尚未完全实现。由于由于romfsr
8、omfs文件系统是只读的,所以可以做得很小,从文件系统是只读的,所以可以做得很小,从而节省空间。如果要进行写操作,只能在编而节省空间。如果要进行写操作,只能在编译的时候加上写访问功能,或者在运行时另译的时候加上写访问功能,或者在运行时另外生成一个外生成一个RAMdiskRAMdisk送暂存数据。送暂存数据。n romfs文件系统结构文件系统结构 9.2.1 romfs文件系统nromfs文件系统是为了对块设备进行高效管理而开发文件系统是为了对块设备进行高效管理而开发的。所有的的。所有的romfs文件,经过文件,经过genromfs程序生成之程序生成之后,合并到一个文件后,合并到一个文件(即即r
9、omfs的映象文件的映象文件)中去。只中去。只需要采用需要采用mount命令将这个文件挂接到任何一个目命令将这个文件挂接到任何一个目 录下,就可以对录下,就可以对romfs中的文件以正常方式进行访问中的文件以正常方式进行访问了。了。romfs映像文件的文件组织方式映像文件的文件组织方式如表如表9-1所示所示。16 volume name 12-16 cheeksum 8-12 full size F S 4-8 I R O M 0-4 内容内容 偏移量偏移量 file headers 表 9-1 romfs映像文件头部结构映像文件头部结构n romfs映像文件开始的映像文件开始的8个字节存放了
10、个字节存放了ASCII码码“-ROM1FS-”,后面存放了这个文件系统,后面存放了这个文件系统的字节数。的字节数。n checksum存放从文件头开始的存放从文件头开始的512个字节个字节的校验码。然后是文件系统的卷标名称,该名的校验码。然后是文件系统的卷标名称,该名称以称以ASCII值为值为0的字符结尾,所占用的空间的字符结尾,所占用的空间为为16字节的整数倍。字节的整数倍。后面存放各个文件的头部结构后面存放各个文件的头部结构如表如表9-2所示。所示。9.2.1 romfs文件系统表 9-2 romfs中的文件头结构中的文件头结构 16 file name校验校验 12-16 cheeksu
11、m 8-12 size 4-8 sepc.info 距离下一个文件头的说明量距离下一个文件头的说明量 0-4 next file header 内容内容 说明说明 偏移量偏移量 file data 该文件大小(单位该文件大小(单位B)文件数据文件数据文件名文件名,大小为,大小为16整数倍整数倍 目录硬连接和设备文件信息目录硬连接和设备文件信息 nspec.info域主要有如下几种情况域主要有如下几种情况:0:硬链接硬链接,spec.info域的内容用于链接的目标文件域的内容用于链接的目标文件1:目录目录,spec.info域的内容为第一个文件的文件头域的内容为第一个文件的文件头2:普通文件普通
12、文件,spec.info域的内容无效,应设置为域的内容无效,应设置为03:符号链接符号链接,spec.info域的内容无效,应设置为域的内容无效,应设置为0 9.2.1 romfs文件系统4:块设备块设备,spec.info域内容为各域内容为各16bit的主的主、从设备号从设备号 5:字符设备字符设备,spec.info域的内容无效,设置为域的内容无效,设置为06:网络网络socket套接字套接字spec.info域的内容无效,设置为域的内容无效,设置为07:fifo管道文件管道文件,spec.info域的内容无效,设置为域的内容无效,设置为0 9.2.1 romfs文件系统注意:注意:rom
13、fsromfs文件系统为了减小文件系统为了减小modulemodule的大的大小省略了很多完整性检测的代码。如:不要小省略了很多完整性检测的代码。如:不要生成硬链接循环,要为当前目录和父目录生生成硬链接循环,要为当前目录和父目录生成成“.”“.”和和“.”“.”链接。链接。9.2.1 romfs文件系统n EV44B0II的的romfs的制作过程的制作过程如图如图9-3所示所示。在主机的/romfs目录下生成需要的目录结构将romfs.img作为初始化数据连接到linux内核当中系统启动时读取 romfs文件系统中的数据使用工具将/romfs目录转换为/romfs的组织结构/romfs.img
14、n在主机的在主机的/romfs目录下生成需要的目录结构目录下生成需要的目录结构n利用利用genromfs工具,将工具,将/cygdrive/d/aaaa/uClinux-44b0ii/romfs目录生成目录生成ROMdisk的的romfs映像文件映像文件 romfs.img genromfsvVROMdisk-f/cygdrive/d/aaaa/images/romfs.imgd/cygdrive/d/aaaa/uClinux-44b0ii/romfsn romfs使用:9.2.1 romfs文件系统n将将romfs.img作为初始化数据连接到作为初始化数据连接到Linux内内核当中。核当中。
15、n使用使用romfs的文件系统的时,可采用的文件系统的时,可采用mount命命令直接将其挂接到合适的目录下,例如令直接将其挂接到合适的目录下,例如(假设假设/dev/ram0是是romfs文件系统的设备文件系统的设备):mount-t romfs /dev/rom0 /var 9.2.1 romfs文件系统 这样把这样把/dev/ram0挂接到挂接到/var目录上目录上去,此后直接对去,此后直接对/var目录进行操作即可。目录进行操作即可。但但romfs映射到内存中,仍旧无法支持动映射到内存中,仍旧无法支持动态擦写保存。如需要动态保存数据可以采态擦写保存。如需要动态保存数据可以采用虚拟用虚拟r
16、amdisk或或JFFS进行处理。进行处理。9.2.2 ramfs文件系统nramdisk是使用是使用RAM虚拟的磁盘(该驱动程序在虚拟的磁盘(该驱动程序在/linux/drivers/block/rd.c),是一个作为盘分),是一个作为盘分区使用的内存块,或者说将内存模拟为硬盘空间。区使用的内存块,或者说将内存模拟为硬盘空间。n使用使用ramdisk可以提高访问速度,若已知某个文件将可以提高访问速度,若已知某个文件将被高频率访问,通过将文件存放在内存里就可以提高被高频率访问,通过将文件存放在内存里就可以提高性能。通过加载性能。通过加载EXT2文件系统来管理和操作文件。文件系统来管理和操作文件
17、。nRamdisk简介n使用ramdisk:nramdisk的配置项是的配置项是/config/.config文件中的文件中的CONFIG_USER_RAMIMAGE_RAMFS128(128K)。)。ramdisk的加载过程包含在的加载过程包含在/vendors/micetek/44b/rc文件中:文件中:bin/expand/etc/ramfs.img/dev/ram0mount-t ext2/dev/ram0/var9.2.2 ramfs文件系统过程过程:1.将预先生成的将预先生成的EXT2EXT2的磁盘映像压缩格式释放到块设备上的磁盘映像压缩格式释放到块设备上2.2.使用使用mount
18、mount命令将命令将ramram块设备中的文件系统安装到块设备中的文件系统安装到 根文件系统的根文件系统的/var/var下。下。3.可以对可以对ramdiskramdisk进行文件操作了。进行文件操作了。9.2.3 JFFS与JFFS2文件系统nramdisk是运行在内存中的,是运行在内存中的,所以在系统掉电所以在系统掉电后,后,所有保存的数据都会丢失所有保存的数据都会丢失。这时,一个比较好的这时,一个比较好的选择是选择是JFFS文件系统(最新的版本是文件系统(最新的版本是JFFS2),),JFFS文件系统一般使用文件系统一般使用FLASH作为磁盘,所以在作为磁盘,所以在掉电后数据不会丢失
19、;掉电后数据不会丢失;而且而且,JFFS可以对由于在可以对由于在掉电时刻操作导致的不完整数据进行修复。掉电时刻操作导致的不完整数据进行修复。nJFFS 存储格式存储格式 JFFS是一个日志结构的文件系统。只有一种是一个日志结构的文件系统。只有一种文件节点,它通过文件节点,它通过jffs_raw_inode这个结构进行描这个结构进行描述。每个这样的节点都关联到某个文件上,其中包述。每个这样的节点都关联到某个文件上,其中包含了一个简单的头部、辅助信息以及存储的数据。含了一个简单的头部、辅助信息以及存储的数据。存储的辅助信息包括通常所记录的文件存储的辅助信息包括通常所记录的文件inode信息信息(如
20、如uid,gid等等)及所关联的文件名。及所关联的文件名。9.2.3 JFFS与JFFS2文件系统nJFFS 注意注意:由于在JFFS中,大的文件都分为很多节点存放,所以除了存放数据外,还要额外保存数据在文件中的偏移量。设备文件节点和符号链接等特殊的文件只需要占用很小的空间。n删除文件时删除文件时,在辅助信息存放的地方设置一个在辅助信息存放的地方设置一个已删除标记,已删除标记,被删除文件的被删除文件的Flash块都会加上这个块都会加上这个已删除标记,在该文件的文件句柄释放后,这些已删除标记,在该文件的文件句柄释放后,这些节点就成为废弃节点了。节点就成为废弃节点了。n 更新文件的时更新文件的时,
21、新的文件存放的节点会添加到,新的文件存放的节点会添加到所有已经使用的存储空间的末尾,旧版本的文件所有已经使用的存储空间的末尾,旧版本的文件也会被废弃,等待在回收空间的时候重新分配利也会被废弃,等待在回收空间的时候重新分配利用。用。9.2.3 JFFS与JFFS2文件系统n 文件系统操作的实施过程文件系统操作的实施过程9.2.3 JFFS与JFFS2文件系统n 挂接挂接 挂接挂接JFFS文件系统时,会把整个存文件系统时,会把整个存储设备扫描一次,每个存储块都读取一次,储设备扫描一次,每个存储块都读取一次,然后根据所有节点中存储的信息来生成一个然后根据所有节点中存储的信息来生成一个文件系统的目录树
22、,同时也自动生成了一个文件系统的目录树,同时也自动生成了一个文件在文件在Flash中物理存储位置的对应表,用来中物理存储位置的对应表,用来进行文件的寻址操作。进行文件的寻址操作。读取读取 文件目录结构可以通过文件目录结构可以通过mount时生成时生成的信息获得,的信息获得,cd和和rmdir等目录操作都可以等目录操作都可以直接根据这些信息来确定如何操作。读取文直接根据这些信息来确定如何操作。读取文件时,利用件时,利用mount时生成的物理地址将指定时生成的物理地址将指定的内容读入到缓存区中。的内容读入到缓存区中。9.2.3 JFFS与JFFS2文件系统改变属性改变属性 例如改变文件的属主例如改
23、变文件的属主(chown命令命令)和操作权限和操作权限(chmod命令命令)等操作,只需等操作,只需要将一个记录新的信息的节点写到要将一个记录新的信息的节点写到Flash已利用的存储空间的末尾,然后已利用的存储空间的末尾,然后将旧节点标记为废弃节点即可。将旧节点标记为废弃节点即可。9.2.3 JFFS与JFFS2文件系统 写文件等操作也写文件等操作也与此类似,并不是与此类似,并不是通过直接改写旧节通过直接改写旧节点来完成的点来完成的。n 空间回收空间回收9.2.3 JFFS与JFFS2文件系统n JFFS的文件系统操作使占用的存的文件系统操作使占用的存储块增多,储块增多,当所有存储块都被占用当
24、所有存储块都被占用后后,文件系统开始对废弃的存储块,文件系统开始对废弃的存储块进行回收利用。进行回收利用。注意注意:如果发现所有回收空间加起如果发现所有回收空间加起来仍不足以满足当前操作的需求,来仍不足以满足当前操作的需求,则系统不能继续当前的操则系统不能继续当前的操;n同时,系统也自动从所有存储块中的第一同时,系统也自动从所有存储块中的第一个开始进行分析个开始进行分析,不断将废弃的节点回收,不断将废弃的节点回收,将尚在使用的节点进行合并,最终合成出将尚在使用的节点进行合并,最终合成出整个的整个的块废弃的块废弃的Flash存储块,这样就存储块,这样就可以将这一整块存储块的内容一次性擦除,可以将
25、这一整块存储块的内容一次性擦除,成为新的空闲块。成为新的空闲块。9.2.3 JFFS与JFFS2文件系统n 缺陷 n对空间回收,对空间回收,JFFS并没有进行太多优化,并没有进行太多优化,效率不高。它是按照顺序,从第一个数据块效率不高。它是按照顺序,从第一个数据块开始腾出空间,如果第一块写满了有效数据,开始腾出空间,如果第一块写满了有效数据,它也会将这些数据后移,腾出第一块来作为它也会将这些数据后移,腾出第一块来作为空闲块。空闲块。但这种方式保证了但这种方式保证了FlashFlash的每一块都可以得到相同的的每一块都可以得到相同的擦写次数,有利于提高整个擦写次数,有利于提高整个FlashFla
26、sh设备的使用寿命。设备的使用寿命。9.2.3 JFFS与JFFS2文件系统nJFFS不支持对数据进行压缩之后存储。而不支持对数据进行压缩之后存储。而在嵌入式系统中,如果数据可以得到最大在嵌入式系统中,如果数据可以得到最大限度的压缩,可以提高资源的利用率,提限度的压缩,可以提高资源的利用率,提高性能、节省成本。高性能、节省成本。n不支持硬链接,每一个存储块中都保存了不支持硬链接,每一个存储块中都保存了对应的文件名。这样,就算是很常用的改对应的文件名。这样,就算是很常用的改名操作,也需要增加一个新的需要保存全名操作,也需要增加一个新的需要保存全部所需数据的存储块进行存储。部所需数据的存储块进行存
27、储。9.2.3 JFFS与JFFS2文件系统n JFFS2的节点头部中增加了一些新的信息,的节点头部中增加了一些新的信息,包括包括CRC校验码和节点类型等。校验码和节点类型等。n 由于由于JFFS空间回收方式的缺陷,在空间回收方式的缺陷,在JFFS2中,中,所有的存储节点都不可以跨越所有的存储节点都不可以跨越Flash的块界限的块界限了。了。9.2.3 JFFS与JFFS2文件系统n JFFS2的主要改进的主要改进 这样,就可以在回收空间的时候,这样,就可以在回收空间的时候,按照按照FlashFlash的各个块为单位,进行选择,的各个块为单位,进行选择,将最合适的块腾出来,擦除之后作为新将最合
28、适的块腾出来,擦除之后作为新的空闲块,提高效率与利用率。的空闲块,提高效率与利用率。JFFS2 有有3种种 节点类型了,分别用于表示擦节点类型了,分别用于表示擦除块的标记、普通文件、目录。除块的标记、普通文件、目录。第一种是在第一种是在Flash擦除了一块之后建立的,用于表明擦除了一块之后建立的,用于表明F1ash的块擦除工作完成的块擦除工作完成。文件系统的信息可以很快取得数据并不保存文件系统的信息可以很快取得数据并不保存在内在内 存之中,从而可以提高内存的利用率。存之中,从而可以提高内存的利用率。增加了对数据的压缩。增加了对数据的压缩。开始支持硬链接。开始支持硬链接。9.2.3 JFFS与J
29、FFS2文件系统nJFFS文件系统的结构文件系统的结构9.2.3 JFFS与JFFS2文件系统 JFFSJFFS2 MTD FLASH,RAMnMTD 是内存技术设备子系统,负责操作和管理是内存技术设备子系统,负责操作和管理FLASH和和RAM物理器件,可以自动识别该器件,物理器件,可以自动识别该器件,还支持将一块还支持将一块FLASH器件分为不同的分区管理,器件分为不同的分区管理,这样可以将这样可以将Linux内核和根文件系统分别存在不内核和根文件系统分别存在不同的分区,避免由于同的分区,避免由于FLASH擦写和文件系统组擦写和文件系统组织结构的相互影响。织结构的相互影响。nMTD 向向JF
30、FS提供了字符型和块设备,对于需提供了字符型和块设备,对于需要无延时的写入使用字符设备,如要无延时的写入使用字符设备,如Linux内核的内核的升级。块设备为升级。块设备为JFFS文件系统服务,在加载文件系统服务,在加载JFFS文件系统后,可以操作和管理文件。文件系统后,可以操作和管理文件。EV44B0IIEV44B0II在使用在使用JFFSJFFS文件系统时,要进文件系统时,要进行特殊处理,因为行特殊处理,因为S3C44B0XS3C44B0X的中断向量表在的中断向量表在FLASHFLASH中,所以在操作中,所以在操作FLASHFLASH擦写时,要关闭擦写时,要关闭中断和快速中断,以避免中断和快
31、速中断,以避免FLASHFLASH在擦写状在擦写状 态态下,返回的状态数据,被误解成跳转地址下,返回的状态数据,被误解成跳转地址。9.2.3 JFFS与JFFS2文件系统n 文件系统组成文件系统组成 每个文件系统由逻辑块的序列组成,一每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分个逻辑盘空间一般划分 引导块、超级块、引导块、超级块、inodeinode区以及数据区区以及数据区等四部分。等四部分。9.2.4 EXT2文件系统 EXT2文件系统是文件系统是Linux中主流的文中主流的文件系统件系统。在。在Linux中,普通文件和目中,普通文件和目录文件保存在称为块物理设备的磁盘或录文件保存
32、在称为块物理设备的磁盘或者磁带上。一套者磁带上。一套Linux系统支持若干物系统支持若干物理盘,每个物理盘可定义一个或者多个理盘,每个物理盘可定义一个或者多个文件系统。文件系统。n引导块引导块:在文件系统的开头,通常为一个扇区,存:在文件系统的开头,通常为一个扇区,存放引导程序,用于读入并启动操作系统。放引导程序,用于读入并启动操作系统。n超级块超级块(superblock):用于记录文件系统的管理信:用于记录文件系统的管理信息。特定的文件系统定义了特定超级块。息。特定的文件系统定义了特定超级块。ninode区区(索引节点索引节点):一个文件:一个文件(或目录或目录)占据一个索占据一个索引节点
33、。利用根节点引节点。利用根节点(首个索引节点首个索引节点),可以把一个文,可以把一个文件系统挂在另一个文件系统的非叶节点上。件系统挂在另一个文件系统的非叶节点上。n数据区数据区:用于存放文件数据或者管理数据:用于存放文件数据或者管理数据(如一级间如一级间址块、二级间址块等址块、二级间址块等)。9.2.4 EXT2文件系统nEXT2是是Linux中的一个可扩展的文件系统。中的一个可扩展的文件系统。通过通过VFS的超级块的超级块(struct ext2_sb_info ext2_sb)可以访问可以访问EXT2的超级块,通过的超级块,通过VFS的的inode(stuct ext2_inode_inf
34、o ext2_i)可以访问可以访问EXT2的的inode。9.2.4 EXT2文件系统n 访问访问EXT2 文件系统文件系统EXT2的源代码在的源代码在:/usr/src/linux/fs/ext2目录下,数据结构在文件目录下,数据结构在文件 /usr/src/linux/include/linux/ext2_fs.h 及同一目录及同一目录下的文件下的文件ext2_fs_i.h和和ext2_fs_sb.h中定义。中定义。nEXT2中文件由逻辑块的序列组成。数据块中文件由逻辑块的序列组成。数据块的长度相同。不同的的长度相同。不同的EXT2系统长度可以不系统长度可以不同同。文件总是整块存储,不足一
35、块的部分文件总是整块存储,不足一块的部分也占用一个数据块。也占用一个数据块。9.2.4 EXT2文件系统n文件存储方式文件存储方式nEXT2中的每个文件都用一个单独的中的每个文件都用一个单独的inode(即即stuct ext2_inode结构结构)来描述,来描述,而每个而每个inode都有一个唯一的标志号。都有一个唯一的标志号。通过通过使用使用inode来定义文件系统的结构以及描述来定义文件系统的结构以及描述系统中每个文件的管理信息。系统中每个文件的管理信息。nEXT2文件系统中的每个文件都用一个单独的文件系统中的每个文件都用一个单独的inode(即即stuct ext2_inode结构结构
36、)来描述,而来描述,而每个每个inode都有一个唯一的标志号。都有一个唯一的标志号。EXT2通通过使用过使用inode来定义文件系统的结构以及描述来定义文件系统的结构以及描述系统中每个文件的管理信息。系统中每个文件的管理信息。9.2.4 EXT2文件系统挂接挂接(mount)为为ext2文件系统文件系统mount -t ext2/dev/ram0/tmp将将/dev/ram0上上ext2文件系统挂接到文件系统挂接到/tmp目录目录 9.3 文件系统目录结文件系统目录结构构 嵌入式嵌入式Linux中,文件系统通常还是中,文件系统通常还是按照标准的目录结构来存放所有的文件的。按照标准的目录结构来存
37、放所有的文件的。在本节之中,选择了在本节之中,选择了uClinux(Micetek)开发环境中的默认目录、文件层次来对嵌开发环境中的默认目录、文件层次来对嵌入式入式Linux中的目录与文件进行介绍。中的目录与文件进行介绍。内容简介内容简介9.3.1 romfs文件系统目录结构 图图9-5 uClinux生成的生成的romfs文件系统目录结构文件系统目录结构n uClinux生成的目录结构生成的目录结构/prlc/sbin/home/dev/bin/lib/etc/var/tem/usr n/bin和和/sbin存放了可执行程序;存放了可执行程序;n/dev目录存放的是系统设备文件,提供系统中各
38、目录存放的是系统设备文件,提供系统中各 种设备的说明;种设备的说明;/etc目录存放系统中各种关于用户帐号、网络等的目录存放系统中各种关于用户帐号、网络等的 配置文件和启动脚本;配置文件和启动脚本;/lib下存放了库文件;下存放了库文件;/proc下面是系统信息下面是系统信息(本目录是虚拟目录,并不存本目录是虚拟目录,并不存 放在放在romfs中,而是在系统运行的时候自动生成中,而是在系统运行的时候自动生成);9.3.1 romfs文件系统目录结构/proc下面是系统信息下面是系统信息(本目录是虚拟目录,并不存放本目录是虚拟目录,并不存放 在在romfs中,而是在系统运行的时候自动生成中,而是
39、在系统运行的时候自动生成);/usr 目录是目录是Linux系统里面占用磁盘空间最大的目系统里面占用磁盘空间最大的目 录,是用户共享文件目录;录,是用户共享文件目录;/home是系统默认的普通用户的主目录的根目录;是系统默认的普通用户的主目录的根目录;/var、/tmp是一些系统记录文件和临时文件存放地是一些系统记录文件和临时文件存放地。本节主要介绍本节主要介绍/etc/etc,/bin/bin,/sbin/sbin和和/dev/dev目录。目录。9.3.1 romfs文件系统目录结构n /etc目录目录 在在/etc目录中,通常保存的是启动脚本目录中,通常保存的是启动脚本和应用程序的配置文件
40、。和应用程序的配置文件。在在uClinux中,中,/etc目录下默认文件目录下默认文件如如表表9-3所示所示。9.3.1 romfs文件系统目录结构表表9-3/etc目录下主要文件及用途目录下主要文件及用途文件名文件名用途用途 inetd.confInetdInetd的配置文件,配置网络服务的配置文件,配置网络服务 inittab初始化文件初始化文件 motd(issu)uclinuxuclinux的版本文件的版本文件 passwd密码文件密码文件 rc启动脚本启动脚本 resolv.confDNSDNS设置设置 services网络服务端口配置网络服务端口配置 versionMICETEKM
41、ICETEK版本信息版本信息n inetd.conf(未用)(未用)文件文件inetd.conf中的内容如下:中的内容如下:telnet stream tcp nowait root /sbin/telnetdhttp stream tcp nowait root /sbin/httpd -iuptime stream tcp nowait root /bin/cat /proc/uptime /etc/motd9.3.1 romfs文件系统目录结构 从文件内容看出从文件内容看出:n对对telnet的登录请求,将会由的登录请求,将会由/sbin/telnetd来处理;来处理;n对对http请求
42、,则会由请求,则会由/sbin/http来处理;来处理;n 对于对于uptime,则会将,则会将/proc/uptime的内容和的内容和/etc/issue中的内容显示出来。中的内容显示出来。ninittab 由于要在启动的时候通过串行口向调由于要在启动的时候通过串行口向调试机发回提示信息、错误信息等,因此文件试机发回提示信息、错误信息等,因此文件inittab这里要进行终端的初始化。这里要进行终端的初始化。nmotd(或或issue)文件文件motd中的内容主要是中的内容主要是uClinux的一些欢迎信息,在启动的一些欢迎信息,在启动MICETEK开开发版的时候,会在登录之前显示这些欢迎信息
43、。发版的时候,会在登录之前显示这些欢迎信息。9.3.1 romfs文件系统目录结构nPasswd 文件文件passwd中的内容:中的内容:root ab6TRGT20sY26r n rc 文件文件rc中的内容:中的内容:hostname EV44B0II /bin/expand/etc/ramfs.img/dev/ram0 mount-t proc proc/proc mount-t ramfs/dev/ram0/var9.3.1 romfs文件系统目录结构mkdir/var/configmkdir/var/tmpmkdir/var/logmkdir/var/runmkdir/var/lock
44、cat/etc/motdifconfig lo 127.0.0.1route add-net 127.0.0.0 netmask 255.255.255.0 lodhcpcd-p-a eth0&ifconfig eth0 192.168.1.20MDB:9999&9.3.1 romfs文件系统目录结构文件系统目录结构 本系统的本系统的rc文件中主要完成的功能文件中主要完成的功能:设定设定hostname为为EV44B0II。使用使用ifconfig设定网络设定网络(ip地址、网关等地址、网关等)。使用使用expand将将ramfs展开到展开到/dev/ramO。挂接挂接/var(ram盘盘)和
45、和/proc文件系统。文件系统。建立一些目录,显示欢迎信息,启动建立一些目录,显示欢迎信息,启动MDB调调 试服务程序。试服务程序。9.3.1 romfs文件系统目录结构文件系统目录结构nresolv.conf(未用)(未用)resolv.conf中设定了中设定了DNS服务器的中地址服务器的中地址nservices TCP和和UDP可以同时被多个进程可以同时被多个进程使用,需要给这些进程分配不同的端口号加使用,需要给这些进程分配不同的端口号加以区别。以区别。该该文件包含分配给各种服务的端口文件包含分配给各种服务的端口号。如号。如telnet的的TCP端口号为端口号为23,http为为80,ft
46、p为为21等。等。9.3.1 romfs文件系统目录结构n/bin、/sbin目录目录 这个目录是系统中最主要的可执行文件这个目录是系统中最主要的可执行文件的存放地,这些可执行文件大都是的存放地,这些可执行文件大都是uClinux系系统里最常用的命令。统里最常用的命令。这些命令可以大致归为下面几类:这些命令可以大致归为下面几类:9.3.1 romfs文件系统目录结构1.文件操作文件操作:cat,cmp,cp,ln,ls,mkdir,more,mv,pwd,rm,rmdir,cd,chmod,chown,expand,umask。2.系统管理系统管理:df,free,kill,mount,ps,
47、sh,shutdown,umount,init,exec,mknod,sleep,telnet,date,echo。3.网络管理网络管理:hostname,login,ping,ftp,ifconfig,finger,route。9.3.1 romfs文件系统目录结构n/dev目录目录 在采用了在采用了devfs(设备文件系统设备文件系统)之后,部分之后,部分地解决了这个问题。在这个目录下,仅包含终端、地解决了这个问题。在这个目录下,仅包含终端、串口、串口、ROM和必须具有的设备文件和必须具有的设备文件(如如mem,null等等),构造了一个精简的,构造了一个精简的/dev目录。目录。9.3.
48、1 romfs文件系统目录结构 此外,如果需要再添加相应的设备文件。此外,如果需要再添加相应的设备文件。例如,假如需要支持例如,假如需要支持framebufferframebuffer使用图形界面,使用图形界面,就可以添加就可以添加fbOfbO等设备文件的节点,等设备文件的节点,然后使用然后使用genromfsgenromfs重新生成重新生成romfsromfs映像文件,映像文件,上传到上传到MICETEKMICETEK开发板上即可。开发板上即可。9.3.2 uClinux源程序结构 在在MICETECK开发板的开发板的uClinux源程序目录为:源程序目录为:uclinx-44b0ii,其目
49、录结构描述如下:,其目录结构描述如下:nlib/uclibc lib是用户应用程序库目录,包括是用户应用程序库目录,包括libc、libm等函数库。等函数库。uclibc包括包括uc-libc、uc-libm等函数库。等函数库。nusr 它包括用户模式下的应用软件,如:它包括用户模式下的应用软件,如:ftp,httpd,ifattach,init,mircrowindows,mount,tftp,tftpd,route等各种免费应用软件等各种免费应用软件包。包。nconfig 针对不同厂商开发板的配置情况,裁针对不同厂商开发板的配置情况,裁减配置减配置uClinux内核,形成的配置脚本文件。此
50、内核,形成的配置脚本文件。此目录提供一个交互的目录提供一个交互的Linux配置程序。配置程序。nvendors 此目录下包括各种开发平台的特殊结此目录下包括各种开发平台的特殊结构信息和支持文件。如构信息和支持文件。如MICETEK平台的支持文平台的支持文件就在件就在ventors/micetek/44b0目录下。目录下。nromfs 它是一种它是一种romfs文件系统,用于构造开发文件系统,用于构造开发平台的平台的root根文件系统,包括根文件系统,包括/bin、/etc、/dec、/home、/lib、/mnt、/proc、/usr、/var等字目录。等字目录。9.3.2 uClinux源程