好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

【2017年整理】vxworks dosfs.doc

8页
  • 卖家[上传人]:爱****1
  • 文档编号:993591
  • 上传时间:2017-05-24
  • 文档格式:DOC
  • 文档大小:88.50KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • VxWorks 为块设备(磁盘)的实时使用提供了两种本地文件系统:一种与 MS-DOS 文件系统相兼容,另一种与 RT-11文件系统相兼容这些文件系统的支持库分别为 dosFsLib 和 rt11FsLibVxWorks 还提供了一种简单的 raw 文件系统,这个文件系统把整个磁盘作为一个单独的大文件这个文件系统的支持库是 rawFsLibVxWorks 还为不使用标准文件或目录结构的磁带设备提供了一个文件系统磁带卷被看作一个 raw 设备,整个卷就是一个大文件这个文件系统的支持库是 tapeFsLib另外,VxWorks 提供了一个文件系统支持库 cdromFsLib,它允许应用程序从依照 ISO9660 标准文件系统格式化的 CD-ROMs 中读取数据在 VxWorks 中,文件系统不受块设备种类型或它的驱动程序的约束VxWorks 块设备都使用一个标准接口,以便文件系统可以与设备驱动程序自由的混合做为选择,你可以写自己的能被驱动程序以相同方式使用的文件系统,只要在文件系统、驱动程序和 I/O 系统间遵循同样的标准接口 VxWorks 的 I/O 体系结构使得在一个 VxWorks 系统中可以有多样的文件系统,甚至其类型也可以不同。

      块设备界面在 3.9.4 块设备中讨论1 与 MS-DOS 兼容的文件系统:dosFs使用 dosFs 文件系统格式化的磁盘与 MS-DOS(直至 6.2 版本)磁盘是相兼容的由两个文件系统初始化的硬盘之间在格式上有细微区别然而,数据自身是兼容的,而且 dosFs 可被配置成使用 MS-DOS 格式化的磁盘DosFs 文件系统向不同要求的实时应用程序提供了良好的适应性主要特点包括:l 文件和目录分等级排序,允许有效地组织,在一卷上可以创建任意数量的文件l 每个文件可以是连续存储或非连续存储的非连续存储的文件可使硬盘空间利用率更高,连续存储的文件可以增强系统性能l 具有与广泛可用的存储器和可恢复介质的兼容性应用 VxWorks(不使用 dosFs 文件扩展名) 、MS-DOS PCs 和其它系统创建的磁盘可以自由的交换如果分区表被说明,那么硬盘也是兼容的l 具有从有 dosFs 文件系统的本地 SCSI 设备引导 VxWorks 的能力l 可以使用比通常 MS-DOS 允许的 8 个字符的文件名加 3 个字符的扩展名更长的文件名l NFS(网络文件系统)的支持1.1 磁盘组织MSDOS/ dosFs 文件系统提供了一种以灵活方式组织磁盘数据的方法。

      它维护指定目录、每个包含文件或其它的目录的等级设置文件可以被设置其搜索路径;文件扩展时,新的磁盘空间被自动分配分配给一个文件的磁盘空间不必一定是连续的,这样可以使磁盘空间浪费最小然而,为了提高它的实时性,dosFs 文件系统允许连续空间被预先个别地分配给文件,从而使查找操作最块,行为更加确定MS-DOS/dosFs 文件系统的通常组织结构如图 1,其中的多个单元在下面的部分论述图 1 MS-DOS 磁盘组织-------------------------------引导扇区 扇区 0-----------------------------文件分配表(FAT)-----------------------------根目录------------------------文件和子目录----------------------------簇在 MS-DOS/dosFs 文件系统中,分配给文件的磁盘空间由一个或多个磁盘簇组成一个簇为一组连续的磁盘扇区 软盘通常由两个扇区组成一簇;固定硬盘由更多的扇区组成一簇文件系统可以一次分配的最小的磁盘空间为一簇虽然每簇有巨大数量的扇区允许在固定大小的文件分配表( FAT;见 文件分配表)中描述一个巨大的磁盘,但是这可能会导致磁盘空间的浪费。

      引导扇区MS-DOS/dosFs 硬盘或磁盘的第一个扇区称为引导扇区其中包含有多种配置数据其中一些数据域描述硬盘的物理性质(例如总扇区数) ,另外一些域描述文件系统变量(例如根目录的大小) 引导扇区信息在初始化时写入磁盘dosFs 文件系统可以使用在另一个系统上初始化过的磁盘(例如,在 MS-DOS PC上使用 FORMAT) ,或者 VxWorks 可以使用 ioctl()调用中的 FIODISKINIT 函数初始化磁盘随着 MS-DOS 标准的发展,多样的域被加入到引导扇区的定义中VxWorks 下的磁盘初始化使用 MS-DOS 5.0 版本定义的引导扇区域MS-DOS 初始化硬盘时,在引导扇区中加入一个分区表而 VxWorks 不创建这样一个表所以两个系统初始化的硬盘是不同的如果设备的块补偿参数创建程序将超出分区表范围的数据指向数据区的第一个字节,那么 VxWorks 可以读取被 MS-DOS 格式化的磁盘文件文件分配表每个 MS-DOS/dosFs 卷包含一个文件分配表(FAT) 对每一个分配给文件或目录的磁盘上的簇,FAT 中都有一个条目当簇没有使用过时(可分配) ,它的条目值为零。

      如果簇分配给一个文件,它的条目值是文件下一部分的簇号如果簇位于文件的最后,它的条目值是-1所以,文件或目录的表述由一个 FAT 条目链表组成如 2 例所示,一个文件由簇2、300 和 500 组成簇 3 是没有使用过注意:dosFs 不映射坏的磁盘扇区到 FAT 中图 2:FAT 条目此主题相关图片如下:FAT 的每个条目占 12 或 16 位最多包含 4085 簇的磁盘卷用 12 位条目;多于 4085 簇的磁盘用 16 位条目条目(特别是 12 位条目)最初利用英特尔 8088 体系配置的优点,编码为特殊形式然而,因为所有的 FAT 操作都通过 dosFs 文件系统执行;所以编码和译码与 VxWorks 应用程序无关一个卷通常包括多个 FAT 拷贝这种冗余允许数据在第一份 FAT 中发生介质错误事件时得到恢复警告:如果是指定配置,dosFs 文件系统维护多个 FAT 拷贝;然而,在错误事件中,拷贝不是自动使用的FAT 的大小和 FAT 拷贝的数量是由引导扇区中的域决定的对于使用 dosFs 文件系统初始化的磁盘,这些参数是在dosFsDevInit( )调用(通过设置卷配置结构 DOS_VOL_CONFIG 中域)期间被指定的。

      根目录每个 MS-DOS/dosFs 卷包含一个根目录根目录总是占有紧接着 FAT 拷贝的一组连续的磁盘扇区根目录占领的磁盘区域不在 FAT 中被条目描述根目录的大小是固定的,它的大小被引导扇区中的一个域指定,作为允许的目录项的最大数值对于使用 dosFs 文件系统初始化的磁盘,这个大小是在 dosFsDevInit( )调用(通过设置卷配置结构 DOS_VOL_CONFIG 中域)期间被指定的因为根目录有一个固定的大小,所以目录为满时再向其中加入项将返回一个错误子目录除了根目录外,MS-DOS/dosFs 卷有时包含一个子目录层和根目录一样,子目录也包含文件和其它子目录项; 不过,在有些方面它们不同与根目录,而是类似于文件l 第一、象文件一样,每个子目录都被另一个目录中的项描述这样的一个目录项通过在文件属性字节中一个位设置来说明它描述了一个子目录同时,子目录与根目录不同,它有用户指定名l 第二、分配给子目录的磁盘空间由 FAT 条目连接而成的一组磁盘组成这意味着子目录可以随着条目的加入而增大,并且子目录不一定要由连续的簇组成根目录与子目录不同,能由任意数量的扇区组成,并且不必等于簇的整数倍数。

      l 第三,子目录通常包含两个专用的项 “.”项指向子目录本身, “..”项指向子目录的父目录而根目录不包含这些专用项文件在 MO-DOS/dosFs 文件系统中分配给文件的磁盘空间是由 FAT 中的条目链在一起的一组簇一个文件不一定由连续的簇组成;可以以任意顺序分配磁盘任意位置的不同的簇每个文件在其目录中有一个描述项这个项包含文件名、大小、最后一次修改的时间和日期,还有文件的几个重要属性(只读文件,系统文件,隐藏文件,存档文件) 这个条目也包含文件的起始簇数;剩下的簇用 FAT 定位卷标一个 MS-DOS/dosFs 磁盘可以有一个相关的卷标卷标在根目录中是一个特殊项它不包含文件名和子目录,而是包含一个识别卷的字符串这个字符串可以包含最多 11 个字符卷标项是通过在目录项中的一个特殊的文件属性字节的值来识别的注意虽然卷标条目没有用 ls()报告出来不过它占了根目录固定数目的条目中的一个卷标可以通过使用带有 FIOLABELSET 函数参数的 ioctl()调用加入到 dosFs 卷如果卷标不存在,就在卷的根目录加一个卷标项,否则,改变卷标字符串的值这个卷标条目占据一个固定的根目录条目数;当根目录满时增加一个条目将导致一个错误。

      当前的卷标字符串可以通过调用带有 FIOLABELGET 函数参数的 ioctl()来获得如果没有卷标,这个调用将返回一个错误,并设置 errno 为 S_dosFsLib_NO_LABEL在 VxWork 或 MS-DOS5.0(或更高版本)下初始化的磁盘,其引导扇区也包含卷标字符串1.2 初始化 dosFs 文件系统注意在任何其它操作能被执行之前,dosFs 文件系统库(dosFsLib )必须通过 dosFsInit()调用进行初始化这个程序带有一个参数――可以在同一时间打开的 dosFs 文件描述符的最大数文件描述符的数目是在初始化时被分配,而且应用程序打开一个文件、目录或文件系统设备时,就使用了一个文件描述符dosFsInit()程序在 I/O 系统驱动器表中也为文件系统创建了一个条目(用 isoDrvInstall() ) 这个条目为 dosFs 文件操作指定条目指针,并且可以用于 dosFs 文件系统中所有的设备分配给 dosFs 文件系统的驱动器数记录在全局变量dosFsDrvNum 中DosFsInit()通常在 VxWorks 系统启动之后被 usrRoot()任务调用。

      使用这种初始化,在项目工具 VxWorks view 中选择 INCLUDE_DOSFS,在 Params 属性标记中设置 NUM_DOSFS_FILES 为想打开文件的最大数1.3 使用 dosFs 初始化设备dosFs 文件系统初始化后,下一步是创建一个或更多的设备设备通过设备驱动器的设备创建程序(xxDevCreate() )来创建驱动程序向块设备描述符结构(BLK_DEV)返回一个指针 BLK_DEV 结构描述了设备的物理形式,同时也指定设备驱动程序提供给文件系统的程序更多块设备的信息参见 3.9.4 块设备设备刚创建之后,块设备没有与其相关联的名字和文件系统为了初始化一个块设备用于 dosFs 文件系统,已经创建好的块设备必须与 dosFs 相关联,并指派一个名字这由 dosFsDevInit()完成它的参数有:用来标识设备的名字、块设备描述符结构和卷配置结构 DOS_VOL_CONFIG(见 4.2.4 卷结构) 例子:DOS_VOL_DESC *pVolDesc;DOS_VOL_CONFIG configStruct;pVolDesc = dosFsDevInit ("DEV1:", pBlkDev, &configStruct);dosFsDevInit()调用执行下列任务:l 为设备命名,把设备加入 I/O 系统设备表(用 iosDevAdd() ) 。

      l 为设备分配并初始化文件系统卷描述符l 返回指向卷描述符的一个指针这个指针用来在一些文件系统调用时识别磁卷用 dosFs 初始化设备并不格式化磁盘,也不用 MS_DOS 结构(根目录,FAT,等等)初始化磁盘可以在有数据存在于MS_DOS 文件系。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.