Stefan Warmuth - luga.de · sdcc Einleitung USB für Einsteiger USB allgemein Linux und USB Kernel...

120
Stefan Warmuth, 27.03.2004 Linux und USB – p. 1 3. Augsburger Linux-Infotag 2004 Linux und USB Stefan Warmuth luga http://www.luga.de http://www.e-enthusiast.de

Transcript of Stefan Warmuth - luga.de · sdcc Einleitung USB für Einsteiger USB allgemein Linux und USB Kernel...

Stefan Warmuth, 27.03.2004 Linux und USB – p. 1

3. Augsburger Linux-Infotag 2004

Linux und USB

Stefan Warmuthluga

http://www.luga.de

http://www.e-enthusiast.de

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 2

Einleitung

Es sind zwei Vorträge zum Thema Linux und USB vorgesehen■ USB für Einsteiger

◆ ein wenig Hintergrundwissen zu USB und USB mit Linux◆ gängige USB- Geräte unter Linux◆ Werkzeuge und Wege bei Problemen

■ Basteln mit USB und Linux für Fortgeschrittene◆ Funktionsprinzip von USB◆ Treiber◆ sdcc

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 3

USB für Einsteiger

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 4

USB allgemein

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 5

Geschichtliches

■ 1994 spezifizierte eine Allianz von Compaq, Intel, Microsoft,NEC den Universal Serial Bus (USB)

■ 1996 wurde die Version 1.0 verabschiedet■ 1998 folgte Version 1.1■ 2000 wurde die zur Zeit aktuelle Version 2.0 herausgegeben

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 6

Ziele

■ einfach zu verwendendes System um Computer Peripherieanzuschließen

■ hotplug fähig■ leicht erweiterbar■ soll das Ressourcen Problem lösen (Interrupts)■ geringe Kosten

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 7

Aufbau

■ hierarchisches System■ Master/Slave Protokoll■ die Initiative geht immer vom Host aus■ Verteilung erfolgt über Hubs

[1]

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 8

Daten

■ Geschwindigkeiten◆ Low-Speed 1,5 Mb/s (Mega Bit!)◆ Full-Speed 12 Mb/s◆ High-Speed 480 Mb/s

■ max. 127 Geräte an einem Host

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 9

“Elektrisches“

■ 5V Spannungsversorgung über USB Kabel■ selfpowered / buspowered Devices■ ein USB Port kann max. 500mA liefern■ ein USB Port muss min. 100mA liefern■ Kabellänge für Low-Speed max. 3m

einfachere Kabel, immer fest “angewachsen“■ Kabellänge für High/Full-Speed max. 5m (Laufzeit)

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 10

Host Controllers

In der PC- Welt gibt es hauptsächlich drei Kategorien von HostControllern.■ USB 1.1

◆ UHCI■ von Intel (PIIX4, VIA, ...)■ “simplere“ Hardware■ komplexerer Treiber

◆ OHCI■ von Compaq (NEC, iMacs, OPTi, SiS, ALi, NEC, ...)

■ USB 2.0◆ EHCI

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 11

Linux und USB

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 12

Kernel Module Host

Die Kernel Module für das USB Host System■ Kernel 2.4.x

◆ usbcore◆ usb-uhci bzw. uhci.o oder usb-ohci◆ ehci-hcd (zusätzlich)

■ Kernel 2.6.x◆ usbcore◆ uhci-hcd, ohci-hcd◆ ehci-hcd (zusätzlich)

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 13

Kernel Module

Eine lsmod Ausgabelogic:/# lsmod | grep usbusb-storage 124176 0 (unused)usb-ohci 19272 0 (unused)usb-uhci 23600 0 (unused)usbcore 63820 1 [usb-storage \

scanner audio hid ehci-hcd pegasus \usb-ohci usb-uhci]

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 14

usbdevfs

Für den “User Space“ Zugriff auf das USB System dient das“usbdevfs“ bzw. “usbfs“Hierüber können Informationen über das USB Systemabgerufen werden aber auch auf USB Geräte zugegriffenwerden.logic:/# mount/dev/hde9 on / type reiserfs (rw)...usbfs on /proc/bus/usb type usbfs (rw)...

geg. in die “/etc/fstab“ eintragenusbdevfs /proc/bus/usb usbdevfs noauto 0 0

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 15

Devices

