51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2107|回复: 0
打印 上一主题 下一主题

[讨论] vxWorks--USB系列(1)--系统设备表

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-28 16:12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
某些驱动可以为指定设备的多个实例提供服务。例如,串口通信设备的单个驱动可以处理多个分割的仅参数不同
的通道,比如设备地址。在VxWorks的I/O系统中,设备用一个称之为设备头(DEV_HDR)的数据结构来定义,这
个数据结构包含设备名字符串、服务这个设备的驱动设备号。在VxWorks的系统中,所有设备的设备头都常驻
内存,并链成一个设备链表。设备头是特定驱动所确定的一个大的数据结构的起始部分,这个大的数据结构称
之为设备描述符(device descriptor),设备描述符除了设备头之外,还包含诸如设备地址、缓冲区、信号量等与
具体设备相关的成员。
VxWorks 内核对每个设备使用DEV_HDR 数据结构进行表示,该结构定义如下:


该结构中给出了链接指针(用来将该结构串入队列中)、驱动索引号、设备节点名等。这个结构较为简单,只存
储了一些设备关键系统。底层驱动对其驱动的设备都有一个自定义的数据结构表示,最关键的一点是DEV_HDR
内核结构必须是这个自定义的数据结构的第一个成员变量。我们的自定义数据结构如下:


之后为了能够让用户对设备进行操作,驱动必须要将设备注册到I/O子系统,这个过程也被称为是创建设备节点
。I/O子系统提供iosDevAdd()函数用于被驱动调用来注册一个设备:


iosDevAdd()函数将一个设备添加到I/O子系统维护的系统的设备列表当中。该列表是一个队列,队列中的成员通
过指针链接在一起,这是由DEV_HDR 结构中的node 成员变量完成的。系统设备列表由iosDvList内核变量指向,
如图所示为系统设备列表示意图。


非块设备通过调用内部例程iosDevAdd()被动态添加到I/O系统中,iosDevAdd()的参数包含这个新设备的设备描述
符地址、设备名字、以及服务该设备的驱动的驱动号。设备描述符是由驱动所指定的,其中包含必须的与设备相
关的信息,但是必须以设备头作为该设备描述符的第一个成员。驱动不需要添加设备描述符的设备头部分,只需
要填写设备描述符中与具体设备相关的信息。iosDevAdd()例程负责填写设备头中的设备名、设备号,并把该设
备添加到系统设备链表中。下图展示一个驱动的设备创建例程xxxxDevCreate()通过调用iosDevAdd()添加一个设
备到I/O系统当中:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-26 17:38 , Processed in 0.069309 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表