- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VxWorks 串行设备驱动的编写
VxWorks 串行设备驱动的编写
概述
vxWorks的串行设备的驱动不同于一般的设备的驱动。一般的设备都是在系统初启的时候调用xxDrv()来安装diver table。然后,调用xxDevCreate()来将该设备描述符xx_DEV加入到device table中。在应用层用设备的时候,直接通过fd(device list(driver table的顺序调用相应的驱动函数即可。他们的层次关系是:应用(I/O system ((driver。层次关系很明确。然而串行设备的层次关系就不完全是这样子的。基于许多因素的考虑,vxworks的串行设备的驱动分成了如下图所示的几层:
图1 串行设备驱动代码的分层结构
从图中可以看出:系统中的串行设备驱动总共有3层。其中,usrConfig.c和ttyDrv(包括tyLib)提供了一些对串行设备的一些通用操作。sysSerial.c中一些对不同开发板(系统)中串行设备有关的一些数据结构进行初始化。所以,称之为Implementation specific code。最后,的xxDrv.c当然是包括了一些具体设备相关的驱动/操作。(比如读写数据,设置等)
说道这里我们来回过头来看看,包含了串行设备的系统的总体的一个模型:
图2.系统的模型
从上图看出串行设备的驱动xxDrv并不是直接和I/O system交互的。中间存在一个ttyDrv(包括tyLib)。实际上,在diver table中安装的不是xxDrv的函数而是ttyDrv/tyLib提供的函数。另外,Target Agent可以和xxDrv交换,方便系统的调试。
TtyDrv(包括tyLib):可以称之为一个虚拟的设备驱动。因为他只是介于I/O与底层的具体设备的driver之间,为系统提供的统一的串行设备的界面。另外,还可以调用具体硬件的管理驱动。总之,ttyDrv给系统提供的是一些通用的管理函数(缓冲管理,互斥等)。所以,ttyDrv往往就可以管理多个设备。下面是表明ttyDrv在系统中地位的一个图:
图3 ttyDrv在系统中的地位
xxDrv:给ttyDrv和target agent提供支持。具体的内容在下面叙述。
ttyDrv(包括tyLib)
从概述中知道ttyDrv(tyLib)是一个虚拟的驱动,既管理着和I/O的交互,又管理着和底层硬件驱动的交互。他在和I/O交换的时候所作的工作主要有:
I/O System requirements (such as adding entry inDriver Table and creating device descriptor andadding it to the system Device List)
Handling all I/O system entry routines, e.g. ttyOpen,ttyIoctl, tyRead, tyWrite.
Manages selectLib calls
Manages command line editing (see ioctlfunctionality in tyLib man page)
Manages data buffering
Manages task sychronization on full or empty buffers
Manages mutual exclusion on buffers
其中,ttyDrv负责着ttyOpen、ttyIoctl的接入,而tyLib负责着tyRead、tyWrite的接入。下面给出一个更加细致的系统的数据的流向图:
图4 ttyDrv的数据流图
从图中,系统的层次关系就很清楚了。应用层往往调用通用的ioLib中的函数read、write、ioCtrl等。这些函数从输入的fd中找到相应的设备描述符,然后找到了driver table。调用driver table中的函数。而driver table中的函数则是第二层的东西了——ttyDrv/tyLib(tyWrite、tyRead等)。再又ttyDrv/tyLib和真正的设备(xxDrv)打交道。第二层和底层的通讯是通过回调函数(callback)来实现。具体的说就是:ttyDrv提供两个函数负责输出时候底层驱动可以从buffer中的到数据,输入时候底层驱动可以将接受到的字符填入到buffer中。tyLib给提供的回调函数的格式如下:
STATUS tyIRd
(
TY_DEV_ID pTyDev, /* ptr to tty device descriptor */
char inchar /*输入的缓存指针 */
)
STAT
您可能关注的文档
- Universal Design checklist .doc
- 那些年为皮肤的事.docx
- Universal Design Checklist and Resources.doc
- Unofficial Compilation of Regulation for the Talent Search Program.doc
- Unit 8 剖面图 一割面 割面(Cutting Plane)是一种虚构的面,用来表示.doc
- UOOC联盟课程常见问题解答doc.doc
- 那些年我们一起用过的面膜们~薇风贝佳斯佰草集还有刚买的AA花水等.doc
- UpFile20120912094431doc .doc
- 那些年你错过的流量.doc
- UNIX系统管理-第十四章调度cron任务 .doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)