Home Dokumentacje Konfiguracja urządzeń USB w Gentoo Linux
22 | 10 | 2019
Konfiguracja urządzeń USB w Gentoo Linux
Wpisany przez Shyam Mani   

Konfiguracja urządzeń USB w Gentoo Linux

Spis treści:

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

(Oprogramowanie jak i warstwa sprzętowa składają się z innych
komponentów, które dla uproszczenia nie są tu przedstawione)

    + ----  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

(W systemie, który jest zgodny z USB 1.1, widzimy tylko UHCI)

# lspci -v | grep USB
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])

(System, który jest zgodny z USB 2.0, zauważamy EHCI i 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  --->

(Wybierając USB Mass Storage możemy być pewni, że obsługa SCSI zostanie
włączona, jednak musimy zadbać o włączenie obsługi dysku)
---   SCSI support type (disk, tape, CD-ROM)
<*>   SCSI disk support

(Cofamy się o jeden poziom, do opcji USB support)
USB support  --->

(Główny hub jest wymagany dla wsparcia USB. Jeśli skompilujemy to jako
moduł, będzie dostępny pod nazwą usbcore)
<*> Support for Host-side USB

(Wybieramy tę opcję, by urządzenia USB pojawiały się w /proc/bus/usb.
Opcja zalecana.)
 [*]   USB device filesystem

(Wybieramy przynajmniej jeden HCD. Jeśli brak nam pewności,
to wybieramy wszystkie)
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support

(Schodząc trochę niżej dochodzimy do urządzeń CDC i urządzeń masowego
składowania danych)
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support

(Jeśli posiadamy kartę sieciową USB, np. RTL8150, to będziemy potrzebować poniższego)
USB Network Adapters  --->
    <*> USB RTL8150 based ethernet device support (EXPERIMENTAL)

(Jeśli posiadamy przejściówkę typu złącze szeregowe USB, np. Prolific
2303, to zaznaczamy poniższe opcje)
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

(Wsuwamy kartę pamięci w dostępny port USB, a następnie...)
# dmesg | less

(urządzenie jest wykrywane jako zgodne z USB 1.1 i otrzymuje adres.
Pojawia się także informacja, z jakiego HCD korzysta.)
usb 1-1: new full speed USB device using uhci_hcd and address 2

(Automatycznie włącza się emulacja SCSI)
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2

(Następnie pobierana jest informacja o urządzeniu, zawierająca numer modelu)
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)

(Wykrywanie zabezpieczenia przed zapisem jest
EKSPERYMENTALNE, w późniejszych kernelach)
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
(Od tego momentu urządzenie jest zazwyczaj dostępne przez zamontowanie /dev/sda1)

(Gdy urządzenie jest odłączane, system powiadamia o tym w ten sam sposób)
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
(512MB karta pamięci Transcend)
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
(myszka optyczna)
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
(główny hub)
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



Drukuj

Zaktualizowano 21 czerwca 2008

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 29 listopada 2009. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć. , koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Opis konfiguracji Gentoo do współpracy z różnymi peryferyjnymi urządzeniami podłączanymi przez porty USB.

Shyam Mani
Autor

Paweł Kwiatkowski
Tłumacz

Donate to support our development efforts.

&lt;p&gt;Your browser does not support iframes.&lt;/p&gt;

Copyright 2001-2011 Gentoo Foundation, Inc. Questions, Comments? Contact us.

 
Linki sponsorowane

W celu realizacji usług i funkcji na witrynach internetowych ZUI "ELPRO" stosujemy pliki cookies. Korzystanie z witryny bez zmiany ustawień dotyczących plików cookies oznacza, że będą one zapisywane w urządzeniu wyświetlającym stronę internetową. Więcej szczegółów w Polityce plików cookies.

Akceptuję pliki cookies z tej witryny.