Ghid USB pentru Gentoo Linux
1.
Introducere
Ce înseamnă USB?
USB este abrevierea pentru Universal Serial Bus (Magistrală Serială Universală)
şi este în esenţă o interfaţă externă standard care oferă posibilitatea
comunicării între computer şi diverse alte periferice. Unele din cele mai
folosite dispozitive în mod obişnuit sunt tastaturile, dispozitivele mouse,
dispozitivele de stocare pen-drive, camerele digitale, unităţile CD externe
& inscriptoarele DVD, imprimante etc.
În acest moment sunt două versiuni ale standardului USB în uz, USB 1.1 şi USB
2.0. Cum USB a păstrat întotdeauna compatibilitatea "în urmă" cu versiunile lui
anterioare, USB 2.0 păstrează compatibilitatea cu USB 1.1. Ultimele dispozitive
USB sunt de obicei compatibile USB 2.0. USB 2.0 suportă a viteză maximă de
transmitere a datelor de 480 Mbps sau 60 MBps şi aceasta este diferenţa majoră
dintre cele două standarde. Un alt avantaj al folosirii USB este că toate
dispozitivele sunt hot-pluggable, ceea ce înseamnă că nu trebuie să
reporniţi sistemul pentru a putea folosi aceste dispozitive.
O Perspectivă Tehnică
Înainte de a ajunge la opţiunile de configurare exacte din kernel, ar fi
potrivit să privim un pic mai în detaliu USB. Dacă vă grăbiţi sau doriţi să
săriţi peste această secţiune, treceţi la Configurarea
Kernel-ului.
Un sistem USB are un dispozitiv controller gazdă, hub-uri, un hub
rădăcină printre altele şi poate suporta până la 127 dispozitive USB cu tot
cu hub-uri. Controlerul gazdă nu este altceva decât interfaţa hardware între
dispozitivul USB şi sistemul de operare. Există câteva controlere HCI (Host
Controller Interface - Interfaţă controler gazdă) în folosinţă astăzi, anume
OHCI (Open HCI) de la Compaq, UHCI (Universal HCI) şi EHCI (Enhanced HCI),
ambele de la Intel. OHCI/UHCI sunt cele două interfeţe standard USB 1.1 din
industrie în timp ce EHCI este pentru USB 2.0.
Producătorul hardware oferă o interfaţă pentru programator ce permite
sistemului să interacţioneze cu hardware-ul şi aceasta se numeşte HCD sau
Dispozitiv Controler Gazdă. Tocmai prin acest HCD interacţionează dispozitivele
cu aplicaţiile din sistem. Următoarea diagramă ar trebui să facă lucrurile mai
uşor de înţeles.
Cod 1.1: Arhitectura Generală USB |
+ ---- Hardware ---- + ---- Software ---- +
| | |
| [USB Dev] -+-> {EHCI} -+---> ( EHCD ) |
| | | | Utilizator
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ---- Hardware ---- + ---- Software ---- +
|
Un dispozitiv USB poate folosi ori un driver general sau unul deja prezent în
sistem şi acest lucru se bazează pe conceptul de clasă de dispozitive.
Aceasta înseamnă că dacă un dispozitiv aparţine unei oarecare clase,
atunci alte dispozitive aparţinând aceleiaşi clase pot funcţiona
folosind acelaşi driver dispozitiv. Unele din aceste clase sunt clasa
USB HID (Human Interface Devices - Dispozitivele Interfaţă Umană), care acoperă
dispozitivele de intrare cum sunt tastaturile şi dispozitivele mouse, clasa de
dispozitive USB Mass Storage, care acoperă dispozitive cum sunt unităţile
stocare pen-drive, camerele digitale, dispozitive de redare audio etc şi clasa
USB CDC (Communication Devices Class - Clasa Dispozitivelor de Comunicaţie),
care, în esenţă, acoperă dispozitivele modem USB şi dispozitivele similare.
Ce se află în maşina dvs.?
Este foarte simplu să aflaţi dacă maşina dvs. are sau nu suport USB 2.0. Vom
folosi comanda lspci în acest scop.
Notă:
Comanda lspci este parte a pachetului sys-apps/pciutils. Dacă nu
aveţi acest pachet instalat, instalaţi-l cu emerge pciutils. Luaţi în
considerare că trebuie să aveţi drepturi root cât timp rulaţi comanda
lspci.
|
Cod 1.2: Diverse rezultate ale comenzii 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])
|
Deci, folosind comanda lspci, putem afla dacă sistemul suportă USB 2.0.
Este un lucru folositor, pentru că vom activa opţiunile corespunzătoare în
kernel.
2.
Configurarea Kernel-ului
Procurarea unui kernel
Notă:
Începând cu versiunea 2005.0, Gentoo Linux foloseşte arborele 2.6 drept kernel
implicit. Doar dacă specificaţi folosirea profilului 2.4, gentoo-sources
va fi un kernel generaţia 2.6 pe cele mai multe arhitecturi. Verificaţi
versiunea kernel-ului şi apoi procedaţi cu o configurare corespunzătoare.
|
În primul rând instalaţi sursele kernel-ului ales de dvs. Aici vom folosi
gentoo-sources Pentru mai multe informaţii referitoare la diferite surse
disponibile în arborele Portage, verificaţi Ghidul pentru Kernel în Gentoo Linux.
Cod 2.1: Instalarea surselor kernel-ului |
# emerge gentoo-sources
|
Acum, să mergem mai departe cu sarcina configurării kernel-ului.
Cod 2.2: Înaintând către sursă |
# cd /usr/src/linux
# make menuconfig
|
Notă:
Exemplul de mai sus presupune că link-ul simbolic /usr/src/linux
indică sursele kernel-ului pe care doriţi să le folosiţi. Asiguraţi-vă de acest
lucru înainte de a proceda.
|
Opţiuni de configurare pentru un kernel 2.6.x
Acum ne vom uita la anumite opţiuni pe care va trebui să le activăm în
kernel-ul 2.6, pentru a asigura un suport corespunzător pentru dispozitivele
noastre. Dacă folosiţi un kernel 2.4, urmaţi Opţiuni de configurare pentru un kernel 2.4.x .
Notă:
Exemplele din acest document vor prezenta opţiuni de configurare pentru un
suport USB de bază, care este necesar în mod obişnuit, de exemplu un dispozitiv
de stocare USB (cele mai multe camere şi dispozitive pendrive). Dacă aveţi un
dispozitiv USB specific ce trebuie configurat, consultaţi manualul
dispozitivului dvs. sau căutaţi online pentru a afla dacă dispozitivul dvs. are
suport construit în kernel sau diverse alte driver-e ce pot fi folosite. Luaţi
aminte că pentru uşurinţă, toate exemplele au diversele opţiuni compilate în
kernel. Dacă doriţi să aveţi un kernel modular, asiguraţi-vă că vă notaţi
diversele module şi modificaţi fişierele dvs. de configurare corespunzător.
|
Cod 2.3: opţiuni de compilare pentru kernel-urile 2.6 |
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 Mass Storage Write-Protected Media Detection (EXPERIMENTAL)
--- USB Input Devices
<*> USB Human Interface Device (full HID) support
[*] HID input layer 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)
|
Acum că opţiunile dvs. sunt stabilite, puteţi (re)compila kernel-ul şi suportul
USB ar trebui să fie funcţional odată ce aţi repornit cu noul kernel. Acum
puteţi citi Demonstraţie a lucrului cu USB şi să
vedeţi dacă totul funcţionează cum trebuie.
Opţiuni de configurare pentru un kernel 2.4.x
Vom trece în revistă opţiunile ce vor trebui activate într-un kernel 2.4,
pentru a asigura suport USB corespunzător pentru dispozitivele noastre. Dacă
folosiţi un kernel 2.6, citiţi Opţiuni de
configurare pentru un kernel 2.6.x.
Notă:
Exemplele din acest document vor prezenta opţiuni de configurare pentru un
suport USB de bază, care este necesar în mod obişnuit, de exemplu un dispozitiv
de stocare USB (cele mai multe camere şi dispozitive pendrive). Dacă aveţi un
dispozitiv USB specific ce trebuie configurat, consultaţi manualul
dispozitivului dvs. sau căutaţi online pentru a afla dacă dispozitivul dvs. are
suport construit în kernel sau diverse alte driver-e ce pot fi folosite. Luaţi
aminte că pentru uşurinţă, toate exemplele au diversele opţiuni compilate în
kernel. Dacă doriţi să aveţi un kernel modular, asiguraţi-vă că vă notaţi
diversele module şi modificaţi fişierele dvs. de configurare corespunzător.
|
Cod 2.4: opţiuni de compilare pentru kernel-urile 2.4 |
Input core support --->
<*> Input core support
< > Keyboard support
< > Mouse support
< > Event interface support
USB support --->
<*> Support for USB
[*] Preliminary USB device filesystem
--- USB Host Controller Drivers
<*> UHCI Alternate Driver (JE) support
< > OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
--- USB Device Class drivers
< > USB Audio support
<*> USB Mass Storage support
< > USB Modem (CDC ACM) support
<*> USB Printer support
--- USB Human Interface Devices (HID)
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
USB Serial Converter support --->
<*> USB Serial Converter support
<*> USB Prolific 2303 Single Port Serial Driver (NEW)
|
Acum că toate opţiunile sunt stabilite, puteţi (re)compila kernel-ul, iar
suportul USB ar trebui să fie funcţional odată ce aţi repornit sistemul cu noul
kernel.
3.
Demonstraţie a lucrului cu USB
dmesg este prietenul dvs.!
A venit vremea să ne jucăm cu aceste dispozitive USB :) Deci să îi dăm drumul.
În acest capitol, vom vedea cum răspunde sistemul unor diverse dispozitive USB.
Vom începe prin introducerea în sistem a unui dispozitiv de stocare a memoriei
Pen Drive, 512 MB. Puteţi folosi şi alte dispozitive similare. Vom folosi în
principal dmesg pentru a vedea ce se întâmplă şi cum răspunde sistemul
acestui dispozitiv.
Notă:
dmesg oferă în general o mulţime de informaţii, înaintea celor de care
avem nevoie, pentru că citeşte din memoria buffer a kernel-ului, care conţine
toate mesajele de iniţializare de asemenea. Ieşirile, în exemplele următoare,
au doar porţiunile relevante şi spaţii în plus între ele pentru a obţine o
vizualizare mai bună. Dacă este nevoie, folosiţi parametrii dmesg | more
sau dmesg | less pentru a vedea mai bine informaţiile de ieşire ale
sistemului dvs.
|
Cod 3.1: informaţii rezultat ale dmesg pentru un Memory Stick |
# 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
|
Odată ce dispozitivul este conectat şi montat, îl puteţi accesa ca pe un disc
normal. Comenzi uzuale ca cp, mv, rm etc funcţionează
corect. Aţi putea crea, de asemenea, un sistem de fişiere pe stick-ul USB sau
să îl formataţi.
Cod 3.2: Accesarea stick-ului de memorie |
# 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
|
Notă:
Camerele digitale pot fi accesate în acelaşi mod ca dispozitivele de memorie.
Am o cameră Nikon Coolpix 5200 şi acesta este modul în care o accesez. Camerele
din ziua de astăzi deţin două moduri de a transfera fotografiile; comportarea
ca un dispozitiv de stocare USB şi prin modul PTP (Picture Transfer Protocol).
este setată să se comporte ca un dispozitiv de stocare USB şi procedura este
exact aceeaşi, din această cauză nu am explicat în detaliu aceleaşi lucruri.
Luaţi aminte că această metodă nu poate funcţiona în toate cazurile şi cu
toate camerele digitale care au suport USB.
|
Cum va apare un dispozitiv mouse USB în cazul în care aveţi unul? Va fi afişat
ca un dispozitiv HID.
Cod 3.3: Dispozitiv Mouse Optic 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
|
O altă comandă grozavă ce poate fi folosită pentru a vedea starea porturilor
dvs. USB este lsusb. Este parte a pachetului sys-apps/usbutils şi
va fi prezentarea acesteia este acoperită în următorul capitol.
4.
Spaţiu Utilizator USB
Unelte grozave
Până acum am văzut cât de mult suport există pentru USB, din punct de vedere al
kernel-ului/sistemului Linux. Vom arunca o privire asupra suportului asigurat
de Gentoo pentru USB, în spaţiul utilizator.
Una din cele mai folositoare unelte este lsusb. Aceasta afişează toate
dispozitivele USB conectate în sistem. Instalarea este rapidă.
Cod 4.1: Instalarea usbutils |
# emerge usbutils
|
Odată instalat, rulaţi lsusb pentru a primi simple informaţii
referitoare la dispozitivele USB ataşate maşinii dvs.
Notă:
În cele mai multe cazuri, trebuie să aveţi drepturi root pentru a rula
lsusb.
|
Atenţie:
lsusb citeşte informaţiile referitoare la dispozitivele USB din
/proc/bus/usb. Dacă nu aţi activat această opţiune în kernel, sunt
şanse ca lsusb să nu funcţioneze deloc. Asiguraţi-vă că aveţi activat în
kernel-ul dvs. suportul pentru sistemul de fişiere /proc şi că
usbfs este mount-at în /proc/bus/usb (ceea ce ar trebui să
se întâmple automat).
|
Cod 4.2: lsusb la lucru |
# 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
|
Dacă sunteţi de genul celor ce adoră să vadă multe informaţii, aveţi opţiunea
rulării lsusb -v. Încercaţi-o şi vedeţi cantitatea de informaţii pe care
o oferă. O altă bună opţiune se referă la faptul că lsusb arată ierarhia
fizică curentă USB ca un arbore şi astfel face mai uşor de înţeleasă harta
exactă a dispozitivelor. Comanda este lsusb -t. De exemplu,
Cod 4.3: lsusb arătând ierarhia USB |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
Puteţi uşor corela rezultatele lsusb şi lsusb -t, ce ajută
depanarea ca şi înţelegerea modului de funcţionare al USB.
Conectare Hot sau Cold ??
Gentoo foloseşte două pachete, sys-apps/hotplug şi
sys-apps/coldplug pentru a realiza ceva magie cu dispozitivele
hot-pluggable. Ca în cazul oricărei magii, există o logică simplă în
spatele acesteia, de asemenea. Vom vedea acum ce este, şi să sperăm că în acest
proces vom fi apţi să înţelegem mai bine aceste două pachete gemene.
Firmware-ul poate fi definit ca software în hardware, ce este încărcat şi
executat, dar care nu poate fi modificat uşor. Multe dispozitive au firmware
încorporat pentru siguranţa corectei funcţionări şi adesea firmware-ul poate
conţine cod critic, pentru a avea siguranţa că hardware-ul va funcţiona aşa cum
s-a prevăzut. Firmware-ul este prezent într-o largă varietate de componente de
calculator, de la chip-uri ROM până la avansate card-uri USB şi PCMCIA. Când un
dispozitiv este conectat, firmware-ul (care în unele cazuri poate fi chiar
driver-ul) este citit şi încărcat în memorie după care dispozitivul poate fi
folosit de sistem.
Pentru a scurta lunga poveste, Gentoo foloseşte sys-apps/hotplug pentru
lucrul cu firmware-ul în cazul dispozitivelor hot-pluggable.
sys-apps/hotplug va folosi firmware-ul corespunzător pentru a face
respectivul dispozitiv utilizabil. Firmware-ul ar trebui pus în directorul
/lib/firmware şi încărcat de acolo. Rezolvarea este simplă;
obişnuita comandă emerge va face acest lucru.
Cod 4.4: Instalarea hotplug |
# emerge hotplug
|
Acum întrebarea evidentă ar fi, ce este coldplug şi de ce este necesar?
sys-apps/coldplug are acelaşi rol ca hotplug, dar îl îndeplineşte pentru
dispozitivele hot-pluggable care sunt deja conectate în momentul
pornirii. Un bun exemplu în acest caz ar fi un card de reţea USB. Înainte,
hotplug era pachetul responsabil cu lucrul în ambele situaţii, dar apoi a
fost împărţit în hotplug şi coldplug, coldplug efectuând tot ce este necesar.
Instalaţi-l dacă aveţi dispozitive hot-pluggable pe care trebuie să le
activaţi la pornire.
Cod 4.5: Instalarea coldplug |
# emerge coldplug
# rc-update add coldplug boot
* coldplug added to runlevel boot
* rc-update complete.
|
Notă:
Script-ul de iniţializare de mai sus are acelaşi rol ca şi cel pe care îl avea
cel al hotplug (pentru dispozitive hot-pluggable deja ataşate). Script-ul
curent /etc/init.d/hotplug nu face altceva decât să verifice dacă
opţiunea CONFIG_HOTPLUG este activată pentru kernel-ul curent.
|
5.
Şi mulţumiri către...
Referinţe
Un număr bun de documente online m-au ajutat în timpul redactării acestui
material, şi iată câteva care sunt de înalt nivel tehnic dar cu adevărat
interesante. Cred că acestea merită creditul nostru. Deci, iată-le!
Alte Referinţe Interesante
Conţinutul acestui document este publicat sub licenţa Creative Commons -
Attribution / Share Alike.
|