LPI 101 考试准备: 硬件和体系结构之七

来源:互联网 发布:RecyclerView 添加数据 编辑:程序博客网 时间:2024/06/01 03:58

原贴:http://blog.chinaunix.net/u/23204/showart_206984.html

 

LPI 101 考试准备: 硬件和体系结构之七
   

USB 设备

本节涵盖了针对初级管理员(LPIC-1)101 考试的主题 1.101.7 所需要的资料。此话题的权重为 1。

USB 概述

在本节我们将研究 Linux 对 Universal Serial BusUSB)设备的支持。USB 是由一个公司联盟开发的,目标是为外围设备的连接提供一个单一的、简单的总线。在 BIOS 设置 章节中,我们已经体会到了在 ISA 总线机器中管理端口、IRQ 和 DMA 资源的复杂性。USB 设计允许设备的热插拔,并可以使用标准连接器来连接设备。 USB 设备包括键盘、鼠标、打印机、扫描仪、硬盘驱动器、闪存驱动器、相机、调制解调器、以太网适配器和扬声器。这个列表还在不断增长。当前 Linux 支持的设备非常广泛,尽管有一些设备需要专门的驱动程序,还有一些可能没有得到支持或者只是得到部分支持,尤其是特殊的打印机。

一个计算机系统可能具备一个或多个 控制器集线器(hub),USB 设备或另外的(外部)集线器可以连接到它。一个集线器支持最多 7 个设备,其中有一部分可以是另外的集线器,也可以全部都是。系统中的集线器叫做 root hub。每一个这样的星形拓扑可以支持最多 127 个集线器或者设备。

注意: 我们通常所说的 USB 端口 指的是计算机中的 USB 功能以及连接插口(相对于串行端口或并行端口),而不是设备所使用的内部端口地址。

USB 系统是一个分层次的系统。

  1. 总线接口(Bus Interface)层提供了主机与设备之间物理的、信号的和数据包的连通性,为主机与设备之间提供数据传输。
  2. 设备(Device)层由系统软件所使用,对总线上的设备完成普通的 USB 操作。这样就让主机能够确定设备的特性,包括设备类别、提供商名称、设备名称、电源需求以及很多性能,比如设备速度或 USB 标准的支持。
  3. 功能(Function)层提供与设备相关的另外的功能。与之相匹配的主机与设备软件层支持使用设备的特殊功能。

 

较早的 USB 规范(1.0 和 1.1)支持的最大速度为 12Mbps(megabits 每秒)。遵循此规范的设备是相对较慢的设备,比如打印机、鼠标、键盘、扫描仪和调制解调器。较新的 USB 2.0 规范支持最高速度为 480Mbps,足以满足硬盘驱动器和外置 CD 或 DVD 驱动器的要求。有些 USB 2.0 设备可以向后兼容,能够在较老的系统中使用,不过并不是所有更快的设备都是向后兼容的。如果计算机不具备 USB 2.0 支持,那么可以使用 PCI 卡(或者用于膝上型机器的 PC 卡)来提供一个或多个 USB 2.0 端口。

USB 线缆是较细的 4-wire 线缆,两根信号线,还有一根电源线和一根地线。插入到集线器上的末端有一个具有扁平矩形连接器(称为 A 连接器),而插入到设备或下级集线器的末端有一个较小的更正方的连接器(B 连接器)。有一些不同的 mini-B 连接器,用于将较小的设备连接到计算机,比如相机。 USB 设备和集线器可以通过 USB 总线获得电源,或者可以自供电源。




回页首

Linux USB 模块支持

在 Linux 中现在对 USB 有非常好的支持。2.6 内核树中有很大的发展。很多已经被反向移植到 2.4 内核,甚至在 2.2 内核中也有一些支持。 Linux 支持 USB 2.0 以及更早的规范。由于 USB 的热插拔本性,通常是通过内核模块来对其提供支持的,可以根据需要加载或卸载内核模块。对于本教程,我们将假定发行版本所需要的模块或者是可用的,或者是已经安装。如果需要编译自己的模块,请参考针对 201 考试主题 201 的教程(见 参考资料)。

确定计算机拥有 USB 端口后,可以使用 lspci 命令查看 Linux 系统是否找到了它,如清单 23 所示。已经对输出进行了过滤,只显示与 USB 相关的设备。


清单 23. 关于 USB 设备的 lspci 输出
    [root@lyrebird root]# lspci | grep -i usb00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM      (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM      (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM      (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)00:1d.7 USB Controller: Intel Corporation 82801DB/DBM      (ICH4/ICH4-M) USB2 EHCI Controller (rev 01)

