Sériové rozhraní

Implementace RS-232 pod OS Linux
Implementace USB pod OS Linux
Implementace FireWire pod OS Linux
Implementace IrDa pod OS Linux
Implementace extern SATA pod OS Linux
subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link

USB

small logo

Implementace USB pod Linux

OBSAH

 

Základní konfigurace USB

  1. Potřebujeme poslední verzi kernelu. Kernel verze 2.2.7 a vyšší obsahují kód pro USB. Můžete také, v ideálním případě, používat aktuální verzi vývojového kernelu 2.3.x, pokud možno aplikovat pre-patche pro další kernel. Aktuální kernely verze 2.2.x obsahují sice USB kód, ale ten je bohužel zastaralý, a nemůže být použit v návaznosti na tento dokument. Je také možné použít USB kód z kernelu 2.3.x v kernelu 2.2.x - podrobněji viz dále v tomto dokumentu. USB kód je v počátečním stadiu vývoje, proto změny mezi každou verzí (a chyby) se mění velmi rychle.

  2. Potřebujeme konfigurovat USB v našem kernelu. Použít make menuconfig je doporučeno. U položky USB Support,je potřeba vybrat Support for USB. Dále je potřeba vybrat jeden z UHCI (Intel PIIX4, VIA, ...) support, UHCI Alternate Driver (JE) support nebo OHCI-HCD (Compaq, iMacs, OPTi, SiS, ALi, ...) support. 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), poto je to OHCI. Nevíte-li, zkuste jeden, potom druhý.

    Vždy ale zkomilujeme Preliminary USB device filesystem. Vynechání tohoto nám může znemožnit zjištění problému, a je důležitý pro zjištění zda je kernel konfigurovám zprávně, respektive zda je dané USB zařízení správně detekováno.

  3. Dále je potřeba zvolit které zařízení chceme používat, na příklad USB Human Interface Device (HID) support (s dalšími doplňujícími volbami) pro USB klávesnici, myš, joystik, tablet nebo gamepad, USB Scanner support pro obecné skenery, USB Audio support pro USB reproduktory, USB Modem (CDC ACM) support pro POTS nebo ISDN modem, USB Printer support pro USB tiskárnu, USB Serial Converter support (s dalšími doplňujícími volbami) pro zřízení typu seriový port, USB CPiA Camera support pro kamery založené na Vision CPiA čipsetu, USB IBM (Xirlink) C-it Camera support pro kamery založené na IBM čipsetu, USB OV511 Camera support pro kamery založené na OmniVision's OV511 čipsetu, USB Kodak DC-2xx Camera support pro přístup k fotoaparátům ze série Kodak DC-200, USB Mass Storage support pro záznamová zařízení, USS720 parport driver pro odpovídající parallelní porty, DABUSB driver pro experimentální Digital Audio Broadcast přijímač a PLUSB Prolific USB-Network driver pro připojení přes USB to USB. Můžeme také použít modulů,jenom kernelu, nebo spojit moduly a kód kernelu.

    USB hub je automaticky podporován. Některá zařízení mohou začít a přestat pracovat při změně verze kernelu. Nezapomeňte, že používáte experimentální kód. Zařízení jenž nejsou vypsaná v tomto dokumentu, nebyla podporovaná v čase kdy byl psán tento dokument. Proto vývojáři vždy vítají pomoc při vývoji stávajícího zdrojového kódu.

  4. Jestliže používáte stabilní jádra řady (2.2.x), můžete aplikovat patch který přidá poslední USB kód do stávajících kernelů. Tento patch, často nazývaný jako backport patch, můžete získat z http://www.suse.cz/development/usb-backport/. Tento patch aplikujeme na podorovaný stabilní kernel, a rekompilujeme. V tomto patchi nefunguje USS720 driver, protože kód pro paralelní port na kterém tento driver závisí je částečně odlišný ve starších verzích kernelů. Ukládání dat USB se také významně liší v kernelech řady 2.2 a 2.3Přeložíme kernel a moduly (jestliže jsme kernel konfigurovali s použitím modulů), a tyto nainstalujeme. Restartujeme systém, jestliže potřebujete pomoci s překladem podívejte se na Linux Kernel HOWTO.
Jestliže jste se rozhodli pro používání modulů, potřebujete nahrát následující moduly:

usbcore.o

usb-uhci.o, uhci.o or usb-ohci.o

a potřebné drivery, jako například usbmouse.o,scanner.o nebo printer.o.

