2.4 串口驱动程序的动态分析

串口驱动程序的动态分析主要分为两部分,第一部分是串口驱动程序的初始化,第二部分则是串口驱动程序的应用。

2.4.1 串口驱动程序的初始化

串口驱动程序的初始化主要包括一下几个部分。

l 硬件地址的设置(指定)。硬件地址的指定可以通过在函数库中直接指定相关变量的数值而达到目的,不一定非要执行相关的函数。如sysSerial函数库。因此它不需要函数调用过程来实现。

l 硬件的初始化。主要是通过函数执行向硬件的控制寄存器写入特定的数值来实现,通常需要函数指定的动态过程。

l 中断处理程序的安装。需要函数执行来安装。

l 各个函数库的初始化。主要是函数库中相关数据结构的初始化,一般需要动态执行和静态指定相结合来实现。

l 串口驱动程序数据结构的搭建。主要体现在数据结构

下面从vxWorks操作系统启动的过程来分析驱动程序的安装过程。先看图2.17。

VxWorks UART Driver

图2.17 vxWorks操作系统启动过程中串口驱动的初始化过程(1)

VxWorks UART Driver

图2.18 第一步初始化建立的数据关系

串口驱动程序的第二步初始化则是通过调用函数usrRoot函数来完成的。如图2.19。

VxWorks UART Driver

图2.19 串口驱动程序的第二步初始化

VxWorks UART Driver

图2.20 iosInit函数初始化iosLib库

VxWorks UART Driver

图2.21 ttyDrvCreate运行完毕后形成的数据结构

表2.2给出了各个函数库的初始化过程。

表格 2

函数库名称 初始化函数名称 说明
ioLib   无需初始化
iosLib iosInit 参见图2.19
ttyDrv   无需初始化
tyLib tyDevInit  
i8250Sio

i8250HrdInit

i8250InitChannel

图2.17
sysSerial sysSerialHwInit 图2.17
usrSerial   无需初始化

上面完整地分析了各个函数库的初始化、硬件的初始化、以及数据结构关系的构建,vxWorks操作系统在初始化过程中通过这三个过程,完成了串口驱动的初始化以及安装过程。