vxworks中vxbus使用入门

转载 2016年08月28日 20:47:23

或许用过vxworks操作系统的人不多。但作为曾经的嵌入式操作系统老大,介绍一下还是非常有意义的。


开发步骤

1.       添加新模块(这里会告诉vxworks该模块的入口函数);

2.       填充vxbDevRegInfo,并通过vxbDevRegister进程注册驱动程序;

3.       通过向hcfDeviceList数组中添加记录,完成设备的注册;

4.       Vxworks启动是会实例化hcfDeviceList中的设备(不必人工干预);

5.       在vxbDevRegInfo中注册的几个初始化函数中添加实际的设备驱动代码;


vxBus模块添加

Vxworks中采模块化的方式管理各个功能单元,驱动也是由一个或多个模块组成。

VxBus是vxworks中的模块化机制。类似于linux中的module。通过vxBus我们可以方便的裁剪或添加新的模块。

模块的裁剪通常是在vxworks的开发环境workbench中进行的。建立一个工程后,会得到一个config文件,通过鼠标操作就可以实现模块的裁剪。

添加新模块则复杂一些,需要添加几个新的文件,但内容很简单,只是用来设置一些必须的信息。添加完成后,就可以像标准模块一样裁剪了。添加模块的详细过程可以再workbench中的vxbus的pdf文档中得到,说的很详细。


vxBus驱动注册过程

vxbus驱动的注册通过vxbDevRegister实现。其原型如下:

STATUS vxbDevRegister

    (

    struct vxbDevRegInfo * pDevInfo /* per-bus recognition info */

    )

 

显然,我们唯一要做的就是填充结构体pDevInfo,其类型定义如下:

struct vxbDevRegInfo

{

    struct vxbDevRegInfo * pNext;

    UINT32  devID;

    UINT32  busID;

    UINT32  vxbVersion;

    char    drvName[MAX_DRV_NAME_LEN+1];

    struct drvBusFuncs * pDrvBusFuncs;

    struct vxbDeviceMethod * pMethods;

    BOOL (*devProbe) ( struct vxbDev * pDevInfo);

    struct vxbParams * pParamDefaults;

};

多数不用讲,只说几个作用大的。

devProbe用于设备probe设备。检测当前是否有该类型设备。如果不需要进行probe,则可以设为NULL。

pNext用于总线级联。如一个挂在网卡上的网卡,其phy通过mii与mac相间接。我们要访问phy,则需要先通过pci总线访问mac,在通过mii总线访问phy。有点类似先做汽车到县城,再转驴车到村子。这里的pNext就是告诉你下面该转驴车了。如果没有级联,则设为NULL。

pMethods用于提供了总线的各种方法,但实际上通常只提供该总线特有方法。因为通用方法,如open、read等,一般都是通过io层的system call调用的,他们需要单独注册。

pDrvBusFuncs提供了设备初始化需要的几个接口,一共有三个:

struct drvBusFuncs

{

    void (*devInstanceInit) (struct vxbDev *);

    void (*devInstanceInit2) (struct vxbDev *);

    void (*devInstanceConnect) (struct vxbDev *);

};

devInstanceInit在kernel初始化前被调用,如果这个设备或它的一部分是kernel要用到的,就要放在这里。

devInstanceInit2在kernel初始化后被调用,没有什么特别要求的话,初始化最好都放在这里。当然如果该设备特别重要,其他设备需要调用它,一般也会放到devInstanceInit中,因为各个设备之间的调用devInstanceInit时不保证前后顺序。

devInstanceConnect用于设备的连接,通常可以不使用,但如果它依赖于其他设备,则可以把启动代码放在这里。

如果实在不需要,可以都置为NULL。

到这里为止,该驱动的框架就搭起来了。用启动image后,执行vxBusShow命令,可以看到新的设备驱动已经被加进去了。但我们的设备驱动还没有用。因为还没有与具体设备绑定,也就是实例化。单纯的驱动只是一堆代码,单纯的设备只是一堆废铁(废硅?)。驱动与设备的结合才是我们需要的。


vxBus设备实例化

hcfDeviceList数组管理着vxworks中的所有设备。我们要做的就是添加条记录。注意这里的名字实际上是设备驱动的名字,必须与之前pDevInfo中的驱动名一致。

Vxworks正是通过两个字符串的匹配,实现设备与驱动的匹配的。看起来用字符串匹配似乎效率有些低,但却避免了linux中因为主设备号只有255个而产生的尴尬。也许是一种更好的方法。

hcfDeviceList的最后一个成员变量pResource记录着一些该设备的特定信息。如串口波特率等。在代码中可以通过devResourceGet()获得。

系统启动后会通过hcfDeviceList初始化各个设备,此时会依次调用设备指向的驱动中的各个函数,如devInstanceInit。

完成这些配置后,再启动image,执行vxBusShow命令,最后一组实例(instance)信息中可以看到多了一个我们创建的实例。


最后一步

对于vxbus驱动来说,最后一步就是在instance、connect等函数中添加实际的驱动代码,这与一个普通的vxworks驱动没有区别。

总的来说,vxbus只是给了一个驱动框架,使得我们驱动程序的添加更统一。

VxWorks设备驱动开发指南(二)--VxBus And VxBus Device Driver

VxBus And VxBus Device Driver   1、Introduction 本章主要介绍与VxBus和VxBus驱动程序相关的一些概念,主要包括VxBus, Instance...
  • htyang725
  • htyang725
  • 2013年01月24日 00:03
  • 3008

VXBUS

VxBus是风河公司新的设备驱动程序架构,是VxWorks新增的特性,它是在VxWorks6.2及以后版本被增加到VxWorks中的。本文结合基于PCI2040数据采集卡驱动的开发过程,分析了VxBu...
  • yz2010
  • yz2010
  • 2016年08月27日 11:09
  • 673

基于VxBus的设备驱动开发

VxBus是风河公司新的设备驱动程序架构,是VxWorks新增的特性,它是在VxWorks6.2及以后版本被增加到VxWorks中的。本文结合基于PCI2040数据采集卡驱动的开发过程,分析了VxBu...
  • RubyBoss
  • RubyBoss
  • 2015年01月19日 22:35
  • 2051

vxworks驱动开发----2-vxbus与组件以及arp表

vxbus This driver is designed to work with VxBus.  Therefore, it requires the default VxBus componen...
  • abcflyer
  • abcflyer
  • 2015年10月21日 11:14
  • 1504

转载_基于VxBus的设备驱动开发

摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路...
  • williamwanglei
  • williamwanglei
  • 2014年03月25日 10:44
  • 1495

VxBus设备驱动模型

VxBus简介VxBus是指在VxWorks中用于支持设备驱动的特有的架构,这种架构包含对minimal BSP的支持。 它包括以下功能:①允许设备驱动匹配对应设备;②提供驱动程序访问硬件的机制;...
  • jiangbo1017
  • jiangbo1017
  • 2016年03月30日 17:23
  • 722

基于vxworks_VXBUS总线驱动架构开发

分类: 嵌入式 或许用过vxworks操作系统的人不多。但作为曾经的嵌入式操作系统老大,介绍一下还是非常有意义的。 开发步骤 1.       添加新模块(这里会告诉vxworks该模块的...
  • yz2010
  • yz2010
  • 2016年08月27日 11:01
  • 785

PCI总线在VxWorks中的实现

8D Spaces Reliability & Stability & Efficiency 目录视图摘要视图订阅   ...
  • yz2010
  • yz2010
  • 2017年04月16日 22:40
  • 388

PCI总线在VxWorks中的实现

PCI总线在VxWorks中的实现   1、Overview 在最近发布的BSP中,风河公司基本上都提供了对PCI BUS的支持,本文主要探讨PCI BUS在VxWorks系统中的实现。 2、...
  • htyang725
  • htyang725
  • 2013年01月22日 23:27
  • 1728

vxworks中vxbus使用入门

或许用过vxworks操作系统的人不多。但作为曾经的嵌入式操作系统老大,介绍一下还是非常有意义的。 开发步骤 1.       添加新模块(这里会告诉vxworks该模块的入口函数); ...
  • andyzzjbcp
  • andyzzjbcp
  • 2016年08月28日 20:47
  • 996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vxworks中vxbus使用入门
举报原因:
原因补充:

(最多只允许输入30个字)