Prohlédněte si výpisy z kernelu. Jestliže nevidíte něco podobného, co se týká USB, nejspíše je naistalovaný špatný driver (UHCI jestliže potřebujete OHCI nebo OHCI jestliže potřebujete UHCI), není fyzicky nainstalovaný potřebný hardware, a nebo je v konfiguraci BIOSu zakázano USB případně konfigurace nebo instalace kernelu.

 

USB Device Filesystem

USB device filesystém je dynamicky generovaný filesystem, podobně jako /proc filesystém. Tento filesystém může být namountován kamkoliv, ale je zvykem ho mountovat na /proc/bus/usb, jenž je vstupním nódem vytvořeným USB kódem, a potom je použit jako bod připojení pro tuto zběrnici. Přimountování jinam může způsobit chybné chování pomocných utilit.

Pro výše uvedené je potřeba zvolit při překladu "Preliminary USB Device Filesystem", jinak toto nebude pracovat. Také je třeba povolit obecnou /proc podporu, a mýt ho namountovaaný (normalně je to automaticky).

Pro přimountování filesystému, 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ě leší hlášku příkazu mount.

Jestliže chcete mít filesystém přimountovaný akamž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.

Po přimountování filesystému je obsah adrewsáře /proc/bus/usb asi takovýto:

dr-xr-xr-x 1 root root 0 Jan 26 10:40 001
-r--r--r-- 1 root root 0 Jan 26 10:40 devices
-r--r--r-- 1 root root 0 Jan 26 10:40 drivers


Můžete mýt i více jak jeden vstup označený číslem, jestliže váš počítač má více jak jedem USB kontrolér.

Podrobný popis souborů devices a drivers je posán později v této příručce, v uživatelské sekci. Použití vstupů označených číslem popsáno později, příručce programátora.

USB Human Interface Device (HID) Configuration

Obecná konfigurace HID

Zde jsou dvě volby USB myš nebo USB klávesnici - samostatný Boot Protocol a nebo úplný ovladač HID. Boot Protocol je obecně méně používaný, a tato příručka popisuje pouze plný ovladač. Boot Protocol je vyhražen zvláště pro zapouzdřené systémy a další systémy s omezenými zdroji a bez potřeby plného využití ovladače klávesnice a myši.

Je důležité nezapomenout, že HID driver obsluhuje toto zařízení (nebo tato rozhraní pro každé zařízení) that claim to comply with the Human Interface Device (HID) specifikace. However the HID specification doesn't say anything about what the HID driver should do with information received from a HID device, or where the information that is sent to a device comes from, since this is obviously dependent on what the device is supposed to be doing, and what the operating system is. Linux (operační systém na úrovni kernel levelu) podporuje tyto čtyři interfacy jako HID zařízení - klávesnice, myš, joystick a obecný interface, známý jako událostní interface.

Konfigurace myši

Při kofiguraci kernelu, musíte zapnout tyto položky USB Human Interface Device (HID) support Mouse Support a Mix all mice into one device, které sloučí všechny myši na USB do jedné USB myši. Nezapínejte podporu pro USB HIDBP Mouse support. Proveďte normální překlad a instalaci nového kernelu. Jestliže jste nastavili podporu jako moduly, potřebujete nahrát tyto moduly: input.o, hid.o a mousedev.o .

Připojte USB myš a sledujte zda je vaše myš korektně rozpoznána kernelem. Jestliže napíšete more /proc/interrupts, měli byste vidět tyto řádky popisující USB - typicky ohci-usb nebo usb-uhci. Jestiže několikrát stisknete na myši tlačítko, a následně se podíváte do /proc/interrupts tak počítadlo přiřazené USB zvýší svoji hodnotu ( o dvě při stisku, o jednu dolů a jednu nahoru). Jestliže máte USB klávesnici musíte upravit změnu počítadla pro stisk kláves.

Dále je potřeba přidat nód zařízení pro USB myš. Je na uživateli kde vytvoří zápis pro USB zařízení v /dev/usb/ adresáři. Použijeme následující příkazy:

mkdir /dev/input
mknod /dev/input/mice c 13 63

Jestliže zadáme cat /dev/usb/usbmouse0 tak uvidíme nějaké bizarní znaky při pohybu myši nebo stisku tlačítek.

Jestliže chceme použít myš pod X, máme několik možností. Kterou zvolíme závisí na tom jakou verzi X11 používáme, a jestli používáme pouze USB myš, a nebo chceme použít USB myš a nějaké další ukazovací zařízení.

  • Bude potřeba editovat soubor XF86Config (nejspíše /usr/X11R6/lib/X11/XF86Config nebo /etc/X11/XF86Config).
  • Jestliže používáte XFree86 verze 4.0 nebo vyšší, přidáme sekci InputDevice tak jak je vidět níže:

    Section "InputDevice"
    Identifier "USB Mice"
    Driver "mouse"
    Option "Protocol" "IMPS/2"
    Option "Device" "/dev/input/mice"
    EndSection

    nebo, jestliže chcete použít wheel myš, něco podobného:

    Section "InputDevice"
    Identifier "USB Mice"
    Driver "mouse"
    Option "Protocol" "IMPS/2"
    Option "Device" "/dev/input/mice"
    Option "ZAxisMapping" "4 5"
    Option "Buttons" "5"
    EndSection

může být užitečné. Prohlédněte XFree86 dokumentaci pro detailní popis a další příklady.

Budeme potřebovat doplnit do každé sekce ServerLayout kterou používáme. Najdeme ji obyčejně na konci konfiguračního souboru. Jestliže používáme výhradně USB myš potom nahradíme následující řádky takto: V položce "CorePointer" přepíšeme původní řádek tímto:

InputDevice "USB Mice" "CorePointer"

jestliže chcete použít obojí, USB myš (nebo USB myši) a nějaké další ukazovací zařízení, potom přidáme (nepřepíšeme) následující řádky do sekce ServerLayout :

InputDevice "USB Mice" "SendCoreEvents"

  • Jestliže používáte jenom USB myš (nebo USB myši), editujte Pointer sekci tak aby vypadala asi takto:

    Section "Pointer"
    Protocol "IMPS/2"
    Device "/dev/input/mice"
    EndSection

  • Jestliže chcete použít obojí, USB myš (nebo USB myši) a nějaké další ukazovací zařízení, potom použijeme Input rozšíření. Ponecháme stávající Pointer (nebo upravíme jak je potřeba pro další ukazovací zařízení), a přidáme následující řádky (kdekoliv nejlépe v Input devices oblasti):

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

  • Restartujte X server. Jestliže myš nyní nereaguje nezapomeňte, že stiskem Ctrl-Alt-F1 se dostanete na virtuální terminál kde můžeme ukončit Xserver a začít hledat chyby popsané v chybových hláškách od Xserveru.

Jestliže chceme použít USB myš pod gpm, spusíme (nebo ukončíme a spustíme jestliže již gpm běží) gpm s následujícími volbami. gpm -m /dev/usb/usbmouse0 -t imps2 (jako root samozřejmě). Můžeme toto použít jako default editací inicializačního souboru. Ten se většinou jmenuje rc.d a najdeme ho v /etc/rc.d/ v distribuci firmy RedHat

Jestliže chcete použít obojí, USB myš (nebo USB myši) a nějaké další ukazovací zařízení, potom použijeme gpm v repeater módu. Jestliže máme PS/2 myš připojenou na /dev/psaux a USB myš (nebo USB myši) na /dev/usb/usbmouse0, potom následující příkaz bude ten správný: gpm -m /dev/usb/usbmouse0 -t imps2 -M -m /dev/psaux -t ps2 -R imps2. Poznámka: tento příkaz způsobí spojení dat z myšek na /dev/gpmdata, což je FIFO a nemusí být explicitně vytvořeno. Můžeme ho také použít jako zařízení typu myš pro neX-ové programy (také v xf86config pozn. překladatele).

Konfigurace klávesnice

Jestiže pracujeme na IBM-PC architektuře, nepotřebujeme podporu od jiného operačního systému pro zprovoznění USB klávesnice. Je také několik BIOSů jenž poskytují podporu pro USB klávesnici připojenou přímo ke kořenovému hubu na základní desce. Toto může, ale nemusí fungovat pro klávesnici připojenou k následujícím hubům a obyčejně nepracuje s přídavnými kartami. Potom musíte přidat podporu do kernelu vždy. Toto je také potřeba při spolupráci více operačních systémů, které (tak jako Linux) potřebují mít v BIOSu podporu vypnutu. Musíte přidat podporu, jestliže chcete využít klávesnice s "multimediálními" klávesami, tak jak je poskytují některé USB klávesnice.

Při kofiguraci kernelu, musíte zapnout tyto položky Keyboard support. Nezapínatpodporu pro USB HIDBP Keyboard support. Proveďte normální překlad a instalaci nového kernelu. Jestliže jste nastavili podporu jako moduly, potřebujete nahrát tyto moduly: hid.o, input.o a keybdev.o.

Prohlédněte si kernel logy pro zjištění, že vaše klávesnice je správně rozpoznána kernelem.