Um alle verfügbaren USB Geräte und deren Verwendung unterLinux vorzustellen würde zum einen den zeitlichen Rahmender Veranstaltung sprengen zum anderen ist der Referent auchnicht in der Lage dies zu tun. Es werden deshalb nur einigegängige Geräte und Geräte Klassen vorgestellt. Nachdem dasimmer noch eine beachtliche Menge ist und dem Referentenkein “Schrank voll“ USB Geräten zur Verfügung steht kanndeshalb teilweise nicht auf eigene Erfahrungen zurückgegriffenwerden. Somit müssen einige Themen ungeprüft aus denDokumentationen und Informationen aus dem Internetweitergegeben werden. Eine weiter Problematik ist diedistributionsabhängige Handhabung von Konfigurationen undHotplug Abläufen. Hier muss auf die Dokumentation derDistributionen verwiesen werden.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 16

Devices

Der Zugriff auf USB Devices geschieht entweder über KernelModule oder über das usbdevfs mittels der User SpaceBibliothek libusb. Das hängt von den USB Geräten ab. MancheUSB Geräte wie z. B. USB- Speicher- Sticks gehören USB-Klassen an und werden unabhängig vom Hersteller über eineinziges Kernel- Modul angesprochen (z. B. usb-storage).

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 17

hotplug

Idealerweise sollten sich, bei den heutigen modernenDistributionen, die benötigten Kernelmodule sowohl für dieHost Controller als auch für die USB- Devices automatischladen. Grundvoraussetzung sind:■ Kernel mit Hotplug- Fähigkeit■ installiertes “hotplug packet“

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 18

hotplug

Hotplug muss folgende Aufgaben erfüllen■ einen passenden Treiber finden und laden■ den Treiber mit den Gerät verbinden■ andere Subsysteme informieren bzw. starten

z. B. Firmware in das USB Device laden oder USBFestplatten mounten

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 19

hotplug

Wird ein neues USB Device angesteckt wird vom Kernel einEvent generiert und ein User Space Helper aufgerufen.logic:/# cat /proc/sys/kernel/hotplug/sbin/hotplug

Die Konfigurationsdateien befinden sich hier:logic:/# ls /etc/hotplugblacklist usb.distmap usb.handmapusb.rc usb.usermapusb usb.agent

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 20

hotplug

Konfigurationsdateien■ blacklist

hier kann hotplug für bestimmte Module verhindert werden■ usb.rc

Script beim Init-V-Runlevel-Wechsel aufgerufen wird■ usb.agent

Script das bei Veränderungen am USB aufgerufen wird

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 21

hotplug

Konfigurationsdateien■ /lib/modeles/version/modules.usbmap bzw. usb.distmap

(2.2.x)Liste mit Device↔ Modul Zuordnung, wird mit depmod -aerzeugt

■ usb.handmapListe mit Device↔ Modul Zuordnung, kann auch erweitertwerden

■ usb.usermapListe mit Device↔ Modul Zuordnung, meist leer

■ usb/modulnameScripte zu den Modulen

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 22

hotplug ...map

■ usb module■ match_flags■ idVendor■ idProduct■ bcdDevice_lo■ bcdDevice_hi■ bDeviceClass■ bDeviceSubClass■ bDeviceProtocol■ bInterfaceClass■ bInterfaceSubClass■ bInterfaceProtocol■ driver_info

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 23

hotplug

/* bitmap values taken from include/linux/usb.h */#define USB_DEVICE_ID_MATCH_VENDOR 0x0001#define USB_DEVICE_ID_MATCH_PRODUCT 0x0002#define USB_DEVICE_ID_MATCH_DEV_LO 0x0004#define USB_DEVICE_ID_MATCH_DEV_HI 0x0008#define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200#define USB_DEVICE_ID_MATCH_DEVICE

(USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)#define USB_DEVICE_ID_MATCH_DEV_RANGE

(USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION

(USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 24

hotplug

Was tun wenn ein USB Device von hotplug ignoriert wird?■ Vendor und Produkt ID herausfinden■ zugehöriges Modul herausfinden geg. besorgen, kompilieren■ vielleicht löst ein Lauf von depmod -a das Problem■ hotplug entsprechend händisch konfigurieren

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 25

hotplug

Beispiel: Der Prototyp eines TFT LCD USB Displays mit selbstgeschriebenen Treiber wird von hotplug ignoriert.nbook:~# lsusbBus 002 Device 001: ID 0000:0000Bus 001 Device 001: ID 0000:0000Bus 001 Device 007: ID 0547:1002 Anchor Chips, Inc.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 26

hotplug

nbook:~# tail /etc/hotplug/usb.handmap...# ImageLinkdd_lou 0x0003 0x0547 0x1002 0x0000 0x0000 0x00

0x00 0x00 0x00 0x00 0x00 0x00000000

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 27

hotplug

Als kleine Spielerei soll hotplug automatisch ein Bild auf dasDisplay laden.#!/bin/bash/bin/cat /home/stefan/LoU/pix/test_tux.bin > /dev/usb/ lou0

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 28

USB Geräte

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 29

USB Geräte

Wie bereits angesprochen können nicht alle erdenklichen USBGeräte und deren Betrieb unter Linux vorgestellt werden.Dennoch soll eine Auswahl der gängigsten USB Geräte diemeisten Anwendungsfälle abdecken.Auf folgende Geräte wird eingegangen■ Maus und Keyboard (Joysticks)■ Scanner■ Drucker■ USB- Sticks, USB- Festplatten und Brenner■ Digital Kameras■ Modem, ISDN, DSL

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 30

HID

Unter Human Interface Device (HID) versteht man EingabeGeräte wie Mäuse, Tastaturen, Joysticks, ...Für diese Geräte gibt es folgende Module■ hid■ usbmouse■ keyboardZudem sollte das Linux Input System geladen sein

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 31

HID und Input

Das Input System soll die Nutzung der verschiedenenEingabegeräte ermöglichen, vereinheitlichen undvereinfachen. Folgende Module sind dafür verantwortlich■ evdev■ input■ joydev■ keybdev■ mousedevlogic:/# ls /dev/input/event0 event2 js0 js2 mice mouse1 mouse3event1 event3 js1 js3 mouse0 mouse2

logic:/# lsmod | grep inputinput 3488 0 [mousedev hid usbmouse evdev]

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 32

HID und Input

Um die Maus mit dem XServer zu Nutzen sollte folgendes indie XF86Config eingetragen werden. Natürlich bieten diemeisten Distributionen Hilfsmittel.logic:/# cat /etc/X11/XF86Config-4...Section "InputDevice"

Identifier "Configured Mouse"Driver "mouse"Option "CorePointer"Option "Device" "/dev/input/mice"Option "Protocol" "ImPS/2"Option "ZAxisMapping" "4 5"

EndSection...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 33

Scanner

Scanner werden mit SANE - Scanner Access Now Easybetrieben. Dabei werden die Eigenarten der unterschiedlichenScanner in Bibliotheken den “backends“ ausgelagert. DerZugriff auf die USB Scanner kann auf unterschiedliche Artenerfolgen:■ Kernel Module

scanner, microtek, hpusbscsi■ usbdevfs mit libusbFalls die Distribution keine grafische Konfiguration anbietetfindet man die Konfigurationsdateien in /etc/sane.d/

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 34

Scanner

Beispiel Konfiguration Epson 1240 Scanner.Erstmal backend “freigeben“:stefan@stefan:/etc/sane.d$ cat dll.conf# /etc/sane.d/dll.conf - Configuration file for the \

SANE dynamic backend loader...# enable the next line if you want to allow access \

through the network:net#canon_ppepsonfujitsu...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 35

Scanner

Beispiel Konfiguration Epson 1240 Scanner.Konfiguration des backends:stefan@stefan:/etc/sane.d$ cat epson.conf# epson.conf#...usb /dev/usb/scanner0

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 36

Scanner

Beispiel Konfiguration Epson 1240 Scanner.Netzwerkfreigabe:stefan:/etc/sane.d# cat saned.conf# saned.conf...# NOTE: /etc/inetd.conf (or /etc/xinetd.conf) and# /etc/services must also be properly configured to start# the saned daemon as documented in saned(1), services(4)# and inetd.conf(4) (or xinetd.conf(5)).logicisanbook

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 37

Scanner

Nützliche Toolsstefan:~# sane-find-scanner

# No SCSI scanners found....found USB scanner (vendor=0x04b8, product=0x010b) at \

/dev/usb/scanner0# Your USB scanner was detected.

...

stefan:~# scanimage -Ldevice ‘epson:/dev/usb/scanner0’ is a Epson \

Perfection1240 flatbed scanner

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 38

Scanner

Grafisches Frontend “xsane“

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 39

Scanner

Grafisches Frontend “kooka“

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 40

Drucker

Für USB Drucker gibt es auch einen USB Klassen Treiber“printer“.Die USB Drucker sind damit über “/dev/usb/lpX“ ansprechbar.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 41

USB- Sticks, HD, CD/DVD/Brenner

Für USB- Speicher- Sticks, USB- Festplatten, USB- DC/DVD-Laufwerke/Brenner gibt es auch einen USB Klassen Treiber“usb-storage“ das Treiber Modul für USB Massenspeicher.Diese funktionieren dann wie SCSI- Geräte. Dies istnaheliegend da das USB- Mass- Storage- Devices- Protokolldem SCSI- Protokoll angelehnt ist.Die Speicher Geräte könne dann über “/dev/sdXY“ z. B.“/dev/sda1“ die CD/DVD Laufwerke über “/dev/scdY“gemountetwerden. Das “X“ ist für die Reihenfolge der angeschlossenenGeräte das “Y“ für die Partition. Da die USB Geräte normal nurüber eine Partition verfügen ist “sdY1“ meist der richtigeEintrag. Schwieriger ist das mit der Reihenfolge.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 42

USB- Sticks, USB- HD, Brenner

Um herauszufinden ob “sda“, “sdb“ ... bzw. “scd0“, “scd1“ ...muss man hinter die Kulissen des SCSI Systems schauen.Dies geht über:■ KDE Infozentrum■ /proc/scsi/scsi

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 43

USB- Sticks, USB- HD, Brennern

KDE Infozentrum

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 44

USB- Sticks, USB- HD, Brenner

logic:/usr/src/linux-2.4.25-rc1# cat /proc/scsi/scsiAttached devices:Host: scsi0 Channel: 00 Id: 04 Lun: 00

Vendor: PLEXTOR Model: CD-ROM PX-20TS Rev: 1.00Type: CD-ROM ANSI SCSI revision: 02

Host: scsi1 Channel: 00 Id: 00 Lun: 00Vendor: HL-DT-ST Model: DVDRAM GSA-4081B Rev: A100Type: CD-ROM ANSI SCSI revision: 02

Host: scsi2 Channel: 00 Id: 00 Lun: 00Vendor: Konica Model: KD-420Z Rev: 1.00Type: Direct-Access ANSI SCSI revision: 02

Host: scsi3 Channel: 00 Id: 00 Lun: 00Vendor: Polaroid Model: Digital Camera Rev: 1.00Type: Direct-Access ANSI SCSI revision: 02

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 45

USB- Sticks, USB- HD, Brenner

Entsprechend der angezeigten Reihenfolge sind die Geräte“sda“, “sdb“ ... bzw. “scd0“, “scd1“ ... . Die Unterscheidung obes sich um ein Speicher Gerät oder CD/DVD handelt sieht manam Type.Über z. B. “mount /dev/sda1 /mnt/usb-storage“ lassen sich dieGeräte mounten. Verwendet man die Geräte häufiger solltenEinträge in die “/etc/fstab“ gemacht werden und vielleicht Iconsauf dem Desktop erstellt werden (bei KDE rechte Maustaste).stefan@logic:~$ cat /etc/fstab.../dev/hde9 / reiserfs defaults 0 0.../dev/sda1 /mnt/usb-storage auto noauto,user 0 0...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 46

USB- Sticks, USB- HD, Brenner

Automatische Desktop Icons:Hierfür gibt es keinen einheitlichen Weg.Bei SuSE scheint das der “suseplugger“ zu erledigen beiKnoppix “hotplug-knoppix“ und “scanpartitions“.Hier muss man sich auf seine Distribution verlassen oderselber experimentieren.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 47

Digital Kameras

Digital Kameras werden auf unterschiedliche Artenangesprochen. Viel verhalten sich wie die USBMassenspeicher und werden wie die bereits angesprochenenUSB- Speicher- Sticks behandelt.Daneben verwenden viele Kameras auch ein Protokoll namensPTP (Picture Transfer Protocol). Leider gibt es noch eine ReiheHersteller bzw. Kamera spezifischer Protokolle. Hierfür und fürPTP Geräte kommt gphoto zum Einsatz. Der Zugriff erfolgtüber “usbdevfs“ mit der libusb. Für manche Kameras gibt esauch Kernel Module. Diese sollten nicht geladen sein da diesegphoto blockieren.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 48

Digital Kameras

Ob eine Kamera unterstützt wird kann über die Homepage inErfahrung gebracht werden oder mit:logic:/# gphoto2 --list-camerasNumber of supported cameras: 434Supported cameras:

"AEG Snap 300""Agfa ePhoto 1280"...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 49

Digital Kameras

Als grafische Frontends gibt es “digikam“ und “gtkam“.Über die Konfigurationsmenüs lässt sich ebenfallsherauskriegen ob eine Kamera unterstützt wir.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 50

Digital Kameras

digikam

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 51

Modem, ISDN, DSL

Für USB- Modem, ISDN-, DSL- Adapter gibt es auch einenUSB Klassen Treiber “acm“.Die USB Drucker sind damit über “/dev/usb/ttyACMX“ bzw.“/dev/ttyACMX“ ansprechbar.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 52

Troubleshooting

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 53

Troubleshooting

Was kann man tun wenn ein USB Gerät nicht will?Leider gibt es kein Patentrezept, deshalb:■ Informationen einholen■ Im Internet suchen■ Foren und Mailinglisten besuchen

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 54

usbdevfs

Um Informationen über das USB System zu bekommen sollteunbedingt das usbdevfs gemountet sein. Ist dies nicht der Falltut man sich schwer. Außerdem könnte das bereits dieFehlerursache sein da verschiedene Applikationen undSubsysteme usbdevfs benötigen.logic:/# mount...usbfs on /proc/bus/usb type usbfs (rw)...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 55

usbview

usbview ist ein grafisches Frontend zum usbdevfs. Damitlassen sich bequem einige Informationen abrufen.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 56

KDE Infozentrum

Ähnlich wie usbview gehts auch mit dem KDE Infozentrum.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 57

usbutils

usbmodules:Damit kann man herausfinden welches Modul für ein USBDevice zuständig ist. Setzt allerdings vorraus das ein solchesModul auf den System existiert.logic:/# usbmodules -d /proc/bus/usb/002/003pegasus

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 58

usbutils

lsusb:Zeigt die Devices die am USB angeschlossen sind. Mit lsusb -vauch etwas ausführlicher.logic:/# lsusbBus 003 Device 001: ID 0000:0000Bus 002 Device 001: ID 0000:0000Bus 001 Device 001: ID 0000:0000Bus 001 Device 002: ID 046d:c001 Logitech, Inc. N48/M-BB48

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 59

usbutils

logic:/# lsusb -v...Bus 001 Device 002: ID 046d:c001 Logitech, Inc. N48/M-BB48Device Descriptor:

bLength 18bDescriptorType 1bcdUSB 1.00bDeviceClass 0 (Defined at Interface level)bDeviceSubClass 0bDeviceProtocol 0bMaxPacketSize0 8idVendor 0x046d Logitech, Inc.idProduct 0xc001 N48/M-BB48 [FirstMouse Plus]bcdDevice 4.00iManufacturer 1 LogitechiProduct 2 N48

...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 60

modinfo

modinfo:Die Umkehrung von usbmoduleslogic:~# modinfo /lib/modules/2.4.25-rc1/kernel/drive rs/usfilename: /lib/modules/2.4.25-rc1/kernel/drivers/usb /pedescription: "Pegasus/Pegasus II USB Ethernet driver"author: "Petko Manolov <[email protected]>license: "GPL"parm: loopback int, description "Enable MAC loopbackparm: mii_mode int, description "Enable HomePNA mode

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 61

/proc/bus/usb

Man kann natürlich auch das usbdevfs direkt bemühen. z. B.logic:~# cat /proc/bus/usb/devices...T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=P: Vendor=046d ProdID=c001 Rev= 4.00S: Manufacturer=LogitechS: Product=N48C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 26mAI: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=us bmouseE: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms...

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 62

/var/log/messages

Ein Blick in “/var/log/messages“ kann auch weiterhelfen.logic:/# tail -n 150 /var/log/messages | grep usb... kernel: usb.c: registered new driver usbdevfs... kernel: usb.c: registered new driver hub...... kernel: usb.c: new USB bus registered, assigned bus numb er... kernel: usb-uhci.c: v1.275:USB Universal Host Control ler... kernel: usb-ohci.c: USB OHCI at membase 0xd0ced000, IRQ... kernel: usb-ohci.c: usb-02:06.0, NEC Corporation USB...... kernel: usb.c: registered new driver usbmouse... kernel: input0: Logitech N48 on usb1:2.0... kernel: usbmouse.c: v1.6:USB HID Boot Protocol mouse... kernel: usb.c: registered new driver hiddev... kernel: usb.c: registered new driver hid

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 63

firmware

Manche USB Geräte benötigen eine Firmware die zum einenvom Treiber aber auch von hotplug in das Gerät geladenwerden kann. Hotplug benötigt hierfür weitere Programme z. B.fxload. Hier muss geprüft werden ob diese Programmevorhanden sind. Außerdem muss natürlich die Firmwarevorhanden sein.

● Einleitung

USB für Einsteiger

● USB allgemein

● Linux und USB

● Kernel Module Host

● usbdevfs

● hotplug

● USB Geräte

● HID

● Scanner

● Drucker

● Massenspeicher

● Digital Kameras

● Modem ISDN DSL

● Troubleshooting

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 64

Fragen???

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 65

Basteln mit USB und Linux fürFortgeschrittene

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 66

USB allgemein

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 67

Geschichtliches

■ 1994 spezifizierte eine Allianz von Compaq, Intel, Microsoft,NEC den Universal Serial Bus (USB)

■ 1996 wurde die Version 1.0 verabschiedet■ 1998 folgte Version 1.1■ 2000 wurde die zur Zeit aktuelle Version 2.0 herausgegeben

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 68

Ziele

■ einfach zu verwendendes System um Computer Peripherieanzuschließen

■ hotplug fähig■ leicht erweiterbar■ soll das Ressourcen Problem lösen (Interrupts)■ geringe Kosten

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 69

Aufbau

■ hierarchisches System■ Master/Slave Protokoll■ die Initiative geht immer vom Host aus■ Verteilung erfolgt über Hubs

[1]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 70

Daten

■ Geschwindigkeiten◆ Low-Speed 1,5 Mb/s (Mega Bit!)◆ Full-Speed 12 Mb/s◆ High-Speed 480 Mb/s

■ max. 127 Geräte an einem Host

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 71

“Elektrisches“

■ 5V Spannungsversorgung über USB Kabel■ selfpowered / buspowered Devices■ ein USB Port kann max. 500mA liefern■ ein USB Port muss min. 100mA liefern■ Kabellänge für Low-Speed max. 3m

einfachere Kabel, immer fest “angewachsen“■ Kabellänge für High/Full-Speed max. 5m (Laufzeit)

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 72

“Elektrisches“

Die maximale Kabelläge ist vor allem durch die Laufzeitbegrenzt.

[6]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 73

Host Controllers

In der PC- Welt gibt es hauptsächlich drei Kategorien von HostControllern.■ USB 1.1

◆ UHCI■ von Intel (PIIX4, VIA, ...)■ “simplere“ Hardware■ komplexerer Treiber

◆ OHCI■ von Compaq (NEC, iMacs, OPTi, SiS, ALi, NEC, ...)

■ USB 2.0◆ EHCI

Entsprechend sind die Linux Kernel Module zu laden.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 74

Bindung zum Device

Die Kommunikation zwischen Host und Devices läuft überEndpoints.

[6]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 75

Bindung zum Device

Es gibt unterschiedliche Arten von Endpoints bzw. derenTransferarten.

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 76

Transfer Arten

■ Control transfersfür kurze sichere Datenpakete.für die Konfiguration der Devicesjedes Device benötigt ein Minimum an Control Commands◆ GET_STATUS◆ CLEAR_FEATURE◆ SET_FEATURE◆ SET_ADDRESS◆ GET_DESCRIPTOR◆ SET_DESCRIPTOR◆ GET_CONFIGURATION◆ SET_CONFIGURATION◆ GET_INTERFACE◆ SET_INTERFACE

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 77

Transfer Arten

■ Bulk Transfersfür lange sichere Datenpaketeverwendet fast die gesammte Busbandbreitehat aber keine Priorität auf die Bandbreite

■ Interrupt Transfersist dem Bulk Transfer ähnlichwird periodisch gepolltmax. 90% Bandbreite zusammen mit Isochronous Transfers

■ Isochronous Transferssendet/empfangt Daten in EchtzeitDatenübertragung nicht sicherfür Audio und Videomax. 90 % Bandbreite zusammen mit Interrupt transfers

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 78

Transfer Arten

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 79

Bandbreite

[5]

[5]Low-Speed

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 80

Control transfer

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 81

Control transfer

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 82

IN transfer

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 83

OUT transfer

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 84

PING - NAK

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 85

frames

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 86

Descriptor

[8]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 87

Descriptor

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 88

Descriptor

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 89

Descriptor

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 90

Descriptor

[5]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 91

Descriptor

logic:/# lsusb -v...Bus 001 Device 002: ID 046d:c001 Logitech, Inc. N48/M-BB48Device Descriptor:

bLength 18bDescriptorType 1bcdUSB 1.00bDeviceClass 0 (Defined at Interface level)bDeviceSubClass 0bDeviceProtocol 0bMaxPacketSize0 8idVendor 0x046d Logitech, Inc.idProduct 0xc001 N48/M-BB48 [FirstMouse Plus]bcdDevice 4.00iManufacturer 1 LogitechiProduct 2 N48

...

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 92

Linux und USB

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 93

zwei Zurgriffsarten

Um auf USB Devices zuzugreifen gibt es zwei Möglichkeiten■ usbdevfs (libusb)■ Kernel TreiberDer Referent beschränkt sich auf die Kernel Treiber

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 94

Linux Kernel USB Subsystem

Das Linux USB Subsystem stellt eine API zur Verfügung diedie Treiberimplementierung unabhängig vom HostController macht.

[8]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 95

Linux USB Kernel Modul Treiber

Wird ein Kernel Modul geladen bzw. entladen werden diebekannten “init “ bzw. “exit “ Funktionen aufgerufen. Innerhalbdieser Funktionen wird der USB Treiber registriert bzw.abgemeldet.Da es sich bei USB Devices um Hotplug Geräte handelt findetdie Initialisierung in der “probe “ Funktion statt. Diese wirdaufgerufen wenn ein USB Device eingesteckt wird bzw. einvorhandenes Gerät noch keinen passenden Treiberzugeordnet hat und der neu geladene Treiber dafür zuständigist. Die Zuordnung erfolgt anhand der USB IDs. Wenn ein USBDevice abgesteckt wird räumt “disconnect “ auf.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 96

Linux USB Treiber

#include <linux/usb.h>

static struct usb_driver sample_usb_driver = {

name: "sample",

probe: sample_probe,

disconnect: sample_disconnect,

};

int init_module(void)

{

/* nur registrieren, gibt 0 oder einen Fehler-Code zurück */

return usb_register(&sample_usb_driver);

}

void exit_module(void)

{

usb_deregister(&sample_usb_driver);

}

[9]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 97

Beispiel ImageLink

[10]

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 98

Beispiel ImageLink

static struct usb_driver dd_lou_usb_driver = {name: "dd_lou",probe: dd_lou_probe,disconnect: dd_lou_disconnect,id_table: dd_lou_id_table,minor: DD_LOU_MINOR_BASE,fops: &dd_lou_file_operations,

};

Beim 2.6.x Kernel müssen die “file_operations“ mit der structusb_class_driver mit usb_register_dev() in der “probe“Funktion übergeben werden und mit usb_deregister() in“disconnect“ wieder entfernt werden.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 99

Beispiel ImageLink

static struct usb_device_id dd_lou_id_table [] = {

{ USB_DEVICE_VER(USB_VENDOR_ID_DD, USB_PROD_ID_DD_LOU, \

0x0000, 0x9999), driver_info: (unsigned long)"lou" },

{

0, /* no more matches */

}

};

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 100

Beispiel ImageLink

static void *dd_lou_probe(struct usb_device *udev, unsig ned int ifnum,

const struct usb_device_id *id)

{

...

if (interface->bNumEndpoints != 2) return NULL; // we have E P1 and EP2

...

Beim 2.6.x Kernel ist der erste Parameter vom Typ structusb_interface. Mit interface_to_usbdev(intreface) bekommtman wieder die struct usb_device.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 101

URB (USB Request Block)

Der Datentransfer zwischen Host und Device geschieht überURBs (USB Request Block).Das ist eine Datenstruktur die neben den Nutzdaten auchDevice- und Adress- Informationen enthält.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 102

URB (USB Request Block)

Eine Hilfsfunktion um einen URB für einen Bulk Transfer zufüllen. Weiter sind in usb.h zu finden.static inline void usb_fill_bulk_urb (struct urb *urb,

struct usb_device *dev,

unsigned int pipe,

void *transfer_buffer,

int buffer_length,

usb_complete_t complete,

void *context)

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 103

URB (USB Request Block)

Eine Hilfsfunktion um einen URB für einen Bulk Transfer zufüllen.

* usb_fill_bulk_urb - macro to help initialize a bulk urb

* @urb: pointer to the urb to initialize.

* @dev: pointer to the struct usb_device for this urb.

* @pipe: the endpoint pipe

* @transfer_buffer: pointer to the transfer buffer

* @buffer_length: length of the transfer buffer

* @complete: pointer to the usb_complete_t function

* @context: what to set the urb context to.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 104

Beispiel ImageLink

/* fill the URB data structure using the FILL_INT_URB macro * /

{

int pipe = usb_rcvintpipe(udev, endpoint1->bEndpointAdd ress);

int maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe));

if (maxp > sizeof(IntTransfer) )

maxp = sizeof(IntTransfer);

dd_lou->maxp = maxp; /* remember for later */

// ###sw1 macro deprecated

FILL_INT_URB(&dd_lou->irq_urb, udev, pipe, dd_lou->dat a, maxp,

dd_lou_irq, dd_lou, endpoint1->bInterval);

}

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 105

URB (USB Request Block)

Dann muss man den URB dem USB Subsystem nochunterbreiten (submiten).

int usb_submit_urb(struct urb *urb);

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 106

Beispiel ImageLink

submit eines Interrupt Transfers/* register the URB within the USB subsystem */

if ( (test = usb_submit_urb(&dd_lou->irq_urb) ) ) {

printk(KERN_WARNING "usbdd_lou: WARNING usb_submit_urb () %d faild\n",test);

kfree(dd_lou->send_buff);

minor_dd_lou[lou_dev_nr] = NULL;

kfree(dd_lou);

dd_lou = NULL;

goto bye;

}

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 107

Beispiel ImageLink

Die Callback Funktionstatic void dd_lou_irq(struct urb *irq_urb)

{

IntTransfer *trans_data;

struct dd_lou_device *dd_lou = irq_urb->context;

trans_data = (IntTransfer *)dd_lou->data;

...

if ( trans_data->error ){

D1(printk(KERN_WARNING "usbdd_lou: dd_lou_irq(): dd_lo u->error =0x%02x

dd_lou->error = trans_data->error;

}

...

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 108

URB (USB Request Block)

Da es sich bei dem Beispiel um einen Interrupt Transferhandelt der periodisch wiederholt wird muss der URB wenn ernicht mehr gebraucht wird wieder aus dem System entferntwerden.int usb_unlink_urb(struct urb *urb);

Beim 2.6.x Kernel gibt es einen weiteren Parameter der dieSpeicherreservierung regelt.

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 109

Beispiel ImageLink

static void dd_lou_disconnect(struct usb_device *udev, v oid *clientdata)

{

/* the clientdata is the dd_lou_device we passed originally */

struct dd_lou_device *dd_lou = (struct dd_lou_device *)cl ientdata;

..

usb_unlink_urb(&dd_lou->irq_urb);

...

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 110

URB (USB Request Block)

Eine andere Möglichkeit Daten auszutauschen ist:int usb_bulk_msg(struct usb_device *usb_dev, \

unsigned int pipe, void *data, int len, \int *actual_length, int timeout);

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 111

Beispiel ImageLink

static ssize_t dd_lou_write(struct file *filp , const char *buffer, size_t

loff_t *offp)

{

...

result = usb_bulk_msg(dd_lou->udev,

usb_sndbulkpipe(dd_lou->udev, 2),

send_buff, thistime, &partial, 10 * HZ);

...

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 112

URB (USB Request Block)

■ usb_bulk_msg()ist synchron

■ usb_submit_urb()ist asynchron

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 113

URB (USB Request Block)

Nachdem nun ganz nebenbei Interrupt und Bulk Transfervorgestellt wurden wirn nun anhand eines Beispiels einControl Transfer gezeigt.static int dd_lou_ioctl(struct inode *inode, struct file * filp, \

unsigned int cmd, unsigned long arg)

{...

case DD_LOU_IOC_Q_GET_BKL:

usb_control_msg(udev,usb_rcvctrlpipe(udev,0),VX_GET _BKL,0xc0,\

(__u16)arg,0x00,&dd_lou->ctrlret,0x02,HZ);

return dd_lou->ctrlret;

break;

...

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 114

Für Bastler

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 115

Cypress FX2

Um noch ein wenig Lust aufs Basteln zu machen ein paarWorte zum verwendetem USB- Microcontroller.■ Hersteller

Cypress http://www.cypress.com

■ Typ:CY7C68013

■ CPU:8051

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 116

Cypress FX2

Natürlich gibt es noch andere Microcontroller mit USBAnschluss. Der FX2 bzw. ein anderer der FX Familie bietetdem Bastler aber ein paar nette Eigenschaften■ High-Speed tauglich (FX2)■ über USB programmierbar■ befindet sich z. B. in Keyspan USB Serial Adaptern

(lässt sich hacken!!!)■ Dokumentation zum Download■ 8051 CPU läst sich mit sdcc programieren

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 117

sdcc

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

● USB allgemein

● Bindung zum Device

● Transfer Arten

● Bandbreite

● Control transfer

● IN transfer

● Descriptor

● Linux und USB

● USB Subsystem

● Linux USB Treiber

● URB

● Für Bastler

● Cypress FX2

● sdcc

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 118

Fragen???

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 119

Quellen

[1] Brad Hards, The Linux USB sub-system - Sigma BravoPty Ltd.,http://www.linux-usb.org/USB-guide/book1.html

[2] SANE - Scanner Access Now Easy,http://www.sane-project.org/

[3] USB - Universal Serial Bus,http://www.usb.org/home

[4] Linux USB Project, http://www.linux-usb.org/

[5] H.-J. Kelm (Hrsg.), USB 2.0 - Franzis Verlag, Poing, 2001

[6] Don Anderson, Universal Serial Bus SystemArchitecture, Addison Wesley, 2003

● Einleitung

USB für Einsteiger

Basteln mit USB und Linux

Quellen

Stefan Warmuth, 27.03.2004 Linux und USB – p. 120

Quellen

[7] gphoto, http://www.gphoto.org

[8] Detlef Fliegl, Programming Guide for Linux USB DeviceDrivers,http://wwwbode.cs.tum.edu/Par/arch/usb/usbdoc/usbdo c

[9] AlessandroRubini, Jonathan Corbet - Linux-Gerätetreiber, 2. Auflage,http://www.oreilly.de/german/freebooks/linuxdrive2g e

[10] Distec GmbH, ImageLink-50-USB,http://www.distec.de/