Konfiguracja urządzeń USB w Gentoo Linux
1.
Wprowadzenie
Co to jest USB?
USB to skrót od Universal Serial Bus (uniwersalna szyna szeregowa). Jest to
standard zewnętrznego interfejsu, który umożliwia komunikację między
komputerem, a innymi urządzeniami. Obecnie do najpopularniejszych urządzeń USB
zaliczają się klawiatury, myszki, karty pamięci, aparaty cyfrowe, zewnętrzne
napędy CD, nagrywarki DVD, drukarki oraz wiele innych urządzeń.
W użyciu są dwie wersje USB, tj. USB 1.1 i USB 2.0. Ze względu na zgodność z
poprzednimi wersjami USB 2.0 jest kompatybilne z USB 1.1. Najnowsze urządzenia
USB są zazwyczaj zgodne ze standardem USB 2.0. Złącze USB 2.0 pozwala na
transmisję z maksymalną prędkością 480 Mbps lub 60 Mbps. Jest to zasadnicza
różnica pomiędzy obydwoma standardami. Kolejną zaletę USB stanowi fakt, że
wszystkie urządzenia USB są typu hot-pluggable. Oznacza to, że po
podłączeniu nie musimy ponownie uruchamiać systemu, aby ich używać.
Spojrzenie techniczne
Zanim zajmiemy się dokładną konfiguracją kernela, warto przyjrzeć się trochę
bliżej samemu USB. Jeśli nie mamy na to czasu lub chcemy pominąć ten akapit, to
można przejść od razu do konfiguracji kernela.
Sieć USB posiada główny kontroler, huby, wśród których wyróżniamy główny
hub i może wspierać do 127 urządzeń USB, wliczając w to huby. Główny
kontroler jest niczym innym, jak interfejsem sprzętowym pomiędzy urządzeniem
USB i systemem operacyjnym. Istnieje kilka takich sprzętowych interfejsów (HCI
- Host Controller Interface), są to: OHCI (Open HCI) Compaq, UHCI (Universal
HCI) oraz EHCI (Enhanced HCI), obydwa Intela. OHCI/UHCI są przemysłowymi
standardami dla interfejsów USB 1.1, natomiast EHCI jest standardem dla USB
2.0.
Producent sprzętu dostarcza programistom interfejs, przez który system może
komunikować się ze sprzętem. Interfejs ten określany jest mianem HCD (Host
Controller Device). Właśnie przez ten interfejs urządzenia komunikują się z
oprogramowaniem systemowym. Poniższy diagram powinien ułatwić zrozumienie
zagadnienia.
Listing 1.1: Ogólna architektura USB |
+ ---- Sprzęt ---- + ---- Oprogramowanie ---- +
| | |
| [USB Dev] -+-> {EHCI} -+---> ( EHCD ) |
| | | | Użytkownik
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ---- Sprzęt ---- + ---- Oprogramowanie ---- +
|
Urządzenie USB może korzystać z własnego sterownika lub użyć jednego z już
dostępnych w systemie. Oparte jest to na pomyśle klasy urządzeń. Jeśli
urządzenie należy do pewnej klasy, to inne urządzenia należące do tej
samej klasy mogą korzystać z tego samego sterownika. Niektóre z tych
klas to np. USB HID (Human Interface Devices), która obejmuje urządzenia
sterujące takie jak klawiatury i myszki, klasa urządzeń USB masowego
składowania, która obejmuje karty pamięci, aparaty cyfrowe, odtwarzacze audio
itp. oraz klasa USB CDC (Communication Devices Class), która zawiera modemy USB
i podobne urządzenia.
Co znajduje się na naszej maszynie?
To czy nasza maszyna posiada USB 2.0 czy nie, łatwo sprawdzić. W tym celu
posłużymy się komendą lspci.
Uwaga:
Narzędzie lspci jest częścią pakietu sys-apps/pciutils. Jeśli nie
zainstalowaliśmy tego pakietu, to wykonujemy emerge pciutils. Należy
zaznaczyć, że z komendy lspci korzystamy z konta użytkownika root.
|
Listing 1.2: Różne efekty wywołania lspci |
# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
00:1d.0 USB Controller: Intel Corp. 82801DB USB (Hub #1) (rev 01) (prog-if 00 [UHCI])
00:1d.1 USB Controller: Intel Corp. 82801DB USB (Hub #2) (rev 01) (prog-if 00 [UHCI])
00:1d.2 USB Controller: Intel Corp. 82801DB USB (Hub #3) (rev 01) (prog-if 00 [UHCI])
00:1d.7 USB Controller: Intel Corp. 82801DB USB EHCI Controller (rev 01) (prog-if 20 [EHCI])
|
Używając komendy lspci możemy sprawdzić czy system wspiera USB 2.0. Może
być to użyteczne, gdy będziemy włączać odpowiednie opcje w kernelu.
2.
Konfiguracja kernela
Pobieranie kernela
Na początku pobieramy wybrane źródła kernela. W podręczniku korzystamy z
gentoo-sources. Więcej informacji o krenelach dostępnych w Portage
można znaleźć w przewodniku po kernelu w
Gentoo Linux.
Listing 2.1: Pobieranie źródeł kernela |
# emerge gentoo-sources
|
Zabieramy się do konfiguracji kernela.
Listing 2.2: Przejście do źródeł |
# cd /usr/src/linux
# make menuconfig
|
Uwaga:
W powyższym przykładzie zakładamy, że dowiązanie symboliczne
/usr/src/linux wskazuje na źródła kernela, które chcemy
wykorzystać. Przed rozpoczęciem musimy się upewnić, że faktycznie tak jest.
|
Konfiguracja jądra
Teraz musimy przyjrzeć się opcjom konfiguracyjnym, które należy włączyć w
kernelu, aby zapewnić prawidłowe wsparcie dla naszych urządzeń USB.
Uwaga:
Przykłady zawarte w tym przewodniku zawierają opcje podstawowego wsparcia dla
USB, a także dla powszechnie używanych urządzeń, np. urządzenia masowego
składowania danych (większość aparatów i kart pamięci USB). W przypadku
posiadania nietypowego urządzenia, które wymaga konfiguracji, zalecamy zapoznać
się z podręcznikiem dołączonym do urządzenia albo poszukać informacji w sieci o
tym czy urządzenie jest obsługiwane przez kernel lub czy istnieją dedykowane
sterowniki, z których możemy skorzystać. W przykładach, dla uproszczenia,
wsparcie dla USB zostało wkompilowane w kernel. Jeśli chcemy posiadać modularny
kernel, to musimy odpowiednio dostosować pliki konfiguracyjne i pamiętać o
różnych modułach.
|
Listing 2.3: Opcje make menuconfig |
Device Drivers --->
SCSI device support --->
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
USB support --->
<*> Support for Host-side USB
[*] USB device filesystem
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support
USB Network Adapters --->
<*> USB RTL8150 based ethernet device support (EXPERIMENTAL)
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
Posiadacze urządzeń USB takich jak klawiatury, myszki, joysticki czy inne
urządzenia wejścia muszą włączyć w jądrze obsługę HID. W tym celu należy wrócić
do pozycji "Device Drivers" i zaznaczyć poniższe ustawienia:
Listing 2.4: Włączania obsługi HID |
Device Drivers --->
[*] HID Devices --->
|
Wszystkie opcje zostały ustawione. Teraz możemy zbudować kernel i wsparcie dla
USB powinno funkcjonować po uruchomieniu systemu z nowym kernelem. Następny etap
prac to oglądanie USB w akcji.
3.
Oglądanie USB w akcji
dmesg naszym przyjacielem!
Nadszedł czas, by zacząć zabawę z urządzeniami USB :) Rozpocznijmy więc. W
bieżącym rozdziale zobaczymy jak system odpowiada na różne urządzenia USB.
Zaczniemy od podłączenia 512MB karty pamięci USB (ang. memory stick/pen drive).
Można tez użyć podobny urządzeń do masowego składowania danych. Na początku
użyjemy polecenia dmesg, by zobaczyć reakcję systemu na podłączenie
urządzenia.
Uwaga:
dmesg zazwyczaj dostarcza wielu informacji pochodzących z bufora
przestrzeni jądra. Są tam zawarte wszystkie informacje ze startu systemu. Część
z nich możemy pominąć i odszukać te, które nas interesują. W naszych
przykładach wynik działania polecenia dmesg zawiera tylko istotne
fragmenty oraz dodatkowe znaki odstępu, które mają poprawić czytelność. W razie
potrzeby możemy użyć dmesg | more lub dmesg | less.
|
Listing 3.1: Wynik działania dmesg dla karty pamięci |
# dmesg | less
usb 1-1: new full speed USB device using uhci_hcd and address 2
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: JetFlash Model: TS512MJF2A Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
sda: Write Protect is off
sda: Mode Sense: 0b 00 00 08
sda: assuming drive cache: write through
SCSI device sda: 1003600 512-byte hdwr sectors (514 MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete
usb 1-1: USB disconnect, address 2
|
Po podłączeniu i zamontowania urządzenia, można się do niego odwoływać jak do
zwykłego dysku twardego. Działają standardowe operacje typu cp,
mv, rm itp. Na karcie pamięci USB możemy także utworzyć system
plików i sformatować go.
Listing 3.2: Dostęp do karty pamięci |
# mount /dev/sda1 /mnt/usb
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda8 9.4G 7.5G 1.9G 80% /
/dev/hda9 11G 8.1G 2.4G 78% /usr
none 189M 0 189M 0% /dev/shm
/dev/sda1 490M 34M 457M 7% /mnt/usb
|
Uwaga:
Dostęp do aparatów cyfrowych może być uzyskany w taki sam sposób, jak do kart
pamięci. Autor niniejszego przewodnika posiada aparat Nikon Coolpix 5200 i
odwołuje się do niego w opisany sposób. Aparaty obecnie przesyłają obrazy na dwa
sposoby: poprzez USB oraz poprzez PTP (Picture Transfer Protocol). Ten aparat
jest ustawiony tak, by zachowywał się jak pamięć masowa i procedura dostępu
wygląda dokładnie tak samo jak opisana wcześniej dla kart pamięci. Warto
zauważyć, że opisany sposób NIE musi działać w przypadku wszystkich aparatów
cyfrowych, które wspierają USB.
|
W jaki sposób będzie widoczna mysz USB, w przypadku gdy taką posiadamy? Pojawi
się jako urządzenie typu HID.
Listing 3.3: Optyczna mysz na USB |
# dmesg | grep USB
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
usb 1-1: new low speed USB device using address 2
input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:07.2-1
|
Kolejnym użytecznym poleceniem, dzięki któremu możemy sprawdzić stan portów
USB, jest lsusb. Stanowi część sys-apps/usbutils i będzie
omówione w następnym akapicie.
4.
USB w przestrzeni użytkownika
Użyteczne narzędzia
Jak dotąd, zobaczyliśmy w jakim stopniu kernel Linuksa wspiera USB. Teraz
nadeszła chwila, by rzucić okiem na wsparcie oferowane przez Gentoo w
przestrzeni użytkownika.
Jednym z najbardziej użytecznych narzędzi jest lsusb. Pokazuje wszystkie
urządzenia usb podłączone do systemu. Instalacja zajmuje dosłownie chwilkę.
Listing 4.1: Instalacja pakietu usbutils |
# emerge usbutils
|
Kiedy pakiet zostanie zainstalowany, to możemy uruchomić lsusb, by
otrzymać podstawowe informacje o urządzeniach USB podłączonych do komputera.
Uwaga:
W większości przypadków wymagane są uprawnienia użytkownika root, by używać
lsusb.
|
Ostrzeżenie:
lsusb pobiera informacje o urządzeniach USB z pliku
/proc/bus/usb. Jeśli nie włączyliśmy tego w kernelu, to szanse, że
lsusb zadziała, są nikłe. Musimy się upewnić, że w kernelu jest włączone
wsparcie dla systemu plików /proc oraz że usbfs jest
zamontowany jako /proc/bus/usb (co powinno stać się
automatycznie).
|
Listing 4.2: lsusb w akcji |
# lsusb
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
|
Jeśli lubimy otrzymywać dużą ilość informacji, to mamy możliwość użycia
lsusb -v. Możemy użyć tej komendy i obejrzeć informacje jakie uzyskamy.
Inną użyteczną opcją lsusb jest możliwość wyświetlenia fizycznej
hierarchii urządzeń USB jako drzewa. Pozwala to zrozumieć dokładną mapę
urządzeń. Ta komenda to lsusb -t. Dla przykładu,
Listing 4.3: lsusb - wyświetlanie hierarchii USB |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
Możemy z łatwością powiązać wynik działania komend lsusb i lsusb
-t, co ułatwi usuwanie błędów i zrozumienie zasady działania USB.
5.
Podziękowania dla...
Odnośniki
Do powstania tego przewodnika przyczyniła się spora liczba dokumentów
ogólnodostępnych w sieci. Niektóre z nich są napisane na dużym poziomie
szczegółów technicznych, ale są naprawdę ciekawe. Zasługują na wzmiankę. Są to
następujące dokumenty.
Inne ciekawe teksty
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|