A nyní, můžete provozovat vaši USB klávesnici jako normalní klávesnici. Buďte si vědomi, že LILO není schopno s USB pracovat, a tak jestliže váš BIOS nepodporuje USB klávesnici, tak není možno při startu zvolit jiné jádro než přednastavené. Já používám výhradně USB klávesnici (a USB myš) a nemám žádné problémy.

Podpora pro USB Joystik a Gamepad

Při kofiguraci kernelu, musíte zapnout tyto položky Joystick support. Tímto přestane standartní joystik pracovat. Proveďte normální překlad a instalaci nového kernelu. Jestliže jste nastavili podporu jako moduly, potřebujete nahrát tyto moduly: hid.o, input.o and joydev.o.

Dále je potřeba přidat nód zařízení pro USB joystik. Je na uživateli kde vytvoří zápis pro USB zařízení v /dev/usb/ adresáři. Použijeme následující příkazy:

mknod /dev/input/js0 c 13 0
mknod /dev/input/js1 c 13 1
mknod /dev/input/js2 c 13 2
mknod /dev/input/js3 c 13 3

Jestliže připojíme joystik nebo gamepad a zadáme cat /dev/usb/usbmouse0 tak uvidíme nějaké bizarní znaky při pohybu páky nebo stisku tlačítek.

Nyní je možno USB joystick nebo gamepad používat ve hrách a nebo dalších kompatibilních aplikacích.

USB Scanner Support

USB scanners do not have a common class specification, hence it is not possible to make a device driver that works for all scanners. Not withstanding this, Linux USB does have a generic scanner driver that provides the communication link between the device and user space.

In addition to the generic scanner interface, there is also a specific driver for the Microtek X6 USB, and similar scanners such as the Phantom 336CX, Phantom C6 and ScanMaker V6USL. Only the X6 is well supported.

Generic Scanner Driver

The USB Scanner driver is capable of supporting just about any scanner. However meaningful output depends on the availability of a suitable user space tool, such as SANE, see http://www.mostang.com/sane.

If your scanner is not automatically associated with the scanner driver, you have two options. The first option is to edit the source code for the scanner driver - I assume that if you can do this, you won't need any instructions. The second option is to use modules, and to load the module with the vendor and product IDs specified as module options: insmod scanner.o vendor=0xXXXX product=0xYYYY, where XXXX is the hexadecimal vendor ID code, and YYYY is the hexadecimal product ID code, which you can extract from the contents of /proc/bus/usb/devices when you have the scanner plugged in.

You need to create an appropriate device file entry, using commands (as root) like the following:

mknod /dev/usb/scanner0 c 180 48
chmod a+rw /dev/usb/scanner0

To use the scanner device, you will need a suitable tool. SANE is strongly recommended. If you don't already have it installed or your installation is old, you will need to retrieve the package from the closest of the sites referenced at http://www.mostang.com/sane/source.html.

For instructions on building and installing SANE, refer to the various README files within the SANE distribution, and more detailed instructions for specific scanners that are provided later in this document.

Microtek X6USB Scanner Driver

The Microtek scanner driver presents the scanner as a generic SCSI device, which is probably /dev/sg0 unless you have some other device that uses the SCSI generic device interface.

In addition to selecting the Microtek X6USB scanner support entry in USB support, you also need to select SCSI generic support under SCSI support.

You need a very recent SANE release (1.0.3) or later to use this driver. If you don't already have it installed or your installation is old, you will need to retrieve the package from the closest of the sites referenced at http://www.mostang.com/sane/source.html.

For instructions on building and installing SANE, refer to the various README files within the SANE distribution, and more detailed instructions for specific scanners that are provided later in this document.

USB Audio Support

USB audio systems such as speakers normally comply with the USB audio class specification. If your audio device does not comply with the specification, it will not work with Linux at this time.

You need to turn on the Sound card support kernel option, which is in the Sound section. You will then be able to turn on the USB Audio support option in the normal USB section.

If you elected to use modules, you need to load the module called audio.o.

You can test your installation by dumping some random data out to the audio interface, using a command like cat /bin/bash > /dev/dsp. USB audio is integrated into the normal Linux sound architecture, and most tools should work fine with USB speakers. See the Sound HOWTO for more details and suggestions.

USB Modem Support

USB modems (for plain old telephone service, ISDN or cable) are supposed to conform to the Communication Device Class (CDC) specification, and usually to the Abstract Control Model (ACM) sub-class. If your modem doesn't comply with the specification, it will not work with this driver.

You need to select the USB Modem (CDC ACM) support kernel option. If you build as modules, you need to install the acm.o option.

