Guide de l'USB sous Gentoo Linux
1.
Introduction
Qu'est-ce que l'USB
USB signifie Universal Serial Bus, soit Bus Série Universel. Pour faire
simple, il s'agit d'un standard d'interface externe qui permet la communication
entre l'ordinateur et plusieurs autres périphériques. Parmi les périphériques
les plus communément utilisés actuellement, il y a les claviers, les souris, les
mémoires USB, les appareils photos numériques, les graveurs de CD et DVD
externes, les imprimantes, etc.
Il existe actuellement deux versions de l'USB : USB 1.1 et USB 2.0. Dans la
mesure où l'USB a toujours proposé une compatibilité totale avec les
versions antérieures, l'USB 2.0 est compatible avec la version 1.1. Les derniers
périphériques USB sont en général compatibles avec l'USB 2.0. L'USB 2.0 permet
une vitesse de transmission des données maximale de 480 Mb/s (ou
60 Mo/s) et c'est là la plus grande différence entre les deux standards. Un
autre avantage de l'USB est que tous les périphériques peuvent être connectés et
déconnectés à chaud, ce qui signifie que vous n'avez pas besoin de redémarrer
votre système pour pouvoir les utiliser.
Un aperçu technique
Avant de commencer avec les options de configuration du noyau, il est bon d'en
apprendre encore un peu plus sur l'USB. Si vous êtes pressé ou si vous
souhaitez sauter ce chapitre, passez directement à la
configuration du noyau.
Un système USB est constitué d'un contrôleur hôte et de hubs, dont un hub
principal. Ces systèmes peuvent supporter jusqu'à 127 périphériques USB en
incluant les hubs. Le contrôleur USB fait seulement office d'interface
matérielle entre le périphérique USB et le système d'exploitation. Il existe une
poignée de HCI (Host Controller Interface pour Interface du Contrôleur Hôte)
actuellement en circulation : le OHCI (Open HCI) de Compaq, le UHCI
(Universal HCI) et le EHCI (Enhanced HCI), tous les deux d'Intel. UHCI et OHCI
sont les deux standards de l'industrie pour la prise en charge de l'USB 1.1. EHCI est
réservé à l'USB 2.0.
Le dispositif matériel fournit une interface pour le programmeur qui permet
au système d'interagir avec le matériel : le HCD, ou Host Controller
Device (Dispositif de Contrôleur Hôte). C'est à travers le HCD que le
périphérique va interagir avec le logiciel du système. Le diagramme suivant
devrait vous aider à comprendre un peu mieux la chose.
Exemple de code 1.1 : architecture générale de l'USB |
+ ----- Matériel ----- + ---- Logiciel ---- +
| | |
| [Disp USB] -+-> {EHCI} -+---> ( EHCD ) |
| | | | Utilisateur
| `-> {UHCI} -+---> ( UHCD ) |
| | |
+ ----- Matériel ----- + ---- Logiciel ---- +
|
Le périphérique USB peut soit utiliser un pilote personnalisé, soit en utiliser
un déjà présent dans le système. Tout ceci est basé sur le concept de classe
de périphérique. Cela signifie que si un périphérique appartient à une certaine
classe, alors les autres périphériques appartenant à la même
classe peuvent utiliser le même pilote. Parmi ces classes, se
trouve la classe USB HID (Human Interface Devices pour Dispositif d'Interface
Homme-machine) qui rassemble des périphériques d'entrée comme les claviers et
les souris, la classe pour les périphériques USB Mass Storage (Stockage de
Masse) qui regroupe des périphériques comme les clefs USB, les appareils photos
numériques, les lecteurs audio, etc. et la classe USB CDC pour Communication
Devices Class (Classe de Dispositifs de Communication) qui regroupe
essentiellement les modems USB et autres périphériques de ce type.
Qu'est-ce que contient votre machine ?
C'est très facile de savoir si votre machine dispose du support USB 2.0 ou non.
Pour le découvrir nous utiliserons la commande lspci.
Note :
l'outil lspci fait partie du paquet sys-apps/pciutils. Si vous ne
l'avez pas installé, faites-le avec emerge pciutils. Notez que vous
devez être l'administrateu (root) pour pouvoir utiliser la commande lspci.
|
Exemple de code 1.2 : différents retours de 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])
|
Grâce à la commande lspci, nous pouvons découvrir si le système supporte
l'USB 2.0. C'est très utile dans la mesure où ça nous permettra d'activer les
bonnes options dans le noyau.
2.
Configuration du noyau
Récupérer le noyau
Tout d'abord installez les sources du noyau de votre choix. Dans ce guide, nous
utiliserons gentoo-sources. Pour plus d'informations sur les différents
noyaux disponibles dans Portage, jetez un coup d'œil sur le
Guide du noyau Gentoo Linux.
Exemple de code 2.1 : récupérer les sources du noyau |
# emerge gentoo-sources
|
Maintenant, passons à la configuration du noyau.
Exemple de code 2.2 : avant de commencer la configuration |
# cd /usr/src/linux
# make menuconfig
|
Note :
l'exemple ci-dessus suppose que /usr/src/linux est un lien
symbolique qui pointe vers les sources du noyau que vous souhaitez utiliser.
Assurez-vous que c'est bien le cas chez vous.
|
Options de configuration pour le noyau
Maintenant nous allons jeter un coup d'œil sur certaines des options que nous devrons
activer sur notre noyau pour assurer une prise en charge correcte de l'USB pour nos
périphériques.
Note :
les exemples dans ce document vous montreront les options de configuration pour
une prise en charge de base de l'USB, ainsi que pour la prise en charge des périphériques les plus
communément utilisés, comme par exemple les périphériques de stockage de masse
USB tels que les appareils photos et les clefs USB. Si
vous disposez d'un périphérique USB spécifique que vous devez configurer, lisez
le manuel ou cherchez sur Internet pour savoir si ce périphérique dispose
d'une prise en charge intégrée au noyau ou s'il utilise ses propres pilotes. Notez que, pour
des raisons de simplicité, nous compilerons tout dans le noyau. Si vous
souhaitez un noyau modulaire, notez bien le nom des différents modules
et ajustez vos fichiers de configuration en fonction de ceux-ci.
|
Exemple de code 2.3 : options dans le 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 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)
|
Si vous possédez un périphérique d'entrée USB tel qu'un clavier, une souris ou
un joystick, vous avez besoin d'activer la prise en charge de HID. Remontez d'un niveau,
dans « Device drivers » et activez la prise en charge de HID comme ceci :
Exemple de code 2.4 : activer la prise en charge de HID |
Device Drivers --->
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
|
Maintenant que les options sont configurées, si vous (re)compilez le noyau,
la prise en charge de l'USB devrait être fonctionnelle dès le prochain redémarrage sur ce
nouveau noyau.
3.
Regarder l'USB travailler
Dmesg est votre ami
Le temps est enfin venu de jouer avec vos périphériques USB. Dans ce chapitre,
nous verrons comment le système répond aux différents périphériques USB. Nous
commencerons par connecter une clef USB de 512 Mo de mémoire. Vous pouvez
utiliser évidemment un périphérique similaire pour suivre l'exemple. Nous
commencerons par utiliser dmesg pour voir ce qui se passe et comment le
système répond à notre périphérique.
Note :
dmesg vous renverra une grosse quantité de messages avant d'arriver à
l'information voulue car il lit dans la mémoire tampon des messages du noyau qui
stocke tous les messages depuis le démarrage sur le système d'exploitation. Nous
avons sélectionné uniquement les portions qui nous intéressent pour plus de
lisibilité. Si cela est nécessaire utilisez dmesg | more ou dmesg |
less pour voir plus facilement les messages de sortie de votre système.
|
Exemple de code 3.1 : sortie de dmesg pour la clef USB |
# 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 sdb: 1003600 512-byte hdwr sectors (514 MB)
sdb: Write Protect is off
sdb: Mode Sense: 0b 00 00 08
sdb: assuming drive cache: write through
SCSI device sdb: 1003600 512-byte hdwr sectors (514 MB)
/dev/scsi/host0/bus0/target0/lun0: p1
Attached scsi removable disk sdb 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
|
Une fois le périphérique connecté et monté, vous pouvez y accéder comme si
c'était un disque dur normal. Les opérations habituelles comme cp,
mv, rm, etc. fonctionneront bien. Vous pouvez également
initialiser un système de fichiers sur une clef USB.
Exemple de code 3.2 : accéder à la mémoire de la clef USB |
# mount /dev/sdb1 /mnt/usb
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda8 9.4G 7.5G 1.9G 80% /
/dev/sda9 11G 8.1G 2.4G 78% /usr
none 189M 0 189M 0% /dev/shm
/dev/sdb1 490M 34M 457M 7% /mnt/usb
|
Note :
les appareils photos numériques ont un mode d'accès similaire à celui des clefs
USB. Je possède un Nikon Coolpix 5200 et j'accède aux photos de la même manière.
L'appareil est reconnu comme étant un périphérique de stockage de masse USB
grâce au mode PTP que la plupart des appareils photos utilisent de nos jours. La
procédure est exactement la même, c'est pourquoi nous ne l'expliquons pas en
détails de nouveau. Notez que cela ne fonctionnera pas dans tous les cas, ni
pour tous les appareils photos disposant d'un support USB (N.d.T : en
réalité, les appareils photos suivent de plus en plus ce mode de fonctionnement
mais pour les appareils plus anciens ou certains modèles, la prise en charge par Linux
peut être complètement inexistante).
|
Comment sera reconnue une souris USB pour le cas où vous en auriez une ?
Elle sera reconnue comme étant un périphérique HID.
Exemple de code 3.3 : une souris optique 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
|
Une autre commande très utile que vous pouvez utiliser pour voir le statut de
vos ports USB est lsusb. Elle fait partie du paquet
sys-apps/usbutils. Nous la présenterons dans le chapitre suivant.
4.
Environnement utilisateur pour l'USB
Outils pratiques
Nous avons vu jusqu'à présent à quel point le noyau et le système prennent en charge
l'USB sur Linux. Maintenant, nous allons jeter un coup d'œil aux outils proposés par
Gentoo à l'utilisateur en ce qui concerne l'USB.
L'un des outils les plus utiles est lsusb. Il permet de lister tous les
périphériques USB connectés au système. L'installer est un jeu d'enfant.
Exemple de code 4.1 : installer usbutils |
# emerge usbutils
|
Une fois installé il vous suffit d'exécuter lsusb pour obtenir des
informations simples sur les périphériques USB connectés à votre machine.
Note :
vous devez la plupart du temps être l'administrateur (root) pour pouvoir lancer la commande
lsusb.
|
Attention :
lsusb lit les informations concernant les périphériques USB dans le
répertoire /proc/bus/usb. Si vous n'avez pas activé cet élément
dans le noyau il y a des chances pour que lsusb ne fonctionne pas du
tout. Assurez-vous que la prise en charge du système de fichiers /proc est
activé dans le noyau et que usbfs est monté dans
/proc/bus/usb (ce qui devrait se faire automatiquement).
|
Exemple de code 4.2 : lsusb au travail |
# 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
|
Si vous faites partie de ceux qui aiment avoir beaucoup d'informations, vous
pouvez utiliser l'option lsusb -v. Essayez pour voir la quantité
d'informations que vous obtiendrez. Une autre bonne option est d'obtenir une
copie de la hiérarchie physique actuelle de votre arborescence USB grâce à
lsusb -t. Par exemple :
Exemple de code 4.3 : lsusb obtenant la hiérarchie USB |
# lsusb -t
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x046d Product 0xc00e
`-Dev# 3 Vendor 0x0c76 Product 0x0005
|
Vous pouvez alors facilement faire le lien entre les sorties de lsusb et
lsusb -t ce qui vous permet de faire du débogage et de comprendre comment
fonctionne l'USB.
5.
Remerciements...
Références
J'ai utilisé un bon nombre de documents sur Internet pour écrire celui-ci.
Certains d'entre eux sont très techniques mais vraiment intéressants. Je pense
qu'ils méritent tous une certaine attention.
Autres liens intéressants
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|