다음 이전 차례

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 기능을 꺼둔 경우, 커널의 잘못된 설정이나 설치 때문일 것이다.


다음 이전 차례