本章讨论和基于VxBus驱动程序模型的VxWorks设备驱动程序的相关核心概念,并特别剖析了VxBus设备驱动程序框架,主要包括以下信息:
除此之外,本章还包括了在SMP环境下开发设备驱动程序的guidline。本章解释的一些概念通常适用于所有的Device-Specific Driver。
关于设备和管理设备的驱动程序最基本的信息就是:这个设备有哪些功能。不同设备可以执行不同的任务,有用于读写磁盘或者其他不易失数据存储器的设备,有用于打印文本或者图形到视频显示器的设备,也有其他用于控制机器人手臂等用途的设备。
对于每一种功能,可能会有多种设备能够实现这一的功能,比如在显示器上显示信息这个功能,显示控制器可以是VGA,也可以是PCIe总线上的有几MRAM buffers的现代显示控制器。但是,不管是哪一种设备,其潜在的目的都是一样的。但是由于功能的相似性,设备驱动程序可以根据设备执行的任务来分为几类,以下是风河公司定义的几种设备驱动程序类别。
串行设备驱动程序管理面向终端和使用串行接口(RS232,RS422)的设备,这些设备都被连接到VxWorks的IO系统,并可以在控制台中进行配置,软件可以使用open,read,write,ioctl,close等标准接口来访问这些设备,在VxBus的框架下,串行设备驱动程序的安装目录在:
installDir/vxworks-6.x/target/src/hwif/sio
存储设备驱动程序当然是管理那些面向磁盘、磁带、移动闪存和在板闪存的接口,这些设备的一些通用特性有:
本文根据VxWorks系统启动的流程,分文件来梳理了启动过程中执行的函数,对了解VxWorks的启动流程有比较大的帮助。
/* romInit - entry point for VxWorks in ROM */
1. initialize CPU and memory
2. copy bootrom to ROM_TEXT_ADRS
3. initialize STACK
4. lock INTERRUPT
5. jump to romStart()
/* this is the first C code after reset */
1. clear memory
2. copy vxWorks ROM image to RAM
3. uncompress if necessary
4. jump to the object code ENTRY after uncompress
本文简单介绍PowerPC MPC8247的VxWorks软件使用方法
MPC8247上使用的Bootloader是u-boot,基本操作如下:
从启动画面可以看出:
u-boot的版本是1.1.1
CPU工作在400MHz的频率
Flash的大小是16M
VxBus是风河公司新的设备驱动程序架构,是VxWorks新增的特性,它是在VxWorks6.2及以后版本被增加到VxWorks中的。本文结合基于PCI2040数据采集卡驱动的开发过程,分析了VxBus架构下驱动的设计实现。
VxBus是指在VxWorks中用于支持设备驱动的特有的架构,这种架构包含对minimal BSP的支持。它包括以下功能:
VxBus在总线控制器驱动程序服务的支持下,能在总线上发现设备,并执行一些初始化工作,使驱动与硬件设备之间正常的通讯。
图1是VxBus 在整个系统中的位置示意图。从图1中可以看到,VxBus起到了辅助总线的作用,提供了对总线控制驱动的支持。
在VxWorks6.2版本发布前,设备驱动并不能被集成到VxWorks工程配置当中,为了添加或移出设备驱动,需要有丰富的BSP和驱动开发相关的知识。作为VxWorks系统组件的一部分,VxBus消除了上面遇到的一些难题,各种驱动和支持组件的添加与删除完全可以在Workbench工程中进行,不需要BSP和驱动相关的知识,也不会在添加或者删除驱动时增加管理VxWorks工程的额外工作。
vxBus下对设备管理做了更为详细的划分,简单说来,硬件称为device,软件叫做driver。如果一个device出现在硬件列表中,启动时需要到driver的队列中去找相应的driver,如果找到,二者结合成一个instance,否则在vxBusShow里可以看到一个orphan。使用vxBusShow可以比较清晰的看到driver列表和device列表以及orphan列表。
如果需要增加一个设备,首先要修改的是hcfDeviceList,这是hwconf.c中的一个数组,这个数组中列有本系统中所有需要初始化的硬件设备。例如:
下面是VxWorks for PowerPC的内存分配图
专业术语解释:
PowerPC体系结构的内存结构包括5大部分,分别为系统映像(System Image)之前的系统启动相关的低端内存,系统映像,Host Memory Pool,中断堆栈以及系统内存池(System Memory Pool)。下面就各部分进行介绍。
© 2024 VxWorks Club