您会注意到,在这个系统中有四个 USB 控制器。UHCI 和 EHCI 域指明了支持那个控制器所需要的驱动程序模块。正确的 USB 1.1 驱动器依赖于控制器中所使用的芯片组。USB 2.0 需要 EHCI 驱动程序再加上一个 USB 1.1 驱动程序。见表 3。


表 3. Linux USB 驱动程序
驱动程序 芯片 EHCI USB 2.0 支持 - 需要 UHCI、OHCI 或 JE 其中之一 UHCI Intel 与 VIA 芯片组 JE 这是用于 2.4 内核的 UHCI 的另一种选择。如果 UHCI 不能使用,并且使用了 Intel 或 VIA 芯片组,那么尝试 JE OHCI Compaq、大部分 PowerMacs、iMacs 以及 PowerBooks、OPTi、SiS、ALi

在前面对声音支持的讨论中已经涉及过 lsmod 命令和模块配置文件 /etc/modules.conf(2.4 内核)和 /etc/modprobe.conf(2.6 内核)。清单 24 展示了清单 23 所使用的同一系统中加载的一些与 USB 设备相关的模块。这个系统有一个 USB 鼠标。


清单 24. 使用 lsmod 显示加载的 USB 模块
    [root@lyrebird root]# lsmod | egrep 'usb|hci|hid|mouse|Module'Module                  Size  Used by    Not taintedusbserial              23420   0  (autoclean) (unused)mousedev                5524   1hid                    22244   0  (unused)input                   5888   0  [keybdev mousedev hid]ehci-hcd               20008   0  (unused)usb-uhci               25740   0  (unused)usbcore                77376   1  [usbserial hid ehci-hcd usb-uhci]

要特别注意的是,usbcore 模块被所有其他 USB 模块以及 hid(human interface device)模块所使用。




回页首

显示 USB 信息

这样,我们现在已经了解了支持 UBS 的模块,那么如何得知是什么 USB 设备连接到了我们的系统?在文件系统的 /proc/bus/usb 部分可以找到此信息。文件 /proc/bus/usb/devices 中有关于当前连接的 USB 设备的摘要信息。我们的系统中部分列表如清单 25 所示。


清单 25. /proc/bus/usb/devices 的部分内容
     [root@lyrebird root]# cat /proc/bus/usb/devicesT:  Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 6B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS= 8 #Cfgs=  1P:  Vendor=0000 ProdID=0000 Rev= 2.04S:  Manufacturer=Linux 2.4.21-32.0.1.EL ehci-hcdS:  Product=Intel Corp. 82801DB USB2S:  SerialNumber=00:1d.7C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mAI:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hubE:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=256msT:  Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1P:  Vendor=0000 ProdID=0000 Rev= 0.00S:  Product=USB UHCI Root HubS:  SerialNumber=1840C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mAI:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hubE:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms

突出显示的 Spd=480 表明它是 USB 2.0 总线,而 Spd=12 表明它是 USB 1.1(或者可能是 USB 1.0)设备。继续往下读这个列表,可以看到鼠标的参数是 Spd=1.5。对大部分鼠标来说 1.5 MBps 的速度就足够了。

和我们在 /proc 文件系统中看到的其他内容一样,您会欣喜地发现,有一个 lsusb 命令可以帮助您显示这些信息。特别是,通过使用 -t 选项,可以获得 USB 设备的树状视图。这显示出了它们的连接层级。如果使用 -t 选项系统给出了摘要显示,那么可以使用 -d 选项来显示关于特定设备的信息。-v 选项会产生详细的输出,它会对清单 25 中所看到的很多域进行解释。为得到清单 26,我们已经插入了一个外置的集线器,一个 Nikon 数码相机,一个 USB 存储钥匙,以及一个外置 USB 2.0 硬盘驱动器,并展示了部分输出。


