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

嵌入式系统 时间:2012-10-09来源:网络

1. 概 述

我们在基于vxworks嵌入式操作系统开发产品时,经常会根据自行设计的硬件电路开发专用的驱动程序。Vxworks下的驱动程序根据设备的不同特性,,大体可分为:char driver、serial driver、bLOCk driver、end driver、scsi driver等类型,其中以char driver最简单,最基础,以serial driver最常用。掌握驱动程序的基本工作流程,无论对我们开发上层的应用还是自己编写相应的驱动程序,都很有帮助。本文主要以i8250串口驱动程序为例,介绍一下串行驱动程序编写的基本思路。

驱动程序,简而言之就是对具体的硬件设备进行管理和服务的程序。为了提高代码的可移植性,vxworks将所有的输入/输出设备都看成是一个文件,我们对设备的输入/输出操作,都可以看作是对指定文件的读写操作。例如,我们用c 标准库函数open()打开一个文件,可以是打开一个传统意义上的文本文件,也可以是指定一个输入/输出设备,如指定对某一个串口的输入/输出操作。在vxworks操作系统中,驱动程序的主要作用是完成对相关设备的读、写、打开、建立、关闭及控制等功能中的一项或几项,具体情况视具体的设备及设计要求而定。

概括的说,驱动程序主要完成以下几项工作:

(1)相关设备的初始化。

(2)底层输入/输出函数与上层标准输入/输出函数的挂接。

(3)相关设备与对应驱动程序的挂接。

我们就按照这个思路,以I8250串口为例,分析一下串行设备驱动程序的编写及加载流程。首先,给出串行设备驱动的结构框图:

需要说明的是,ttyDrv是一个虚拟的设备驱动,与tylib一起,用于处理I/O系统与底层实际设备之间的通信。主要完成以下工作:

(1)处理I/O系统的各种需求,如在driver talbe 中添加相应的驱动条目、创建设备标识符(devise descriptor)。

(2)实现与上层标准I/O函数及实际驱动程序的无缝连接。其中,ttyDrv完成open和ioctl两项功能(ttyopen()和ttyioctl())。Tylib完成read和write两项功能(tyRead()和tyWrite())。

(3)管理输入/输出数据缓冲区。

下面,我们结合图(一)给出的框图,以i8250为例,开始分析串行设备驱动的设计流程。用户在编写自己的驱动程序时,可以不按照系统函数命名的方法命名,也可以不按照系统给定的方法进行函数功能的划分,但其初始化及实现流程却不能改变。

2. 驱动程序设计流程分析

⑴ i8250相关硬件设备的初始化。

编写驱动程序的第一步是完成相关硬件的初始化。与I8250相关的硬件初始化函数主要有以下三个:sysSerialHwInit()、i8250HrdInit()、i8250InitChannel(),其调用顺序是:sysSerialHwInit()ài8250HrdInit()ài8250InitChannel(),这条工作链的主要作用是,完成对I8250_CHAN数据结构的初始化。

下面对分别这几个函数的功能介绍一下:

l

sysSerialHwInit()

本函数完成的主要任务是初始化设备的中断向量、串口的通信模式及相关存贮器,在函数的最后调用i8250HrdInit()对I8250_CHAN结构进一步初始化。

void sysSerialHwInit (void)

{

int i;

for (i=0;i

{

i8250Chan[i].int_vec = devParas[i].vector; /*初始化中断向量*/

i8250Chan[i].channelMode = 0; /*初始化SIO_MODE 可以是INT或POLL*/

i8250Chan[i].lcr = UART_REG(UART_LCR,i); /*初始化line control register*/

………………………

1 2 3

关键词: vxworks 嵌入式 串行设备 驱动程序

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版