②调用操作系统中文件系统的IOControl()函数。它将使TrueFFS具有其它文件系统的特性:
1)文件系统状态。它的值可以指示操作指令是否成功的传递给了驱动器或者驱动器对于操作指令有无响应,但它并不能确认操作的结果或状态。一个操作的结果或状态是由输入输出控制包(IO Package)来传递的。它们使用的是TrueFFS的标准状态码,这些状态码可以在IO控制的头文件以及一些驱动包文件中查到。
2)文件系统IO控制。它可以调用文件系统的扩展功能。
3)输入输出请求包。所有的TrueFFS扩展功能都使用下列输入输出请求包,它的定义格式如下:
irHandle(句柄)主要用于确认一个操作究竟应该作用于哪一个分区。如果只有一个驱动器,那么就不会出现冲突,则句柄的值可以设置为0。驱动器的句柄包含了物理驱动数(LSB 0-3)和分区数(LBB 4-7)。由于Binary Partition和Disk Partition的句柄都可以从0开始。所以,Binary Partition和Disk Partition总是通过不同的句柄来访问,以免产生冲突。
irFlags这个变量用来标识扩展功能的类型。每一个扩展功能都有一个枚举类型的代码标识。
irData包含了一个指向fllOctlRecond记录的指针。fllOctlRecond记录包含了一些扩展功能的输入输出记录的指针。
DOC2000为M-System 公司DOC系列的第二代产品,它为32脚DIP封装,具有体积小,封装简单的特点,通过将DOC2000插入DOC2000插槽,可以大量减少占用的物理空间。
如图1所示,DOC2000由系统接口单元(System Interface)、系统引导模块(Boot Block)、错误检测与更正单元(EDC/ECC),闪存控制单元(Flash Control)以及Flash存储介质组成。其中系统接口单元为DOC2000提供一个类SRAM 接口,使之能通过CPU的本地总线、ISA总线、SRAM 总线、EEPROM 接口建立与操作系统的连接。DOC提供片选信号(CE#)、读写信号(WE#)、使能信号(OE#)以及13位宽的地址线(A[0:12])和8位宽的数据总线(D[0:7])。每个DOC占用系统8K的地址空间,通过地址窗的滑动来访问整个DOC空间。系统引导模块用来响应PC机结构中BIOS扩展设备的搜索。当BIOS检测到DOC2000为扩展设备时,它可以执行保存在系统引导模块中的TrueFFS的驱动程序,通过系统调用TrueFFS格式转换软件,系统可以把DOC2000映射为普通的硬盘从而方便地进行读写。DOC2000的错误检测和更正模块用来提供数据错误的检测、更正以及数据保护。Flash控制模块主要用来完成TrueFFS地址与Flash介质地址之间的转换、数据传输控制等功能。

2 电子盘设备驱动程序的基本结构流程
在VxWorks下,设备驱动程序既可以嵌入内核随系统一起启动,也可以作为可加载模块在系统启动之后运行。
2.1可选加载方式
可选加载方式驱动电子盘是一种比较常用的方式。它是把驱动程序制作成一个可独立运行的应用程序,当需要的时候可以选择加载到用户程序集中。利用可选加载方式驱动电子盘的第一步是要确定电子盘所占用的系统地址窗的范围。一般主机板都给出了几个可以选择的范围,通过跳线可以设置电子盘的地址窗的起始、结束地址。启动VxWorks下TrueFFS驱动程序,根据实际的地址将地址窗参数配置好。第二步将TrueFFS映射成DOS文件系统。调用tffsMakeHandle()函数得到驱动器的描述符。将此描述符传递给驱动器句柄。然后定义一个块设备的指针用于保存一个虚拟DOS文件系统分区的信息。调用tffsDevCreate()函数将刚才检测到句柄的TrueFFS驱动器映射成DOS文件系统分区,并将该函数的返回值传递给定义好的块设备指针。至此,就完成了TrueFFS到DOSFS的映射过程。完成DOSFS设备初始化后,在Tornado的Shell环境下运行devs命令就可以看到tffs设备已经在系统设备列表中了。第三步,读写电子盘上的文件。设置好要读写的文件的文件名、路径。利用标准C++的文件系统函数就可以方便的读写文件了。
2.2嵌入系统方式
嵌入系统方式比可选加载方式要复杂。它将驱动程序嵌入系统内核中,这样电子盘可以在系统启动的时候被驱动。这种方式主要应用于系统引导文件放在电子盘上的情况。嵌入系统方式又分为X86机的嵌入方式和其它(如PowerPC,MIPs等)嵌入方式。这里以X86方式为例。
第一步修改目标BSP目录下的config.h文件,增加电子盘设备的定义,修改引导设备。第二步修改系统BSP目录下的bootconfig.C文件,将电子盘的驱动程序加入。第三步修改系统BSP目录下的usrconfig.h文件,调用电子盘的驱动程序。