Jak zprovoznit USB zařízení v Linuxu


Základní konfigurace USB

Potřebujeme jádro verze 2.2.7 a vyšší obsahující kód pro USB. Starší verze jádra 2.2.x sice obsahují USB kód, ale bohužel již zastaralý.

make menuconfig

U položky USB Support je třeba vybrat Support for USB.
Dále je třeba vybrat jeden z: Který vybereme závisí na tom jaký čipset je použit na základní desce nebo v USB adaptéru který máme. Intel a Via základní desky, a adaptéry založené na Via-čipsetu jsou UHCI, a můžeme zvolit jeden ze dvou UHCI driverů - ve kterých jsou jen malé viditelné rozdíly. Ali a SiS čipsety, Compaq a NEC základní desky, iMacy a adaptéry používající Opti čipy (asi všechny) jsou OHCI, a musí se použít OHCI-HCD.
Jestliže nevíte který kontrolér je osazen podívejte se do dokumentace k základní desce. Můžete se také podívat na /proc/pci pro radu - jestliže je USB záznam osahující adresu ve formě 0xHHHH, kde HHHH jsou hexa číslice (např. vypadají takto I/O at 0xe400), potom je to UHCI. Jestiže je ve formě 32 bit memory at 0xHH000000, kde HH jsou hexa číslice (např. vypadají takto 32 bit memory at 0xee000000), potom je to OHCI.

Vždy zkompilujeme Preliminary USB device filesystem. Vynechání nám může znemožnit zjištění problému nebo zjištění, zda je kernel správně nakonfigurovám (resp. zda je dané USB zařízení správně detekováno).

Dále zvolíme, jaké zařízení chceme používat.
USB hub je automaticky podporován. Některá zařízení mohou začít a přestat pracovat při změně verze jádra. Přeložíme jádro a moduly (pokud jsme konfigurovali s použitím modulů), nainstalujeme a restartujeme systém.

Nahrajeme následující moduly:
usbcore.o
usb-uhci.o, uhci.o nebo usb-ohci.o
a potřebné drivery (jako např. usbmouse.o, scanner.o, printer.o).


USB Device filesystem

USB device filesystem je dynamicky generovaný filesystem, podobně jako /proc filesystem. Může být namountován kamkoliv, ale je zvykem ho mountovat na /proc/bus/usb (vstupní nód vytvořený USB kódem).

Pro výše uvedené je potřeba zvolit při překladu "Preliminary USB Device Filesystem".Také je třeba povolit obecnou /proc podporu a mít ho namountovaaný.

Pro namountování filesystemu, je potřeba být rootem.
Použijte příkaz:

mount: mount -t usbdevfs none /proc/bus/usb
Parametr none je pomocný - můžete použít libovolný , a někteří dávají přednost slovu usbdevfs, které způsobí vizuálně lepší hlášku příkazu mount.

Jestliže chcete mít filesystem přimountovaný okamžitě po rebootu systému, přidejte následující řádky do souboru /etc/fstab po řádce s /proc:

none /proc/bus/usb usbdevfs defaults 0 0
Toto má ten samý efekt jako zadání výše uvedeného příkazu mount.


Podpora pro tiskárny

Nyní je potřeba vytvořit nód pro připojení tiskárny.
Jako root zadáme následující příkazy:

mknod /dev/usb/usblp0 c 180 0
Nyní můžeme toto zařízení normálně přidat do /etc/printcap.


Podpora pro USB Modem

USB modemy (pro klasickou telefonní linku, ISDN nebo kabel) by se měly vyhovovat specifikaci Communication Device Class (CDC), a obvykle Abstract Control Model (ACM) sub-class. Jestliže modem nevyhovuje specifikaci, nebude s tímto driverem pracovat.
Pro zprovoznění potřebujeme vybrat podporu USB Modem (CDC ACM) support při konfiguraci kernelu. Jestliže jsme přeložili driver jako modul, nahrajeme soubor acm.o do jádra.
Nyní je potřeba vytvořit nód pro připojení až 32 modemů. Jako root zadáme následující příkazy:

mknod /dev/usb/ttyACM0 c 166 0
mknod /dev/usb/ttyACM1 c 166 1
mknod /dev/usb/ttyACM2 c 166 2
mknod /dev/usb/ttyACM3 c 166 3
Nyní můžeme použít program pro emulaci terminálu, a vyzkoušet připojení k výše uvedeným modemům.


Podpora USB Skenerů

Pokud není scanner propojen automaticky s ovladačem, je potřeba nahrát moduly:

insmod scanner.o vendor=0xXXXX product=0xYYYY
Kde XXXX je hexadecimální kód prodejce a YYYY je hexadecimální kód produktu. Dále jako root zadáme příkazy:
mknod /dev/usb/usbscanner0 c 180 48
chmod a+rw /dev/usb/usbscanner0

Pro HP scanner je třeba změnit /usr/local/etc/sane.d/hp.conf.
/dev/usb/usbscanner0
option connect-device

Pro Epson scanner je třeba změnit /usr/local/etc/sane.d/epson.conf
usb /dev/usb/usbscanner0