2009年10月22日星期四

有关usb系统

USB系统有一个主控制器(host controller),一些集线器(hub)(不是网络工具中的那个“集线器”)以及一个 根集线器(root hub),根集线器所能连接的USB设备的上限是127个。主控制器只是USB设备与操作系统之间的硬件接口。目前有两种主控制器接口(HCI, Host Controller Interface):Compaq的OHCI (Open HCI),Intel的UHCI (Universal HCI)和EHCI (Enhanced HCI)。OHCI/UHCI是针对USB 1.1的工业标准,而EHCI是针对USB 2.0的。

硬件商向程序员提供开发接口,即所谓的HCD (Host Controller Device)。通过HCD,USB设备可以与系统软件进行交互。

USB设备可以有单独的驱动程序,也可以使用系统提供的驱动程序,这依赖于设备的类别。也就是说,如果一个USB设备属于某种类别,那么其他属于该类别的设备就可以使用同一种设备驱动。在USB设备类别中有一些是USB HID (Human Interface Device)类别,它包括:输入设备,如键盘、鼠标;USB块存储设备,比如U盘、数码相机、音频播放器等;USB CDC (Communication Devices Class,通信设备类别),比如USB口的modem或其他类似设备。

要想弄清楚你的机器是否支持USB 2.0是很简单的,可以使用lspci来查看。看命令响应有没有EHCI字样。

查看USB设备工作状况
dmesg是你的朋友!
现在终于到了与USB设备共舞的时刻了:) 在本章中,将会看到系统如何响应各种USB设备的。先从一个512M的U盘的插入开始,你也可以使用其他类似设备。我们主要是使用dmesg来查看U盘插入后发生了什么以及系统如何响应的。

注意: dmesg在显示我们所需要的信息之前会输出大量的冗余信息,因为它要读取内核的环缓冲区(ring buffer),会输出许多启动信息。下面示例中的输出信息只给出了一部分信息,为了更好的阅读,还添加了一些空行。使用dmesg more或dmesg less来查看输出信息会更好一些。

代码 3.1: 记忆棒的dmesg输出
(先将U盘插入可用的USB端口,然后...)
# dmesg less
(当前设备被识别为USB 1.1并为之分配一个地址。这也能说明哪一种HCD正在被使用)
usb 1-1: new full speed USB device using uhci_hcd and address 2

(SCSI模拟器会自动载入)
scsi0 : SCSI emulation for USB Mass Storage devicesusb-storage: device found at 2

(现在设备信息,包括模块号,都可以被检索到)
usb-storage: waiting for device to settle before scanning
Vendor: JetFlash Model: TS512MJF2A Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)

(写保护语句是未来新版本内核的试验性代码)
sda: Write Protect is off
sda: Mode Sense: 0b 00 00 08
sda: assuming drive cache: write through
SCSI device sda: 1003600 512-byte hdwr sectors (514MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete(在此,设备通常可以通过挂载/dev/sda1来访问)

(当设备断开连接时,系统会给出这样的反馈信息)
usb 1-1: USB disconnect, address 2

标签:


评论: 发表评论

订阅 博文评论 [Atom]





<< 主页

This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]