USB 控制器的分類
通常 USB 的控制器(USB host controller),可分成下列三種
USB 1.1 傳輸速度可分低速 low speed的 1.5Mbps 以及全速 full speed 的 12Mbit/sec(1.5MByte/sec )
- OCHI(Open Host Controller Interface)
OHCI 採用 Memory mapped I/O (CPU 使用記憶體指令來存取 USB 控制器),所以每個 USB Hub 都配置一塊記憶體.
USB 裝置屬於 PCI 的介面,所以要查看 USB 的相關資訊就要看 /proc/pci 這個檔案 - UHCI(Universal Host Controller Interface)
UHCI 採用 I/O mapped I/O (CPU 使用 I/O 指令來存取 USB 控制器),所以每個 USB Hub 都佔用一個 I/O port. - EHCI(Enhanced Host Controller)
[root@benjr ~]# cat /proc/pci ……………..略…………………………. Bus 0, device 29, function 0: USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 2). IRQ 16. I/O at 0×6800 [0x681f]. Bus 0, device 29, function 1: USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 2). IRQ 19. I/O at 0×6820 [0x683f]. Bus 0, device 29, function 2: USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 2). IRQ 18. I/O at 0×6840 [0x685f]. Bus 0, device 29, function 7: USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 2). IRQ 23. Non-prefetchable 32 bit memory at 0xf0000000 [0xf00003ff]. ……………..略………………………….
可以看到這台機器使用 INTEL 82801DB(ICH4) 的南僑晶片,而這晶片支援 USB 2.0 ,並且有 3 個 USB Root Hub.
[root@benjr ~]# cat /proc/pci ……………..略…………………………. Bus 0, device 29, function 0: USB Controller: Intel Corp. 82801CA/CAM USB (Hub #1) (rev 2). IRQ 16. I/O at 0x6c00 [0x6c1f]. Bus 0, device 29, function 1: USB Controller: Intel Corp. 82801CA/CAM USB (Hub #2) (rev 2). IRQ 19. I/O at 0x6c20 [0x6c3f]. Bus 0, device 29, function 2: USB Controller: Intel Corp. 82801CA/CAM USB (Hub #3) (rev 2). IRQ 18. I/O at 0x6c40 [0x6c5f]. Bus 0, device 30, function 0: ……………..略………………………….
可以看到這台機器使用 INTEL 82801CA(ICH3) 的南僑晶片,而這晶片支援 USB 1.1,並且有 3 個 USB Root Hub.
USB 2.0 除支援 USB 1.1 的兩種傳輸速度外,高速 high speed 還可高達 480Mbit/sec(60 MByte/sec)
Linux 對 USB 的支援
RedHat 預設安裝的 Linux 核心對於 USB 的支援採用的是模組.
而相關模組如下
usbcore.o USB 的核心模組
usb-ohci.o 支援 USB 1.1 ohci controller 的模組
usb-uhci.o 支援 USB 1.1 uhci controller 的模組
ehci-hcd.o 支援 USB 2.0 controller 的模組
usb-storage 當使用 Disks, CD-RW, USB-FLASH,BackPack USB Drives,Archos MP3 Jukebox, etc 裝置時所需要的模組
你可以用 lsmod 來看模組裝置的狀況
通常一般的 USB 裝置, Linux 都有支援,如果有遇到使用上有問題的裝置時,可以先查看 /usr/share/hwdata/usb.ids 查出你的 USB 裝置是否有列在其中的裝置內.如果沒有很有可能是 Linux 尚未支援的裝置.
USB 裝置的對應
X-Window 下有一支程式 hwbrowser 可以看目前的硬體裝置,可查出 USB device 掛載在哪一個裝置下.
I.USB 的 CDROM
由 scd0,scd1…… 依序下去
II.USB 的 Keyboard,Mouse
基本上 USB 的 keyboard,Mouse 插上去就可以使用.
但有時 USB Mouse 會無法使用,此時就使用指令重設 USB Mouse
[root@benjr ~]# mouseconfig
or
[root@benjr ~]# setup
選擇 mouse configuration or
[root@benjr ~]# redhat-config-mouse
這支程式必須在 X-window 下執行(RedHat 8.0 之後的版本提供)
III.USB Floppy,HardDisk, 拇指碟…..
由 sda,sdb…… 依序下去,可以使用 #fdisk -l 來看 partition 分割狀態.
下面是 USB 裝置和 dev 的對應表,此表來至 http://www.linux-usb.org/usb.devices.txt
USB device number mappings 13 char Input drivers 0 = /dev/input/js0 First joystick 1 = /dev/input/js1 Second joystick ... 32 = /dev/input/mouse0 First mouse 33 = /dev/input/mouse1 Second mouse ... 63 = /dev/input/mice Mixed input from all mice 64 = /dev/input/event0 First event stream 65 = /dev/input/event1 Second event stream ... The current input system is used for USB devices only, however, it isn't limited just to those, and hopefully will be the way to access all input devices in the future. 166 char ACM USB modems 0 = /dev/ttyACM0 First ACM modem 1 = /dev/ttyACM1 Second ACM modem ... 180 char USB devices 0 = /dev/usb/lp0 First USB printer ... 15 = /dev/usb/lp15 16th USB printer 32 = /dev/usb/mdc800 MDC800 USB camera 48 = /dev/usb/scanner0 First USB scanner ... 63 = /dev/usb/scanner15 16th USB scanner 64 = /dev/usb/rio500 Diamond Rio 500 96 = /dev/usb/hiddev0 1st USB HID device ... 111 = /dev/usb/hiddev15 16th USB HID device 112 = /dev/usb/auer0 1st auerswald ISDN device ... 127 = /dev/usb/auer15 16th auerswald ISDN device 128 = /dev/usb/brlvgr0 First Braille Voyager device ... 131 = /dev/usb/brlvgr3 Fourth Braille Voyager device 144 = /dev/usb/lcd USB LCD device 240 = /dev/usb/dabusb0 First daubusb device ... 243 = /dev/usb/dabusb3 Fourth dabusb device 188 char USB serial converters 0 = /dev/ttyUSB0 First USB serial converter 1 = /dev/ttyUSB1 Second USB serial converter ...
查看 USB 裝置所使用的速度
這邊我使用的是 Intel ICH5-R(82801EB) 的南僑晶片,所以我們先看看它支援的程度
[root@benjr ~]# lspci 00:1d.0 USB Controller: Intel Corp. 82801EB USB (rev 02) 00:1d.1 USB Controller: Intel Corp. 82801EB USB (rev 02) 00:1d.2 USB Controller: Intel Corp. 82801EB USB (rev 02) 00:1d.3 USB Controller: Intel Corp. 82801EB USB (rev 02) 00:1d.7 USB Controller: Intel Corp. 82801EB USB2 (rev 02)
可以看到 Intel ICH5-R(82801EB) 支援五個 USB Controller,1個 USB 2.0 controller(EHCI 速度為 480Mbps),4個 USB 1.1 controller(UHCIs 速度為 12Mbps)
現在來看看我們目前有哪幾個 USB 的裝置,#lsusb (lsusb 由 usbutils-xxx.rpm 提供,可以參考 Linux USB 的官方網站 http://www.linux-usb.org)
[root@benjr ~]# lsusb Bus 005 Device 001: ID 0000:0000 Bus 005 Device 002: ID 0d49:5000 Maxtor Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 001 Device 003: ID 045e:0039 Microsoft Corp. IntelliMouse Optical Bus 001 Device 002: ID 08ec:0011 M-Systems Flash Disk Pioneers
可以看到一個 Maxtor 的 USB H.D,一個 Microsoft mouse,一個 Flash Disk(Disk on Key),至於速度要參考 /proc/bus/usb/devices .
[root@benjr ~] # cat /proc/bus/usb/devices T: Bus=05 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 8 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.04 S: Manufacturer=Linux 2.4.21-9.ELsmp ehci-hcd S: Product=Intel Corp. 82801EB USB2 S: SerialNumber=00:1d.7 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms
#以上可以看到一個 USB 2.0 controller,速度為 480 Mbps
T: Bus=05 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 2 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0d49 ProdID=5000 Rev= 1.00 S: Manufacturer=Maxtor S: Product=5000XT v01.00.00 S: SerialNumber=A80ARQBE C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=32ms
#以上可以看到一個 USB 2.0 裝置為 Maxtor 的 5000XT USB H.D,
#而且不消耗電流(USB本身使用外接電源) ,速度為 480 Mbps.
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=e400 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
#以上可以看到一個 USB 1.1 controller,速度為 12 Mbps
#USB 1.1 controller的裝置會佔用 Bus 01 02 03 04 Lvl 00 而裝置會佔用 Bus 01 02 03 04 Lvl 01 如下所示.(系統會自動分配 Bus 給每個需要的裝置)???????
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=0039 Rev= 3.00 S: Manufacturer=Microsoft S: Product=Microsoft 5-Button Mouse with IntelliEye(TM) C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=hid E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=10ms
#以上可以看到一個 USB 1.1 裝置為 Microsoft 的 Microsoft 5-Button Mouse with IntelliEye(TM)
,速度為 1.5 Mbps(通常 keyboard,mouse 只會使用低速 low speed).最大消耗電源為 100mA
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=08ec ProdID=0011 Rev= 2.00 S: Manufacturer=I0MEGA S: Product=Minidrive 128 S: SerialNumber=0217C20F1B009EDE C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 94mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
#以上可以看到一個 USB 1.1 裝置為 I0MEGA 的 Minidrive 128,速度為 12 Mbps.最大消耗電源為 94mA
note:
1.當你在使用 USB Storage 時,如果直接將他從 USB port 直接移除,在 dmesg下會產生一些 I/O error 的錯誤訊息.此時你可以用 #rmmod usb-storage 來移除 usb-storage 模組,然後再移除 USB storage 裝置就不會產生一些 I/O error.
2.有些 USB 裝置雖然是 USB 2.0 但是他們卻不能正確的運作,此時我們只好先移除 USB 2.0 的模組(#rmmod ehci-hcd ),插入 USB 裝置,然後讓系統自己偵測安裝 USB 1.1 或 USB 2.0 的模組,這樣大多數的 USB 裝置都可以在 Linux 下正常的工作.
3.市售的 USB 裝置,大多可以使用在 Linux 下.但有少部分的裝置可能無法正常工作在 linux 下.所以在你購買任何 USB 裝置前你可以先參考你的 Linux 下的一個檔案 /usr/share/hwdata/usb.ids 它列出你目前的 Linux 版本所有支援的 USB裝置.
2 thoughts on “設定 USB 裝置”