清单 26. 使用 lsusb 命令
     [root@lyrebird root]# lsusb -tBus#  4`-Dev#   1 Vendor 0x0000 Product 0x0000  |-Dev#   2 Vendor 0x0409 Product 0x0059  | |-Dev#   8 Vendor 0x04b0 Product 0x0108  | |-Dev#   4 Vendor 0x0d7d Product 0x1400  | `-Dev#   7 Vendor 0x1058 Product 0x0401  `-Dev#   3 Vendor 0x07d0 Product 0x1202Bus#  3`-Dev#   1 Vendor 0x0000 Product 0x0000Bus#  2`-Dev#   1 Vendor 0x0000 Product 0x0000Bus#  1`-Dev#   1 Vendor 0x0000 Product 0x0000  `-Dev#   2 Vendor 0x1241 Product 0x1111[root@lyrebird root]# lsusb -d 0x0409:0x0059Bus 004 Device 002: ID 0409:0059 NEC Corp. HighSpeed Hub[root@lyrebird root]# lsusb -d 0x04b0:0x0108Bus 004 Device 008: ID 04b0:0108 Nikon Corp. Coolpix 2500[root@lyrebird root]# lsusb -d 0x0d7d:0x1400Bus 004 Device 004: ID 0d7d:1400 Phison Electronics Corp.[root@lyrebird root]# lsusb -d 0x1058:0x0401Bus 004 Device 007: ID 1058:0401 Western Digital Technologies, Inc.[root@lyrebird root]# lsusb -d 0x07d0:0x1202Bus 004 Device 003: ID 07d0:1202 Dazzle[root@lyrebird root]# lsusb -d 0x1241:0x1111Bus 001 Device 002: ID 1241:1111 Belkin Mouse[root@lyrebird root]#

清单 27 展示了可通过 lsusb 命令得到的部分详细输出。这针对的是一个存储钥匙。注意设备有自己的最高电源要求(200mA)。注意,这个设备将被作为 SCSI 设备来对待。使用 dmesg 命令或者 fdisk -l 命令来查明是哪个 SCSI 设备被映射到这个设备。大部分配备 USB 端口相机,以及读卡器、闪存设备以及硬盘驱动器都被当作是存储类别的设备,在 Linux 作为 SCSI 设备来处理。很多相机都附了帮助从相机中获取图片或者上传图片的 Windows 程序。在 Linux 中,可以简单地挂载对应于相机的那个 SCSI 设备,然后将图片拷贝到硬盘驱动器上,在那里可以使用程序来编辑它们,比如 GNU Image Manipulation Program(GIMP)。甚至可以从存储卡上抹除文件,或者从 Linux 中向它写入文件,让相机可以用作软盘的外来代替者。


清单 27. lsusb 命令的详细输出(部分)
     [root@lyrebird root]# lsusb -vd 0x0d7d:0x1400Bus 004 Device 004: ID 0d7d:1400 Phison Electronics Corp.Device Descriptor:  bLength                18  bDescriptorType         1  bcdUSB               2.00  bDeviceClass            0 (Defined at Interface level)  bDeviceSubClass         0  bDeviceProtocol         0  bMaxPacketSize0        64  idVendor           0x0d7d Phison Electronics Corp.  idProduct          0x1400  bcdDevice            0.02  iManufacturer           1  iProduct                2 USB DISK 12X  iSerial                 3 0743112A0083  bNumConfigurations      1  Configuration Descriptor:    bLength                 9    bDescriptorType         2    wTotalLength           32    bNumInterfaces          1    bConfigurationValue     1    iConfiguration          0    bmAttributes         0x80    MaxPower              200mA    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        0      bAlternateSetting       0      bNumEndpoints           2      bInterfaceClass         8 Mass Storage      bInterfaceSubClass      6 SCSI      bInterfaceProtocol     80 Bulk (Zip)      iInterface              0      ...

通过清单 26 知道了 USB 设备的总线和设备 id,现在可以获得更多信息,这是确定特定设备需要哪些模块的一个途径。在清单 28 中演示了两个。


清单 28. 两个模块
     [root@lyrebird root]# usbmodules --device /proc/bus/usb/004/003usb-storage[root@lyrebird root]# usbmodules --device /proc/bus/usb/004/007usb-storagehid




回页首

热插拔

系统可以使用两个命令来处理 USB 设备的热插拔,usbmgrhotplug。根据使用的命令,将在 /etc/usbmgr 或 /etc/hotplug 目录中找到配置文件。较新的系统更倾向于使用 hotplug。

USB 的热插拔(PC 卡也是如此)让用户可以在系统运行时插入设备。然后系统必须:

  • 确定设备类型并找出运行它的驱动程序
  • 将驱动程序绑定到那个设备
  • 向其他子系统就此设备进行通告。举例来说,这样就允许加载磁盘或者添加打印队列。
<script type="text/javascript"><!--google_ad_client = "pub-9097063532722715";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type = "text_image";//2006-11-13: IT认证, LINUX中心, REDHAT培训, linux认证培训, 服务google_ad_channel = "2261809806+0528463736+8465157522+5640178636+3337303540";google_color_border = "6699CC";google_color_bg = "003366";google_color_link = "FFFFFF";google_color_text = "AECCEB";google_color_url = "AECCEB";//--></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
 

原创粉丝点击