1、Introduction

本章讨论和基于VxBus驱动程序模型的VxWorks设备驱动程序的相关核心概念,并特别剖析了VxBus设备驱动程序框架,主要包括以下信息:

  • 设备驱动程序相关的文件和目录结构
  • VxBus方法
  • VxBus设备驱动程序的生命周期

除此之外,本章还包括了在SMP环境下开发设备驱动程序的guidline。本章解释的一些概念通常适用于所有的Device-Specific Driver。

2、驱动程序类别

关于设备和管理设备的驱动程序最基本的信息就是:这个设备有哪些功能。不同设备可以执行不同的任务,有用于读写磁盘或者其他不易失数据存储器的设备,有用于打印文本或者图形到视频显示器的设备,也有其他用于控制机器人手臂等用途的设备。

对于每一种功能,可能会有多种设备能够实现这一的功能,比如在显示器上显示信息这个功能,显示控制器可以是VGA,也可以是PCIe总线上的有几MRAM buffers的现代显示控制器。但是,不管是哪一种设备,其潜在的目的都是一样的。但是由于功能的相似性,设备驱动程序可以根据设备执行的任务来分为几类,以下是风河公司定义的几种设备驱动程序类别。

2.1 串行设备驱动程序

串行设备驱动程序管理面向终端和使用串行接口(RS232,RS422)的设备,这些设备都被连接到VxWorks的IO系统,并可以在控制台中进行配置,软件可以使用open,read,write,ioctl,close等标准接口来访问这些设备,在VxBus的框架下,串行设备驱动程序的安装目录在:

installDir/vxworks-6.x/target/src/hwif/sio

2.2 存储设备驱动程序

存储设备驱动程序当然是管理那些面向磁盘、磁带、移动闪存和在板闪存的接口,这些设备的一些通用特性有:

  • 非易失性
  • 访问速度比RAM慢N多倍
  • 每个字节的代价比RAM低N多倍
  • 这些设备主要包括ATA disk, SATA disk, SCSI disk, USB flash disk, floppy disk等,在VxBus设备驱动框架下,存储设备驱动程序被安装在以下目录:

installDir/vxworks-6.x/target/src/hwif/storage

2.3 网络接口设备驱动程序

网络接口设备驱动程序当然是管理面向网络硬件的接口啦,网络驱动程序支持的最常见的网络硬件就是以太网,但是网络驱动程序同样也会包括其他类型的网络硬件。典型的网络设备被分为两个主要部分:MAC和PHY,PHY驻留在MII(媒介独立接口),在VxBus框架中,MAC层的驱动程序被安装在以下目录:

installDir/vxworks-6.x/target/src/hwif/end

PHY驱动程序被安装在以下目录:

installDir/vxworks-6.x/target/src/hwif/mii

2.4 非易失性RAM(Non-Volatile RAM)驱动程序

NVRAM主要存储那些要求掉电后不会丢失的信息,NVRAM设备和其他storage设备的主要区别是:NVRAM可以以字节为单位来随即访问数据,而普通的storage设备基本上都是以块为单位访问数据的。一般情况下,NVRAM主要存储那些用于系统配置的信息,比如VxWorks系统的默认启动参数就是存储在NVRAM里面的。在VxBus框架下,NVRAM驱动程序的安装目录在:

installDir/vxworks-6.x/target/src/hwif/nvram

2.5 定时器驱动程序

定时器驱动程序能够提供两类服务,第一是计时和计数,第二是用做系统时钟,比如每隔一定时间中断CPU。在VxBus框架下,定时器驱动程序源文件的安装目录在:

installDir/vxworks-6.x/target/src/hwif/timer

2.6 DMA控制器驱动程序

DMA控制器允许在不需要CPU的干预下拷贝数据,典型的是在设备的缓冲区和系统RAM之间拷贝数据。许多设备为了提高性能,都内置了DMA控制器。但是很多系统也提供DMA控制器,该DMA控制器可以用于多种用途,DMA控制器驱动程序所指的DMA并不是设备的内置DMA控制器,而是系统提供的DMA控制器。在VxBus驱动框架下,DMA控制器驱动程序的安装路径是:

installDir/vxworks-6.x/target/src/hwif/dma

2.7 总线控制器驱动程序

