1 / 14
文档名称:

VxWorks Device Driver 机制分析.doc

格式:doc   大小:267KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

VxWorks Device Driver 机制分析.doc

上传人:tmm958758 2019/6/4 文件大小:267 KB

下载得到文件列表

VxWorks Device Driver 机制分析.doc

相关文档

文档介绍

文档介绍:概述:我们不可避免地经常要和devicedriver打交道,而devicedriver本身跟操作系统的相关性特别密切,而了解如何能做到屏蔽底层硬件提供标准且通用的接口给上层是我们研究devicedriver标准的基本目的,由于时间和篇幅的限制,而且我们的工作主要在VxWorks上进行devicedriver的开发,所以这里只对VxWorks下的标准devicedriver开发进行分析。详细分析:VxWorksDeviceDriver的在系统中的层次概述:VxWorksDeviceDriverBlockDiagramVxWorks标准devicedriver基本都是通过I/O系统来存取的,这样做的好处是可以屏蔽底层硬件,对上层应用程序提供统一的接口。VxWorks的I/O系统由基本I/O及含buffer的I/O组成,它提供标准的C库函数,基本I/O库与Unix兼容,而含buffer的I/O则与ANSIC兼容。我们将在后面介绍基本I/O与含buffer的I/O。VxWorks的I/O系统有其独特的特性,使得它比其它I/O系统更快速、灵活,这在实时系统中非常重要。还有一些特殊的devicedriver如Enddriver,Serialdevicedriver由于其自身的特性,虽然不是通过标准I/O来进行存取的,/O设备和Unix的I/O设备很相似,它们都分为:字符设备和块设备。字符设备是指在I/O传输的过程中以字符为单位进行传输的设备,如:键盘,鼠标,打印机等。块设备是指以“块”为单位对数据进行存取的设备,如:硬盘,光驱,软驱,磁带等。但是VxWorks下的I/O设备driver与Unix下的I/O设备driver也有区别,区别主要是:VxWorks的devicedriver可以动态安装和删除。VxWorks的文件描述符是全局的,可以被任何一个任务存取,除了标准的输入,输出,错误输出外。VxWorks的ioctl控制命令与Unix的不同。Unix下的devicedriver执行在系统模式,没有优先级之分,而VxWorks的devicedriver有优先级之分,这取决于调用它的任务的优先级。系统中标准C的I/O函数:CallDescriptioncreat( ) Createafile. remove( ) Removeafile. open( ) Openafile.(Optionally,createafile.) close( ) Closeafile. read( ) Readapreviouslycreatedoropenedfile. write( ) Writeapreviouslycreatedoropenedfile. ioctl( ) Performspecialcontrolfunctionsonfilesordevices一般来说在使用基本I/O函数时,经常使用文件描述符来对文件进行操作。有三个基本的系统保留的描述符:0=standardinput1=standardoutput2=standarderroroutput这三个描述符的值是你在用open()和create()函数创建描述符时永远得不到的描述符,这就是我们分配的描述符永远都大于2的原因。注意VxWorks支持I/O重定向的功能,我们可以使用函数:ioGlobalStdSet(stdFd,newFd)来将系统保留的描述符stdFd(0,1,2)重定向到newFd上,这样做的好处是可以将标准输入/输出/错误输出重新定向到任何一个你喜欢的I/O设备上,如:串口,socket,文件等等,便于你跟踪调试。自然也可以使用ioGlobalStdGet(stdFd)读出现在系统的标准输入/输出/错误输出定向在哪个描述符上。更灵活的是我们可以使用ioTaskStdSet(tasked,stdFd,newFd)重定向某个指定任务的标准I/()或create()取得文件描述符fd,使用的方法是:fd=open("name",flags,mode);essFlagsFlagHexValueDescriptionO_RDONLY 0 Openforreadingonly. O_WRONLY 1 Openforwritingonly. O_RDWR 2 Openforreadingandwriting. O_CREAT 200 Createanewfile. O_TRUNC 400 Truncatethefile. 在操作完该设备后记得使用close函数来释放此文件描述符。面向文件的设备必须使用create()来创建