  How to get USB devices working under Linux

   USB ġ 
  Brad Hards , brad.hards@dao.defence.gov.au
  Revision: 0.7
  , arbeit95@chollian.net
  Revision: 0.7  1999 10 9

    USB ġ  ýۿ ϱ  ܰ ȳ
  ʾ̴.
  ______________________________________________________________________

  

  1. ⺻ USB 
  2. 콺 
  3. Ű 
  4.  
  5.  
  6. Abstract Control Model 
  7. CPiA imager 
  8. 뷮 ġ
  9. EZUSB ̹
  10. USS720 ̹
  11. USB /proc ̹
  12.   ޴ ͵(FAQs)
  13. 

  ______________________________________________________________________

  1.  ⺻ USB 

  ֽ  Ŀ ־ Ѵ.  2.2.7 ̳  Ĺ Ŀ
  USB ڵ带 ϰ ִ. ̻δ   pre-patches
   ֽ 2.3.x Ŀ ϰ  . 2.2.x Ŀο 2.3.x
  USB ڵ带 ϴ  ϴ - ڼ    ޺κ 
  . USB ڵ  ʱ ߴܰ迡 ֱ    (
   ׵) ſ  ϴ  ִ. ֽ   
  幰 ϸƮ  κп   ٷ ִ.

  ϸƮ linux-usb@suse.com̴. Ϸ
  majordomo@suse.com subscribe linux-usb    .
  ϸƮ ۵ ׸    majordomo@suse.com
  unsubscribe linux-usb  Ἥ .

  Ŀο USB  ؾ Ѵ. make menuconfig  ̴. USB
  drivers - not for the faint of heart ׸񿡼 Support for
  USB(EXPERIMENTAL!) ؾ Ѵ.  UHCI (intel PIIX4 and others)
  support, OHCI (compaq and some others) support,Ǵ OHCI-HCD (other
  OHCI opt. Virt. Root Hub) support  ϳ Ѵ. UHCI, OHCI
   OHCI-HCD ÿ  ϸ  ۵   ִ(UHCI
  ۵ ̴).    ̳Ĵ   峪
  ͸  ִĿ ޷ ִ. Intel Via  UHCI̴.
  Ѱ NEC , iMac Opti Ĩ( Ĩ  )  
  ʹ OHCI̸ OHCI OHCI-HCD  ϳ   ִ. 
  Ʈѷ ؾ 𸣰ڴٸ   . 
  /proc/pci Ʈ   ִ. USB ׸ 0xHHHH Ǿ 
  (HHHH 16̴ -   I/O at 0xe400) UHCI̴. 32 bit
  memory at 0xHH000000  (HH 16̴ -   32 bit memory
  at 0xee000000) OHCI̴. ̰͵ Ұϸ ƹų ϳ õغ.

    ġ   ؾ Ѵ.   xUSB
  mouse support USB 콺, USB keyboard support USB Ű, USB hub
  support , USB communications Devices Class (ACM) support POTS
  Ǵ ISDN, USB Printer support USB , USB SCSI Support
  뷮 ġ, USB CPiA Camera support Vision CPiA Ĩ 
  ī޶, EZUSB Firmware downloader Anchor ChipsUSB
  ũƮѷŶ  ٿε, USS7270 parport driver  Ʈ
  Ϳ ̴.  Ŀ  (kernel only), (split)
  , Ŀڵ    ־ Ѵ. ġ Ʈ 꿡 Ⱦ
  ؼ 갡  ʿ ʴ ϴ   ϴ 
  .

  USB audio parsing support   ʴ´.  
  ŵ  ġ      ʴ ͵̴.
  ׷ ڵ  ڵ忡  ִ (contribute) 
  ȯѴ.

   Ŀ(2.2.x)  Ѵٸ Ŀ(2.3.x) ڵ带 drivers/usb
  丮   ȴ. arch/i386/config.in Ʒ 
   ּ ־ Ѵ.

  # source drivers/usb/Config.in

  ٸ Űó  ̴. drivers/usb/usb.h ùκп Ʒ
     (definition) ߰ؾ Ѵ.

  #if LINUX_VERSION_CODE < 0x020300
  #define DECLARE_WAIT_QUEUE_HEAD(w)     struct wait_queue *w = NULL
  #define DECLARE_WAITQUEUE(w,c)         struct wait_queue w = {(c), NULL}
  #define wait_queue_head_t              struct wait_queue *
  #define init_waitqueue_head(w)         *(w) = 0
  #define DECLARE_MUTEX_LOCKED(sem)      struct semaphore sem = MUTEX_LOCKED
  #endif

  Ŀ ϰ ( ߴٸ) ⵵    ο
  Ŀΰ  ġ϶. ý Ѵ.

   ϰ ִٸ     (load) ؾ Ѵ.
  usbcore.o  ϰ mouse.o, keyboard.o, hub.o  ̹
     ȣƮ Ʈѷ(  usb-uhci.o Ǵ usb-
  ohci.o) Ѵ.

  Ŀ α׸ 캸. Ʒ      ̴(UHCI
  ܺ 긦 ϴ ̴).

  .......
  Jul 19 20:46:02 rachel kernel: USB HID boot protocol mouse registered.
  .......
  Jul 19 20:46:02 rachel kernel: uhci_control_thread at c01b8c5c
  Jul 19 20:46:02 rachel kernel: New bus registered
  Jul 19 20:46:02 rachel kernel: USB hub driver registered
  Jul 19 20:46:02 rachel kernel: uhci_connect_change: called for 0
  .......
  Jul 19 20:46:02 rachel kernel: USB hub found
  Jul 19 20:46:02 rachel kernel: hub: 4-ports detected
  Jul 19 20:46:02 rachel kernel: hub: individual port power switching
  Jul 19 20:46:02 rachel kernel: hub: standalone hub
  Jul 19 20:46:02 rachel kernel: hub: individual port over current protection
  Jul 19 20:46:02 rachel kernel: hub: power on to power good time: 100ms
  Jul 19 20:46:02 rachel kernel: hub: hub controller current requirement: 100mA
  Jul 19 20:46:02 rachel kernel: hub:  port 1 is removable
  Jul 19 20:46:02 rachel kernel: hub:  port 2 is removable
  Jul 19 20:46:02 rachel kernel: hub:  port 3 is removable
  Jul 19 20:46:02 rachel kernel: hub:  port 4 is removable
  Jul 19 20:46:02 rachel kernel: hub: local power source is good
  Jul 19 20:46:02 rachel kernel: hub: no over current condition exists
  Jul 19 20:46:02 rachel kernel: enabling power on all ports
  Jul 19 20:46:02 rachel kernel: uhci_connect_change: called for 1
  .......
  Jul 19 20:46:02 rachel kernel: hub: port 3 connection change
  .......

  OHCI OHCI-HCD    ̴. ׷   ٲٴ
  Ϳ  Ϳ  ׸ ũ  ʿ . ٸ 
  ġ ʴ  ̴. USB õ (hubs, usb, ohci, uhci
   ǥϴ )  ٸ Ƹ ߸ ̹ ϰ
  ְų(OHCI  ϴµ UHCI  쳪  ݴ ),
  ϵ  ġ  , BIOS USB  
  , Ŀ ߸ ̳ ġ  ̴.

  2.  콺 

  켱 콺 Ŀο   νĵǴ Ȯ϶. more
  /proc/interrupts   USB  ( ohci-usb  usb)
     ̴. 콺   Ŭ  /proc/interrupts
  캸 ش īƮ      ̴(Ŭ   2
  ϴµ down,up  1 Ѵ). UHCI īƮ  
  /proc/interrupts  캸   ð()  Ѵ. USB
  Ű带 ϰ ִٸ Ű  ؾ Ѵ.

  /proc/misc 캸 Ʒ      ̴.

  [bradh@rachel bradh]$ more /proc/misc
   32 USB Mouse
    1 psaux

  콺  /dev ׸ ؾ Ѵ. Ʒ  ϶.

  mknod /dev/usbmouse c 10 32

  X 쿡 콺 Ϸ Ʒ  ؾ Ѵ.

  o  XF86Config ( /usr/X11R6/lib/X11/XF86Config) Ѵ.
     Ʒ  ߰϶(ν     Էġ
     ׸ ٶϴ).

     Section "Xinput"
        SubSection "Mouse"
             DeviceName   "USB Mouse"
             Protocol     "IMPS/2"
             Port         "/dev/usbmouse"
             AlwaysCore
        EndSubSection
     EndSection

  o  X  Ѵ. 콺 ۵  Ctrl-Alt-F1 
      ͹̳   xserver kill  Ű 
     ޼  ϶.

  gpm 콺 Ϸ gpm -m /dev/usbmouse -t ps2 
  ϶(  ؾ Ѵ). ý Ǵ  ϸ
  ̰ ⺻   ִ. Redhat ǿ ⺻
  /etc/rc.d/ 丮 ̷ ϵ  rc.d  ̸ 
  ִ.

  3.  Ű 

  PC ϰ ִٸ USB Ű带 ϱ  ü  
  ʿ   ִ.  Ʈ 꿡  USB Ű带
  ϴ BIOS ִ. ̰ ٸ 꿡 ۵  ְ 
    庸(add-in board)  ۵ ʴ´. 
     ʿ ̴.

  Ű尡 Ŀο Ȯ νĵǴ Ȯ϶. more /proc/interrupts
    USB  ( ohci-usb Ǵ usb)   
  ̴. Ű带   /proc/interrupts 캸 īƮ 
     ִ.  UHCI ϰ ִٸ  ð() 
  Ѵ.

    Űó USB Ű带    ̴. LILO
  USB ν Ѵٴ  ϶. BIOS USB Ű带 
  ʴ´ٸ USB Ű带 ϴ ⺻ ̹  ٸ Ʈ ̹
      ִ.   USB Ű(׸  USB
  콺) ϰ  ƹ  .

  4.   

   ٸ   ۵ ̴. Ʈ 꿡  쿡
  ۵ǰ (add-on) 꿡    ۵ ʴ´ٸ 
   ġߴ Ȯ϶(  ̴).   
   ޵Ǵ 꿡   ϴ ġ  ʵ
  Ѵ.

  5.   

  Ϳ /dev ׸ ؾ Ѵ. Ʒ  ϶.

  mknod /dev/usblp c 63 0

    ġ /etc/printcap ׸񿡼    ̴. ణ
   μ  ̹  Ǹϴٰ Ѵ. Redhat
     ڵ   ؼ ġ   
  Ѵ.

  Ͱ ۵    ѹ(major device number)
  ٲ ϶(63   ̴). ҽڵ峪
  /proc/devices 캸 ȴ.   Ǿ 캸
  /etc/printcap ׸ ٽ üũ϶. Ư ġ    Ͱ
   Ȯ϶.

  6.  Abstract Control Model 

  پ ACM ġ ϱ  /dev ׸ ؾ Ѵ. Ʒ
   ϶.

  mknod /dev/ttyACM0 c 166 0
  mknod /dev/ttyACM1 c 166 1
  mknod /dev/ttyACM2 c 166 2
  mknod /dev/ttyACM3 c 166 3

    ġ ϱ  ͹̳ ֹķ α׷  
   ̰ ̳ ٸ ͹̳ ġ    ̴. и
   ̹ κ ۵     ִ. 
   ׽Ʈ غ ʾҴ.

  7.  CPiA imager 

   ̹ Vision翡  Ư Ĩ ϸ USB
  ī޶(ǥ Creative WebCamll) ȴ.  ̹
  ϱ ؼ Video For Linux ׸ ؾ Ѵ(menuconfig
  ϰ ִٸ Character Devices ׸ Ʒ ִ).

  CPiA ī޶  /dev ׸ ؾ Ѵ. Ʒ  ϶.

  mknod /dev/video0 c 81 0
  ln -s /dev/video0 /dev/video

  ġ ϱ ؼ     ʿϴ.  
   ִ. http://millenium.diads.com/bdirks
  <http://millenium.diads.com/bdirks>   ¥ 
  apps19990527.tgz  ̸  Ű Ѵ. X  
  ؽƮ   ϰ ִ. ؽƮ   Ʒ   
  ִ.

  ./vctrl 320x240x24
  ./vcat | rawtoppm -bgr 320 240 | xv -

    ٸ   Ʈ /dev/video ϱ 
  ɺ ũ  Ǿ ־ Ѵ.

  μ CPiA ī޶ ̹ ϴ.   ׽Ʈ
    . CPiA ī޶ ϰ Ѵٸ Vision CPiA Ʈ
  http://home.eunet.no/~jtotland/vision
  <http://home.eunet.no/~jtotland/vision> ϶.

  8.  뷮 ġ

  ߰ 

  9.  EZUSB ̹

  ߰ 

  10.  USS720 ̹

  USS720  Ʈ USBĨ Lucent翡 . USS720Ĩ USB
  Printer Class ġó ۵Ѵ.  USS720  긴
  ϸ  Ʈ ͸ տ  USB  ̹  
  ִ.  USS720  Ʈ ϵ νϴ 尡
  ִ(  ˷ ִ).  ̹  带
  Ѵ.

   ϰų USS720  Ŀη  ϱ 
  /proc/sys/dev/parport 캸.  ý  Ʈ 
  ָ϶( /proc/sys/dev/parport/parport0 ϳ̴). USS720
  ׸ Ŀο ԽŲ Ŀ ϳ Ʈ(
  /proc/sys/dev/parport1)  ̴. ش ϵ ׸ 
  Ʒ      ̴.

  [bradh@rachel bradh]$ more /proc/sys/dev/parport/parport1/hardware
  base:   0x0
  irq:    none
  dma:    none
  modes:  PCSPP,TRISTATE,COMPAT,EPP,ECP

     Ʈ /dev ׸ ϰ ִ( /dev/lpx Ǵ
  /dev/parx ̸ x  ̴). Ȯ  ʴ´ٸ Ʈ
  ĳ  ѹ(character major number) 6 Ѵٴ 
  ϶.

  USS720 Ʈ     ̴. ¥ USB ó
   ῡ  /etc/printcap  ڵϷ ۼϱ⸦
  Ѵ.

  ׸񿡼 USS720    ٸ Parallel port support
  ׸ ؾ Ѵ( menuconfig Ѵٸ General setup ׸
  Ʒ ִ).

  11.  USB /proc ̹

  /proc USB  ؼ Preliminary /proc/bus/usb support
  ؾ Ѵ. ׸  Ѵ ϰ 缳ġ϶.

  USB /proc  ׸  2 ̽  ִµ,
  /proc/bus/usb/drivers /proc/bus/usb/devices̴.

  /proc/bus/usb/drivers  ϵ ̹ Ʈ
  ش(̹ ġ  ʰ ִ).  ġ
  ׽Ʈ Ư(unknown) Ŀο USB  θ 캼  ϴ.
  Ʒ  .
  [bradh@rachel bradh]$ more /proc/bus/usb/drivers
   hub
   printer
   keyboard
   mouse

  /proc/bus/usb/devices  USB   ġ  
  ǥѴ.  ġ  Ǿ ľϴµ ϴ. Ʒ
   Ʈ, , Ű, 콺,   ϴ ̴.

   T:  Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= -1 Spd=12  If#=  0 MxCh= 2 Driver=(root hub)
   T:  Lev=01 Prnt=00 Port=00 Cnt=01 Dev#=  1 Spd=12  If#=  0 MxCh= 4 Driver=hub
   D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
   P:  Vendor=0451 ProdID=1446 Rev= 1.00
   C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
   I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00
   E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
   T:  Lev=02 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  If#=  0 MxCh= 0 Driver=printer
   D:  Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
   P:  Vendor=0729 ProdID=1284 Rev= 1.04
   C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 98mA
   I:  If#= 0 Alt= 0 #EPs= 1 Cls=07(print) Sub=01 Prot=01
   E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
   I:  If#= 0 Alt= 1 #EPs= 2 Cls=07(print) Sub=01 Prot=02
   E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
   E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
   I:  If#= 0 Alt= 2 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff
   E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
   E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
   E:  Ad=83(I) Atr=03(Int.) MxPS=   4 Ivl=  1ms
   T:  Lev=02 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=1.5 If#=  0 MxCh= 0 Driver=keyboard
   D:  Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
   P:  Vendor=045e ProdID=000b Rev= 0.82
   C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
   I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01
   E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl= 10ms
   T:  Lev=02 Prnt=01 Port=02 Cnt=03 Dev#=  4 Spd=1.5 If#=  0 MxCh= 0 Driver=mouse
   D:  Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
   P:  Vendor=046d ProdID=c001 Rev= 1.10
   C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 50mA
   I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02
   E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl= 10ms

  /proc/bus/usb/devices    ׷ .

  o  T: ϴ  (topology)̴. Lev ġ 
     ǥѴ.  00 Ʈ̰  01 Ʈ꿡  ġ,
      02 01 꿡  ġ ̴. Prnt  ġ 
     ġ̴(00 Ʈ Ʈ꿡  ġ ǹѴ). Port
      ġ Ʈ̴. 00  ġ ù° Ʈ̴. Prnt/Port 
        ´.   ȿ 迭  
     Cnt ش   ġ ȣ ǥѴ. ù ° ġ
     01 Ѵ. Dev#  迭     ġ
     ȣ̴. Spd ġ ۵Ǵ ӵ Mbps ǥѴ(
      1.5 1.2̴). If#  Ǵ ̽ ȣ̴.
     MxCh  ġ   ִ ִ ġ ̴.  ܿ 
     00̴. Driver  ġ ǰ ִ ġ ̹
     ǥѴ('none' ׸ ƹ ̹   ǹѴ).

  o  D: ۵Ǵ  ġ ũ(descriptor) ̴. Ver
     ġ 䱸ϴ USB   ǥѴ. Cls ġ ûϴ
     ġ Ŭ ǥϸ 16 ڿ ǥѴ. Cls ׸ 
     00(>ifc) ġ Ŭ  䱸 ̽  ǹϸ
     ̽ ũʹ ġ Ŭ  ϰ ־ Ѵ.
     Sub ġ ϴ  Ŭ(Cls ׸ ȿ) ǥѴ.
     MxPS Ʈ(Endpoint) 0κ Ŷ ִ ũ⸦
     ǥѴ. Cfgs ġ   ǥѴ.

  o  D: ϰ P: ϴ  ġ ũ 
     ǥ  ٿ ǥ    иǾ ִ. Vendor
     ġ Ǹ  ڵ带 ǥϸ ProdID ǰ  ڵ带
     ǥѴ. Rev ǰ  ȣ̴.

  o  USB 缭 9.7.1 ϸ ġ ũͿ    
       ִ.

  o  C: ϴ   ũ ̴.  ġ C:
     ȣ #Cfgs  Ҵȴ. ƽ׸ũ ڰ  ׸ 
      ǹѴ. #If ġ ̽  ǥѴ. Cfg# 
       Ǵ ش. Atr ġ Ӽ 16
     ǥ ̴(0x80  , 0x40 ü , 0x20 
     õ ). MPwr  ġ  ִ   ̸
     и ǥѴ. USB 缭 9.7.2 ϸ 
     ũ ߰    ִ.

  o  I: ϴ  ̽ ũ ̴.  C: I:
     ȣ #Ifs ׸  Ҵȴ. If# ش ġ  
     ̽ Ǵ ǥѴ. Alt ش ̽ 
     ü  Ǿ ִ ش. #EPs ش Ʈ
     ü   󸶳  Ʈ ִ ش. Cls
     ü ̽   Ŭ شǴ 16 ڿ
     Ÿ. Sub ̽ ü    Ŭ
     شǴ Ÿ. Prot ü ̽  ̽
     (Ŭ Ŭ  ) 
     ش. USB 缭 9.7.3 ϶.

  o  F: ϴ  ̽ ũ ̴.  I:
     ࿡ E: ȣ #EPs ׸񿡼 ־. Ʈ 0
     ǥõ ʴ´. Ad Ʈ ּҸ Ÿ Ʈ
     Է/    Ÿ ڸ ϰ ִ. Atr
     Ʈ Ǵ Ӽ( Ÿ) Ÿ Ÿ
     ϴ ڿ ڿ ´. MxPS ش Ʈ 
     ۼ  ִ ִ Ŷ ũ⸦ Ÿ.  (isochronous
     transfer)  MxPS 䱸Ǵ 뿪 ũ⸦ Ÿ. Ivl
     Ʈ ͷƮ ȣ  и  Ÿ. Ivl
     ũ  (bulk and control transfers) õǸ
     ۿ 1 ȴ. Ʈ ũͿ  ڼ
      USB 缭 9.7.4 .

  /proc/bus/usb   ڼ 
  linux/Documentation/proc_usb_format.txt ϶.

  12.    ޴ ͵(FAQs)

   ݺǴ 鿡  亯̴.

  ̹   ؾϳ

  Ŀμҽ ϶.  ϴ Ͱ  ̹ 
  ۵  ϶. ⼭ ϴٴ   ϰ ϴ
  Ϳ   ġ   ϴ  ƴϴ.

  USB   å ִٸ

      оµ ſ νϴٰ ߴ.
  http://www.usb.org <http://www.usb.org> 缭 غ⸦
  Ѵ. װ ̸ б  ֽ ̴.

  Ư ü  (vendor specific) ġ  ־.
  ũʹ ̷ Ǿ ֱ

  ũʹ ̹   ʼ̳ װ͸ 
  ʴ. üκ   γ ˾ƾ Ѵ. Դٰ
  ũͰ  ؼ ʴ´ Ͽ   -    
  ִ   ü ġ  ° δ. ũʹ
  ܼ ġ  Ʈ̸, ġ α׷ϸ ġ 뵵
    ڸ ǥõǰ   ִ.

  ̹   ѹ ̳ ѹ ؾ ϳ

   Ǵ   ȣ ϶. μ USB Ҵ
    ѹ . ̳ʴ ƹų ϶.

  Sony Vaio laptop USB ϰ 

  BIOS Plug-n-Pray ü  ׸    ۵
  ̴.

  USB-HOWTO  ֽ  ϳ

  ϴ http://www.dynamine.net/linux-usb/HOWTO
  <http://www.dynamine.net/linux-usb/HOWTO>.

  13.  

    ؼ    ǵ̸
  brad.hards@dao.defence.gov.au    .  
   ȣ ($Revision: 0.7 $) ϵ Ѵ.