总线控制器的作用是为不同总线类型之间的交互提供通信接口,每个CPU都有专门的对外接口,不考虑CPU类型的情况下,这些接口都被称作PLB(processor local bus),很多设备都是直接与PLB相连的,但是也有很多设备连接到其他总线上的,而这些总线是通过总线控制器挂接到PLB上。在VxBus框架下,总线控制器驱动程序的源码被安装在以下的路径:

installDir/vxworks-6.x/target/src/hwif/busCtlr

总线控制器驱动程序主要通过以下几种方式来管理总线上的设备:第一,负责识别下游总线上的设备;第二,负责配置下游总线上的设备;第三,管理必须的地址映射。

2.8 USB驱动程序

USB功能被划分为两个不同类型:USB HOST适配器和USB Class Drivers。USB HOST适配器是一种总线控制器,其实就是一个桥,它把USB总线通过USB HOST适配器挂接到PLB或者PCI总线。在VxBus框架下,USB HOST适配器的驱动程序安装目录是:

installDir/vxworks-6.x/target/src/hwif/busCtlr/usb/hcd

USB Class Drivers主要包括USB Storage,USB network等,但是在Vx6.8中USB Class Drivers并没有被集成到VxBus的框架下,因此,它们的主要源码目录在:

installDir/vxworks-6.x/target/src/drv/usb

2.9 中断控制器驱动程序

中断控制器的主要任务就是管理中断源,当外部设备向中断控制器请求中断后,中断控制器会在适合时把中断传递给CPU,让CPU处理该中断请求。在VxBus框架下,中断控制器驱动程序的安装目录是在:

installDir/vxworks-6.x/target/src/hwif/intCtlr

中断控制器负责识别哪些设备连接到了中断输入引脚,配置中断输入属性,禁止或者使能中断等。

2.10 多功能驱动程序

很多情况下,一个物理设备包含着多个逻辑设备,比如,一个芯片里面可以包括几个定时器,几个DMA控制器,多个网络接口,USB HOST适配器,PCI总线控制器等。物理设备上的很多逻辑设备很其他地方的设备都是完全一样的,开发一个驱动程序来支持一个芯片上的所有功能是不现实的,如果为一个芯片编写一个包括所有功能的驱动程序,会减少功能配置的灵活性,比如我们如果不需要USB HOST功能,该驱动程序的USB模块同样会驻留在内存中,浪费了系统资源。

因此,推荐的做法是:多功能驱动程序的开发策略应该是使用多个驱动程序来支持某一个芯片,每个驱动程序对应芯片上的一个功能。多功能驱动程序的主要任务是向VxBus提供芯片上有哪些功能、这些功能使用的地址等信息。

2.11 远程处理单元驱动程序

现在计算机系统中,都会提供不同于CPU的用于通用目的的处理单元,比如DSP啊,FPGA啊等,这种远程的处理单元主要用于特殊的应用目的,并受控于CPU,又或者它们也有自己的自治或者半自治系统。在VxBus框架下,远程处理单元驱动程序的安装目录在:

installDir/vxworks-6.x/target/src/hwif/cpu

该驱动程序负责与远程处理单元进行通信,每一个VxBus的远程处理单元都有责任建立和维和与其他远程处理单元的通信通道。

2.12 控制台驱动程序

控制台设备主要是指那些用于图形系统控制的设备,比如鼠标,键盘,显示器等。在VxBus框架下,控制台驱动程序的安装路径在:

installDir/vxworks-6.x/target/src/hwif/console

每种类型的控制台驱动程序管理设备的特定功能,比如键盘驱动程序8042,显示器驱动程序等。

2.13 资源驱动程序

现代的处理器设计都包括一些几种外部设备一起共享的硬件资源,它们主要提供诸如数据路由、地址映射等类的服务。外设都有足够的专用资源,这种专用资源一般都会被看待成外设的一部分。但是,当某些硬件资源不得不被多个外部设备共享时,你必须提供资源管理驱动程序,来为外部设备分配这些硬件资源。在VxBus驱动框架下,资源管理程序的源文件被安装在目录:

installDir/vxworks-6.x/target/src/hwif/resource

资源驱动程序主要是为外部设备分配共享的硬件资源,它也可以用来配置这些硬件资源。

2.14 其他类别的驱动程序

风河还没有为一些常见的设备定义类别,比如AD和DA,机器人控制系统等。