VxBus设备驱动模型
2016-03-30 17:23
966 查看
VxBus简介
VxBus是指在VxWorks中用于支持设备驱动的特有的架构,这种架构包含对minimal BSP的支持。它包括以下功能:①允许设备驱动匹配对应设备;②提供驱动程序访问硬件的机制;③软件其他部分访问设备功能;④在VxWorks系统中,实现设备驱动的模块化。
VxBus在总线控制器驱动程序服务的支持下,能在总线上发现设备,并执行一些初始化工作,使驱动与硬件设备之间正常的通讯。
OCAL struct vxbPlbRegister windmlGraphicsPlbDevRegistration = { { NULL, /* register next driver */ VXB_DEVID_BUSCTRL, /* bus controller */ VXB_BUSID_PLB, /* bus id - PCI Bus Type */ VXB_VER_4_0_0, /* vxBus version Id */ "graphics", /* drv name */ &windmlvxbFuncs, /* pDrvBusFuncs */ NULL, /* pMethods */ windmlGraphicsProbe, /* probe routine */ NULL /* vxbParams */ } }; LOCAL struct vxbPciRegister windmlGraphicsPciDevRegistration = { /* b */ { (DRIVER_REGISTRATION *)(&windmlGraphicsPlbDevRegistration), /* pNext */ VXB_DEVID_DEVICE, /* devID */ VXB_BUSID_PCI, /* busID = PCI */ VXB_VER_4_0_0, /* vxbVersion */ "graphics", /* drvName */ &windmlvxbFuncs, /* pDrvBusFuncs */ NULL, /* pMethods */ windmlGraphicsProbe, /* devProbe */ NULL, }, NELEMENTS(windmlPciDevIDList), &windmlPciDevIDList[0], };
这个结构就是用于描述一个需要注册的驱动。驱动的初始化的入口函数都需要放在windmlvxbFuncs中。
//通过这个数据结构,可以向系统注册一些设备初始化函数 LOCAL struct drvBusFuncs windmlvxbFuncs = { windmlStub, /* devInstanceInit */ windmlStub, /* devInstanceInit2 */ windmlStub /* devConnect */ };
上述代码中把这些函数都设置为了空。这里对三个初始化阶段函数简单介绍一下。devInstanceInit是在vxworks内核启动之前预初始化时调用,完成的主要是关闭设备的中断。然后内核启动初始化,调用init2,这时候就会完成设备驱动内存的初始化,如果驱动初始过程需要使用内核的一些基础设施,那么都可以放到这时候。devInstanceConnect用于设备的连接,通常可以不使用,但如果它依赖于其他设备,则可以把启动代码放在这里。
另外,还需要注意到的一个就是windmlGraphicsProbe,这是一个设备探测函数,用于探测所有驱动所驱动的设备,并加入到设备列表中。
windmlGraphicsPciDevRegistration 是通过usrWindMlInit中的vxbDevRegister函数,完成每个被wind media所支持的设备类型的驱动注册。
//在这里将驱动注册 vxbDevRegister((struct vxbDevRegInfo *)&windmlGraphicsPciDevRegistration); vxbDevRegister((struct vxbDevRegInfo *)&windmlKeyboardDevRegistration); vxbDevRegister((struct vxbDevRegInfo *)&windmlMouseDevRegistration); vxbDevRegister((struct vxbDevRegInfo *)&windmlAudioPciDevRegistration);
然后调用uglODrvInit();这个函数完成的工作就是创建所有的设备驱动,通过阅读源码就可以知道,其实仅仅是创建了设备节点而已。
后续会继续更新相关细节。
相关文章推荐
- 本博客申明
- Mysql在大型网站的应用架构演变
- 解决Sublime包管理package control 报错 There are no packages available for installation
- Solr 自定义FieldType Analyzer不生效 问题查找
- scrollToRowAtIndexPath 问题分析(crash 和 不执行问题)
- OpenStack Core的“中国力量"
- 简单表单验证
- sql语句
- 《统计学习方法》笔记(2):感知机
- CentOS 6.5系统LNMP环境安装SSL证书
- POJ 3067 Japan(树状数组)
- ubuntu下安装 Source insight
- 把Java项目的代码转换为C#代码
- 单缓冲与双缓冲的区别
- Linux下的压缩zip,解压缩unzip命令详解及实例
- python 乍见(实现AES 加密解密)
- NOIP2011 计算系数
- NOIP2011 聪明的质监员
- NOIP2011 观光公交
- NOIP2010 机器翻译