You need to set up the device node entries for the various modems. You can use up to 32 modems with this driver. Use the following commands to set up the first four:

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

You should now be able to use a terminal emulator program to attach to this device and connect to your modem or other terminal device. Apparently this driver is working quite well, but I have not personally tested it.

Printer Support

You need to set up a device node entry for the printer. Use the following command:

mknod /dev/usb/lp0 c 180 0

Different printer tools are installed with various different rights, and this may affect the access priviledges that you need with the device entry. It is normally correct to make /dev/usb/lp0 rights the same as /dev/lp0, using the chmod, chown and chgrp commands.

You should now be able to use this device in a normal /etc/printcap entry. I recommend use of automated tools to generate such files, such as RedHat's control panel print-tool.I find this driver to be pretty good, although perhaps a bit slow.

If this does not appear to work, check that you have actually loaded the module, and double-check the /etc/printcap entry - especially that the device file matches the one you just created. Also note that some printers require special control characters to be sent to the printer to get the USB interface to be made operational. This is printer specific.

USB Cameras

Under Linux, USB cameras use the Video4Linux interface. You need to set up a device node entry for the USB camera. Use the following command, if you have no other Video4Linux devices:

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

To use the device, you need some video tools. There are a fairly wide range of tools available. http://www.thedirks.org/v4l2 has a package that is a generally named something like apps20000611.tgz, depending on the date of release. It has both X and text-mode tools. Using the text mode tools will allow you to do things like

./vctrl 320x240x24
./vcat | rawtoppm -bgr 320 240 | xv -
These tools default to using /dev/video if not otherwise specified, hence the symbolic link made previously.

There are other suitable tools available. Links to some of these tools are provided in the Linux USB web site at http://www.linux-usb.org.

USB CPiA Camera support

This driver supports a certain chipset made by Vision, and used in a range of USB cameras (notably the Creative WebCamII). To make the CPiA camera driver work, you need to select Video For Linux (under Multimedia devices), and then select CPiA Video For Linux and CPiA USB Lowlevel Support options within the Video For Linux.

USB OV511 Camera support

This driver supports a certain chipset made by OmniVision, and used in a range of USB cameras (notably the Creative WebCam III). To make the OV511 driver work, you need to select Video For Linux support (under Multimedia devices and USB OV511 Camera support under USB support.

USB IBM (Xirlink) C-it Camera support

This driver supports the Xirlink C-it cameras, also sold by IBM. To make the OV511 driver work, you also need to select Video For Linux support (under Multimedia devices and USB IBM (Xirlink) C-it Camera support

Mass Storage Devices

The mass storage device driver can potentially be used with a wide a wide range of USB devices, not all of which would normally be considered to be mass storage. This is because the driver is really an interface between the USB stack and the SCSI layer. Despite this, the instructions in this section are oriented around devices like USB floppy drives, Zip drives, LS120 drives and USB CDROMs.

Since the mass storage driver presents the USB device as a SCSI device, you need to turn on SCSI support, which is under SCSI support in the configuration script. You should also turn on subordinate options as appropriate to your mass storage device - usually one or more of SCSI disk support, SCSI tape support, SCSI CD-ROM support and SCSI generic support.

After you have compiled the kernel and rebooted (or added the relevant modules, which is usb-storage.o), you should check /proc/scsi/scsi. Information about your device should be listed.

You can now mount your device. The exact syntax depends on the device type. The best way is to make suitable entries in /etc/fstab. A suitable entry for a floppy disk would be:

/dev/sda /mnt/usbfd auto noauto,user 0 0

A suitable entry for a Zip disk would be:

/dev/sda4 /mnt/usbzip vfat noauto,user 0 0

A suitable entry for a CDROM disk would be:

/dev/scd0 /mnt/usbcdrom iso9660 ro,noauto,user 0 0

A suitable entry for a hard disk with a single partition would be:

/dev/sda1 /mnt/usbhd ext2 defaults 1 2

Note that the above entries assume you have no other SCSI devices. If you do have other devices, then the USB disk may not be /dev/sda, but could instead be /dev/sdb, /dev/sdc or some other device. You would then need to substitute the right device entry for /dev/sda or /dev/scd0 in the entries above.

Having created the entr[y/ies] in /etc/fstab, you need to create matching mount point[s] in the actual filesystem. So if you made an entry as shown above for the USB floppy disk, then the mount point would be made (as root) by:

mkdir /mnt/usbfd

You should now be able to mount your floppy disk with a command like:

mount /mnt/usbfd or like: mount /dev/sda

 
About Us | Site Map | Privacy Policy | Contact Us | ©2003 Company Name