VxWorks编程手册
OPT_CRMOD ——Translate input RETURN characters into NEWLINE (\\n); translate output NEWLINE into RETURN-LINEFEED.
OPT_TANDEM ——Respond to X-on/X-off protocol (CTRL+Q and CTRL+S). OPT_7_BIT ——Strip the most significant bit from all input bytes.
OPT_MON_TRAP—— Enable the special ROM monitor trap character, CTRL+X by default. OPT_ABORT ——Enable the special target shell abort character, CTRL+C by default. (Only useful if the target shell is configured into the system;.) OPT_TERMINAL ——Set all of the above option bits. OPT_RAW ——Set none of the above option bits.
Raw模式和line模式: Tty设备由两种操作模式:Raw模式(不缓存)和line模式。Raw模式是缺省的,line模式可以通过OPT_LINE选项进行设置。在raw模式,从设备输入的每个字节都是可读的;在line模式,直到NEWLINE字节被输入,字节才被保存,整个行字符,包括NEWLINE,在环形缓存区中都是可用的(一次操作)。 Tty的特殊字节: 如果tty设备执行在line模式下,下列的字符很特殊:
1、 退格字符;ctrl+H 2、 行删除字符:ctrl+U
3、 文件结束字符(EOF),ctrl+D
I/O控制函数: TyLib库支持的I/O控制函数如下:
FIOBAUDRATE ——Set the baud rate to the specified argument. FIOCANCEL ——Cancel a read or write.
FIOFLUSH—— Discard all bytes in the input and output buffers. FIOGETNAME ——Get the file name of the fd.
FIOGETOPTIONS ——Return the current device option word. FIONREAD—— Get the number of unread bytes in the input buffer. FIONWRITE—— Get the number of bytes in the output buffer. FIOSETOPTIONS—— Set the device option word.
4.7.2 PIPE设备
PIPE是虚拟的设备,通过它,任务可以通过I/O系统进行通讯。任务将消息写到PIPE,这些消息可以被其他任务读取。 创建PIPE: status = pipeDevCreate (\maxMsgs, maxLength); 如果任务试图向已满的PIPE中写消息,那么任务将等待,直到有消息出列;超出最大消息长度的血操作将导致错误。 从ISR向PIPE写: ISR可以使用PIPE同任务通讯,ISR可以调用函数write( )向PIPE写消息,任务和ISR可以向同一个PIPE写操作。如果PIPE已满,消息将被丢弃,因为ISR不能等待,除了write( )之外,ISR不能调用其他的I/O函数。 I/O控制函数:
第 31 页 共 35 页
VxWorks编程手册
被pipeDrv库支持的I/O控制函数如下(通过ioctl()函数): FIOFLUSH ——Discard all messages in the pipe. FIOGETNAME ——Get the pipe name of the fd.
FIONMSGS ——Get the number of messages remaining in the pipe. FIONREAD ——Get the size in bytes of the first message in the pipe. 4.7.3 伪内存设备
memDrv驱动允许I/O系统直接访问内存,当设备被创建时,指定内存的位置和大小。 安装内存驱动: 此驱动器首先被初始化,然后设备被创建: STATUS memDrv(void)
STATUS memDevCreate(char * name, char * base, int length) 设备的内存是以base开始的绝对内存位置,长度指明内存大小。 I/O控制函数: 被memDrv库支持的I/O控制函数如下(通过ioctl()函数):
FIOSEEK ——Set the current byte offset in the file.
FIOWHERE—— Return the current byte position in the file.
4.7.4 网络文件系统设备
通过镜像本地的文件系统,用函数创建I/O设备,可以访问远程的NFS文件系统,它的参数是:NFS服务器的主机名,主机文件系统名和本地文件系统名,例子: nfsMount (\
这样就创建了指定本地名的(/vxusr)I/O设备。如果本地名为空,则与远端名相同。通过这样的镜像,访问远端文件系统就想访问本地一样。
对NFS客户端的I/O控制函数: 被nfsDrv库支持的I/O控制函数如下(通过ioctl()函数):
FIOFSTATGET ——Get file status information (directory entry data). FIOGETNAME ——Get the file name of the fd.
FIONREAD ——Get the number of unread bytes in the file. FIOREADDIR ——Read the next directory entry. FIOSEEK ——Set the current byte offset in the file. FIOSYNC ——Flush data to a remote NFS file.
FIOWHERE ——Return the current byte position in the file.
4.7.5 非NFS设备
通过Remote Shell protocol (RSH)或FTP,VxWorks也支持访问远端主机上的文件。(用驱动netDrv)实现方式是:将远端主机上的整个文件拷贝到本地内存,读写操作都在本地内存内进行,当关闭时,文件被拷贝回远端主机,覆盖源文件。 创建网络设备: 为了能够用RSH或FTP访问远端主机,必须首先调用函数netDevCreate( )创建网络设备,函数参数是:设备名称,主机名称,使用的协议(0:RSH或1:FTP),例子:
netDevCreate (\
第 32 页 共 35 页
VxWorks编程手册
注意:创建网络设备允许访问远端系统上的任何文件或设备;而镜像NFS文件系统只能访问指定的文件系统。 I/O控制函数: 同NFS设备。
4.7.6 block设备
Block 设备是一系列可访问的数据块。最通常的block设备是磁盘,在VxWorks中,术语block指设备上最小的有地址的单元。与其他I/O略微不同,他并不是直接与I/O系统交互,他通过底层驱动与文件系统交互,文件系统再与I/O系统交互。为了使用BLOCK设备,VxWorks提供了与MS-DOS相同的文件系统。这也有简单的RAW磁盘文件系统,他们针对于:SCSI磁带设备、CD-ROM设备,FLASH内存设备。
4.7.7 SOCKET
一个套接字是任务间通讯的终端,数据从一个SOCKET发送到另一端。VxWorks SOCKET函数与BSD 4.4 UNIX SOCKET函数及WINDOWS SOCKET1.1兼容。
4.7.8 VxWorks与Host系统I/O的区别
1、设备配置(Device Configuration):在VxWorks中,设备驱动可以动态装配和卸载; 2、文件描述符:在UNIX和Windows中,fds在每个进程中是唯一的;在VxWorks中,fds是全局的,可以被每个任务访问(除了标准输入、标准输出和错误); 3、I/O控制:传到ioctl( )函数的参数可能不同;
4、 驱动程序:UNIX中,驱动在系统模式下执行,是不可抢占的;在VxWorks中,驱
动程序实际上是抢占的,因为他们运行在任务中。
5. 本地文件系统 5.1介绍
本章主要介绍VxWorks文件系统的组织、配置和使用。VxWorks文件系统主要包括block、磁带、CD-ROM及flash内存设备。本地文件系统是:
1、 dosFs文件系统,针对实时使用block设备而设计,与MS-DOS兼容; 2、 rawFS文件系统,将整个硬盘作为一个大的文件处理;
3、 tapeFS文件系统,专为磁带设备设计的,不使用标准的文件或目录结构; 4、 cdromFS文件系统,允许应用程序从CD-ROM读数据; 5、 TrueFFS文件系统,为flash内存设备提供了接口。 5.1dosFs
看文件the dosFs for Tornado 2.0 Release Notes and Supplement, 2.0.
5.2 Raw File System: rawFs
rawFs文件系统是最小的文件系统,只需要最基本的硬盘I/O函数。由于此文件系统将整
第 33 页 共 35 页
VxWorks编程手册
个磁盘的内容作为一个大的文件,因此,此设备上的所有OPEN()操作只指明设备名,不需要文件名。在执行其他应用之前,rawFs库,rawFsLib,必须初始化,可以用函数rawFsInit(),参数只有一个:可一次打开的rawFs文件描述符的最大值。rawFsInit()函数通常在系统启动之后被usrRoot()任务调用。 rawFs文件系统初始化之后,下一步是创建一个或多个设备。驱动程序的创建函数xxDevCreate()创建一个BLOCK设备,此时设备既没有名称也没有对应的文件系统。因此需要调用函数rawFsDevInit()进行初始化,它为设备制定名称,分配和初始化系统卷描述符;返回指向卷描述符的指针。 当可移动磁盘被改变时,必须通知rawFs文件系统,例如交换软盘。这有两种方法:(1):rawFsVolUnmount( )(2)ready-change 机制。 第一个方法是:在拿走磁盘之前调用函数rawFsVolUnmount( ),此函数清除所有的被修改的文件描述符缓存,并将已经打开的文件描述符标记为“旧的”,下一个I/O操作重新镜像磁盘。ISR不能直接调用rawFsVolUnmount( )函数。 第二个方法是:采用ready-change机制。磁盘就绪状态变化表明在下一个I/O调用之前必须重镜像。有三种方式:
1、 直接调用rawFsReadyChange()函数; 2、 调用函数ioctl( )用FIODISKCHANGE;
3、 在BLK_DEV结构中将bd_readyChanged域设置为TRUE;
ready-change通知不会引起将缓存数据写到磁盘,它只是将卷标记为需要重定向。
Ready-change可以被ISR使用。如果不能使用ready-change,则在改变磁盘之前关闭所有的文件描述符。
RawFsLib支持的I/O控制函数: RawFs文件系统支持ioctl( )函数功能,下列函数定义在ioLib.h文件中。 Function Decimal Description Value Announce a media change. Format the disk (device driver function). Initialize a rawFs file system on a disk volume (not required). Same as FIOSYNC. Get the file name of the fd. Get the number of unread bytes on the device. Set the current byte offset on the device. Write out all modified file descriptor buffers. Unmount a disk volume. Return the current byte position on the device. FIODISKCHANGE 13 FIODISKFORMAT 5 FIODISKINIT FIOFLUSH FIOGETNAME FIONREAD FIOSEEK FIOSYNC FIOUNMOUNT FIOWHERE
5.3 CD-ROM File System: cdromFs
6 2 18 1 7 21 39 8 CdromFs库cdromFsLib可以让应用程序读取任何CD-ROM(其格式符合ISO9660文件系统标准)。在对CD-ROM设备进行初始化和镜像之后,你可以用标准的POSIX I/O函数:open( ), close( ),read( ), ioctl( ), readdir( ), and stat( )访问设备上的数据。
第 34 页 共 35 页
VxWorks编程手册
CdromFs支持多个驱动、多个打开的文件和并行文件访问。通过使用标准的BLK_DEV结构,CdromFs支持对CD-ROM文件系统的访问。其基本的初始化顺序与在SCSI设备上安装dosFs文件系统类似。
5.4 目标服务器文件系统-TSFS
TSFS使用WDB驱动将请求从I/O系统传到目标服务器,目标服务器度请求并用主机文件系统执行请求,因此,当你用TSFS打开一个文件,被打开的文件实际是在主机上。他能自由访问主机上的文件,不需要将整个文件拷贝到目标服务器上。考虑读操作,驱动器将文件ID、接收数据的缓存地址和要接收的数据长度传到目标服务器,目标服务器在主机上执行读操作,将读出的数据传给目标程序,返回值和可能发生的ERRNO也传给目标。这样,文件就像在本地一样。
第 35 页 共 35 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VX编程手册(7)在线全文阅读。
相关推荐: