LINUX操作系统USB设备检测的一般过程

分类: 设备驱动   出处:iocblog整理  更新时间:2008-08-08   添加到收藏  


  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)
  | | | | | | |__设备编号
  | | | | | |__这层的设备数
  | | | | |__此设备的父连接器/端口
  | | | |__父设备号
  | | |__此总线在拓扑结构中的层次
  | |__总线编号
  |__拓扑信息标志
  

[1] [2] 下一页


Tag: USB