Gentoo Logo

Guide de l'USB sous Gentoo Linux

Table des matières :

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

(La partie logicielle est constituée d'autres composants tels que les pilotes
des périphériques, mais, par souci de simplicité, ils ne sont pas détaillés.)

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

(Sur un système supportant l'USB 1.1, notez qu'il n'y a que l'UHCI.)

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

(Sur un système supportant l'USB 2.0,
notez que vous disposez de EHCI et 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  --->

(Même si le SCSI sera activé automatiquement en sélectionnant le support
de l'USB Mass Storage, vous devrez activer le support de disques.)
---   SCSI support type (disk, tape, CD-ROM)
<*>   SCSI disk support

(Puis passez au support USB)
USB support  --->

(C'est le hub principal et il est nécessaire pour le support USB.
Si vous voulez le compiler comme module, son nom est usbcore.)
<*> Support for Host-side USB

(Choisissez au moins l'un de ces HCD. Si vous n'êtes pas sûr,
sélectionnez-les tous.)
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
< > OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support

(Plus bas, activons le support CDC et stockage de masse.)
< > USB Modem (CDC ACM) support
<*> USB Printer support
<*> USB Mass Storage support

(Si vous avez une carte réseau USB comme le RTL8150,
vous aurez besoin de ces éléments.)
USB Network Adapters  --->
    <*> USB RTL8150 based ethernet device support (EXPERIMENTAL)

(Si vous avez un convertisseur USB -> port série comme le Prolific 2303
vous aurez besoin de ces éléments.)
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

(Connectez votre clef USB sur un port USB libre puis...)
# dmesg | less

(Le périphérique est connecté en USB 1.1 et récupère une adresse.
Nous remarquons au passage quel HCD est utilisé.)
usb 1-1: new full speed USB device using uhci_hcd and address 2

(L'émulation SCSI est automatiquement activée.)
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2

(Viennent les informations relatives au périphérique,
notamment le numéro du modèle utilisé.)
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)

(La protection d'écriture est un code expérimental sur les derniers noyaux.)
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
(Le périphérique est normalement accessible en montant /dev/sdb1.)

(Quand le périphérique est déconnecté,
le système vous en informera également.)
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
(Voici la clef USB de 512 Mo de chez Transcend.)
Bus 001 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk
(Voici la souris optique.)
Bus 001 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
(Et enfin le hub principal.)
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



Imprimer

Dernière mise à jour le 26 décembre 2011

La version originale de cette traduction n'est plus maintenue

Résumé : L'objectif de ce document est d'aider les utilisateurs à configurer leur USB sous Gentoo Linux et à utiliser un certain nombre de périphériques USB.

Shyam Mani
Auteur

Clément Varaldi
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

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