您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术vxworks嵌入式操作系统下串行设备驱动程序开发思路 正文
vxworks嵌入式操作系统下串行设备驱动程序开发思路

vxworks嵌入式操作系统下串行设备驱动程序开发思路

点击数:7995 次   录入时间:03-04 11:37:01   整理:http://www.55dianzi.com   嵌入式系统-技术
5

     

    由上图知,iosDrvInstall()函数在Driver Table中挂接的函数是tyWrite()和tyRead(),而不是我们实际编写的输入/输出函数。其具体的调用过程是:

    ① 当用户调用write函数进行写操作时,根据相应的fd调用在Driver Table中注册的函数tyWrite(),此函数的作用是将用户缓冲区的内容写入相应的输出ring buffer,当发现缓冲区内有内容时,开始调用回调函数tyITX(),从ring buffer读取字符,由I8250Startup()启动中断输出,最后由设备的输出中断服务程序(在本例中调用的是sysOutbyte())将字符发往指定的串口。

    ② 当串口接收到数据时会调用输入中断服务程序(在本例中是sysInbyte()),将输入的字符写入指定的缓冲区。然后由回调函数tyIRd()将缓冲区的内容读入ring buffer,当用户调用read函数进行写操作时,会根据相应的fd调用在Driver Table中注册的函数tyRead(),此函数会将ring buffer中的内容读入用户缓冲区。

    关于具体的中断输入/输出函数如何调用,本文不做详细分析,请参阅i8250int()及i8250Startup()。

    对于输入/输出控制函数ioctl()的挂接,则是直接将命令传到由用户编写的i8250ioctl()函数,其具体的实现代码与驱动的设计思路无紧密的联系,本文也不做具体分析。

    ⑷ 具体设备与相关驱动的挂接

    当Driver Table中相应的驱动函数挂接完成,开始编写驱动程序的最后一步:在Device Table中加入设备,完成具体设备与相关驱动的挂接。此项工作是由ttyDevCreat()函数完成的。本函数主要实现以下功能:

    ① 分配并初始化一个device descriptor。

    ② 通过调用tyDevInit()初始化tyLib。此处主要完成输入/输出ring buffer的创建、建立用与相关函数的信号量、初始化selectLib。

    ③ 调用iosDevAdd()将串口设备加入Device Table。对于设备特性的描述信息是由sysSerialChanGet()函数得到,并以参数形式传入的。

    ④ 为底层设备安装回调函数,在本例中是为i8250CHAN 安装tyIRd()、tyITx()两处回调函数。

    ⑤ 开中断,设备开始以中断方式工作。

    至此,驱动程序的分析全部完成。与挂接驱动函数不同,在安装设备的过程中,无论设备相同与否,有几个设备则上述过程需调用几次。以上各函数的加载主要在usrinit()函数中完成。

    3. 结束语

    需要说明的是,在VxWorks下,设备驱动程序既可以嵌入内核随系统一起启动,也可以作为可加载模块在系统启动之后运行。相比之下,后一种方式比较简单,不用修改系统内核,引入错误的可能性小。但是无论采取哪种方式,其基本思路及需要完成的工作是相同的。本文没有按照系统的调用过程进行一步步分析,主要基于上述考虑。用户在编写相关驱动程序时,中心任务是按步骤完成上述功能,而没有必要去死搬系统的加载步骤。



上一页  [1] [2] 


本文关键字:嵌入式  操作系统  程序开发  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术