当前位置:操作系统 > Unix/Linux >>

USB设备检测的一般过程

USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。

  现在一般的USB桥接器模块有两种类型,UHCI和OHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件,您若发现USB节为 I/O at 0xHHHH格式(例如出现 I/O at 0xe000 [0xe01f]),HHHH为16进制数,则桥接器类型为UHCI。若是它为32 bit memory at 0xHH000000形式(例如出现32 bit memory at 0xee000000),HH为16进制数,则桥接器类型为OHCI。但是若您的桥接器类型不满足上述任何一种情况,唯一的解决办法就是您尝试插入这两种模块,直到成功为止。一般而言,UHCI类型的桥接器它的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器它的插入模块是ohci或usb-ohci。

  您在正确的插入了桥接器模块之后,这时/proc文件系统下就会出现USB设备目录,不过这时这个目录是空的,没有任何文件。这时您就必须挂接usbdevfs文件系统,然后通过此文件系统检测连接的设备。在成功挂接usb文件系统之后,就会生成文件/proc/bus/usb/devices,/proc/bus/usb/drivers和目录/proc/bus/usb/busNo。挂接usbdevfs文件您可以通过如下操作实现:

  mount -t usbdevfs none /proc/bus/usb

  或在/etc/fstab上加入

  none /proc/bus/usb usbdevfs defaults 0 0

  然后通过/proc/bus/usb/devices文件的内容,您就可以获得连接的设备信息,包括设备标识和制造商标是等信息。

  usb设备类型描述:

  设备规范 设备类码 接口类码

  应用程序特定 - 0xFE

  声音接口 0x00 0x01

  通信设备 0x02 -

  CDC控制接口 - 0x02

  CDC数据接口 - 0x0A

  HID 0x00 0x03

  HUB 0x09 0x09

  批量存储设备 0x00 0x08

  监视器 same as HID same as HID

  电源设备 same as HID same as HID

  物理设备 - 0x05

  打印机 - 0x07

  供应商特定 - 0xFF

  5.2 usb文件系统简介

  T = 总线拓扑结构(Lev, Prnt, Port, Cnt, 等),是指USB设备和主机之间的连接方式

  B = 带宽 (仅用于USB主控制器)

  D = 设备描述信息

  P = 产品标识信息

  S = 串描述符

  C = 配置描述信息 (* 表示活动配置)

  I = 接口描述信息

  E = 终端点描述信息

  一般格式:

  d = 十进制数

  x = 十六进制数

  s = 字符串

  拓扑信息

  T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd

  | | | | | | | | |__最大子设备

  | | | | | | | |__设备速度(Mbps)

  | | | | | | |__设备编号

  | | | | | |__这层的设备数

  | | | | |__此设备的父连接器/端口

  | | | |__父设备号

  | | |__此总线在拓扑结构中的层次

  | |__总线编号

  |__拓扑信息标志

  带宽信息

  B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd

  | | | |__同步请求编号

  | | |__中断请求号

  | |__分配给此总线的总带宽

  |__带宽信息标志

  设备描述信息和产品标识信息

  D: Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd

  P: Vendor=xxxx ProdID=xxxx Rev=xx.xx

  D: Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd

  | | | | | | |__配置编号

  | | | | | |______缺省终端点的最大包尺寸

  | | | | |

  | | | | |__设备协议

  | | | |__设备子类型

  | | |__设备类型

  | |__设备USB版本

  |__设备信息标志编号#1

  P: Vendor=xxxx ProdID=xxxx Rev=xx.xx

  | | | |__产品修订号

  | | |__产品标识编码

  | |__制造商标识编码

  |__设备信息标志编号#2

  串描述信息

  S: Manufacturer=ssss

  | |__设备上读出的制造商信息

  |__串描述信息

  S: Product=ssss

  | |__设备上读出的产品描述信息,对于USB主控制器此字段为"USB *HCI Root Hub"

  |__串描述信息

  S: SerialNumber=ssss

  | |__设备上读出的序列号,对于USB主控制器它是一个生成的字符串,表示设备标识

  |__串描述信息

  配置描述信息

  C: #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA

  | | | | |__最大电流(mA)

  | | | |__属性

  | | |__配置编号

  | |__接口数

  |__配置信息标志

  接口描述信息(可为多个)

  I: If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss

  | | | | | | | |__驱动名

  | | | | | | |__接口协议

  | | | | | |__接口子类

  | | | | |__接口类

  | | | |__中断点数

  | | |__可变设置编号

  | |__接口编号

  |__接口信息标志

  终端点描述信息

  E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms

  E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms

  | | | | |__间隔

  | | | |__终端点最大包尺寸

  | | |__属性(终端点类型)

  | |__终端点地址(I=In,O=Out)

  |__终端点信息标志 '

  

上一个:Linux学堂:认识Linux系统
下一个:RedHatPostfix中文FAQ

更多Unix/Linux疑问解答:
路由原理介绍
子网掩码快速算法
改变网络接口的速度和协商方式的工具miitool和ethtool
Loopback口的作用汇总
OSPF的童话
增强的ACL修改功能
三层交换机和路由器的比较
用三层交换机组建校园网
4到7层交换识别内容
SPARC中如何安装Linux系统(2)
SPARC中如何安装Linux系统(1)
用Swatch做Linux日志分析
实战多种Linux操作系统共存
浅析Linux系统帐户的管理和审计
Linux2.6对新型CPU的支持(2)
电脑通通透
玩转网络
IE/注册表
DOS/Win9x
Windows Xp
Windows 2000
Windows 2003
Windows Vista
Windows 2008
Windows7
Unix/Linux
苹果机Mac OS
windows8
安卓/Android
Windows10
如果你遇到操作系统难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,