Mettre en place un lecteur USB de cartes mémoires

Baptiste SIMON (aka BeTa)

version 1.0

20031027

Abstract

Ce tutoriel (Howto) vous apprendra comment utiliser le lecteur USB tout-en-un de cartes mémoires de type SD (SecureDigital(tm)) ou CF (CompactFlash(tm)).


Table of Contents

Premiers pas... le matériel
Paramétrer votre noyau Linux
Méthode from scratch
Méthode from distro (non testé)
Premier montage de votre carte mémoire (SD)
Le noyau
Le bus USB
L'interfacage avec le système (les drivers)
Utilisation
Se faciliter la vie
/etc/fstab
automount / supermount
Conclusion
Annexes
L'auteur
Aperçu des divers formats de ce document
Licence de publication

Premiers pas... le matériel

Pour faire ce tutoriel, j'ai utilisé le matériel suivant (ne surtout pas prendre ca comme de la publicité, mais comme des informations utiles) :

  • Carte mère Abit KG7

  • Lecteur USB1.1 3"5 (interne) "6 en 1" de marque "Elite" [1], basé sur le chipset UCR-61S2B

Dès les premiers pas, j'ai rencontré un petit problème : le cablage de la fiche USB interne a été fait à l'envers par rapport au montage standard de ma carte mère... Donc résultat, il m'a fallu prendre la prise à l'envers et la laisser dépasser de l'emplacement prévu à cet effet. A partir de ce moment là, le lecteur a été reconnu sur le bus USB (attention, sans cette manipulation, vous pourrez endommager des composants critiques).

Paramétrer votre noyau Linux

Méthode from scratch

Télécharger les sources d'un noyau Linux (le dernier de préférence) d'un numéro de version supérieur ou égal à 2.4.22 ou 2.6.0-test2 sur kernel.org. Décompactez les dans '/usr/src', faites un lien symbolique nommé /usr/src/linux pointant sur le répertoire où se trouve les sources de votre noyau et

# cd /usr/src/linux
# make menuconfig

Configurez votre noyau... n'oubliez pas les parties USB (CONFIG_USB, CONFIG_USB_EHCI_HCD ou CONFIG_USB_UHCI ou CONFIG_USB_OHCI), USB Mass Storage (CONFIG_USB_STORAGE), SCSI générique (CONFIG_SCSI & CONFIG_CHR_DEV_SG), Disques SCSI (CONFIG_BLK_DEV_SD), entrées SCSI multiples (CONFIG_SCSI_MULTI_LUN)... Préférez les modules à la compilation en dure tant que vous ne serez pas 100% surs de ce que vous faites, ca permet de faire des tests sans avoir à rebooter pour réinitialiser ces portions de codes du noyau.

Ensuite, lancez la compilation de ce noyau

# make dep && make clean bzImage modules modules_install (pour le 2.4.x)
# make (pour le 2.6.x) && make modules_install

Méthode from distro (non testé)

À vous de voir comment s'annonce le noyau de votre distribution en fonction de ce qui a été dit plus haut.

Premier montage de votre carte mémoire (SD)

Le noyau

Pour mettre le noyau dans un état permettant l'utilisation de vos cartes mémoires, il vous faut charger les modules décris plus haut (si vous avez compilé vos options kernel en modules, sinon, oubliez cette étape)

# modprobe scsi_mod
# modprobe sg
# modprobe usb-uhci
# modprobe usb-storage

Maintenant, votre système doit initialiser votre lecteur de cartes mémoire.

Le bus USB

Vous pouvez maintenant, si ce n'est déjà fait, brancher votre lecteur sur le bus USB physique (préférez d'insérer les cartes mémoires avant une telle opération). Nous allons ensuite vérifier sa présence logique en testant (sans oublier de monter usbfs sur /proc/bus/usb, vérifiez cela avec la commande 'mount', et s'il n'est pas monté, faites : 'mount -t usbfs none /proc/bus/usb') votre bus USB

$ cat /proc/bus/usb/devices
T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=cc00
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c800
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=07cc ProdID=0200 Rev= 0.12
S:  Manufacturer=----- Ltd.
S:  Product=SPRING-Rev1.1
S:  SerialNumber=102016213230
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=83(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
$

Si vous trouvez quelque chose de la sorte, votre lecteur USB est bien connecté à votre bus USB, physiquement et logiquement.

L'interfacage avec le système (les drivers)

Pour confirmer le fonctionnement initial de votre système pour ce genre de matériel, vérifiez les points suivants

$ ls -l /dev/scsi/host*/bus0/target0/lun* (dans le cas de l'utilisation de devfs)
/dev/scsi/host0/bus0/target0/lun0:
total 0
brw-rw----    1 root     disk       8,   0 Jan  1  1970 disc
crw-------    1 root     root      21,   0 Jan  1  1970 generic

/dev/scsi/host0/bus0/target0/lun1:
total 0
brw-rw----    1 root     disk       8,  16 Jan  1  1970 disc
crw-------    1 root     root      21,   1 Jan  1  1970 generic

/dev/scsi/host0/bus0/target0/lun2:
total 0
brw-rw----    1 root     disk       8,  32 Jan  1  1970 disc
crw-------    1 root     root      21,   2 Jan  1  1970 generic

/dev/scsi/host0/bus0/target0/lun3:
total 0
brw-rw----    1 root     disk       8,  48 Jan  1  1970 disc
crw-------    1 root     root      21,   3 Jan  1  1970 generic

$ sg_map
# Note: the devfs pseudo file system is present
/dev/sg0
/dev/sg1  /dev/sdb (if you have a card plugged in)
/dev/sg2
/dev/sg3

Si vous obtenez des choses semblables aux exemples plus haut, votre matériel a bien été initialisé. Vous pouvez en apprendre encore plus avec la commande 'dmesg', surtout si vous avez compilé vos drivers usb-storage (voire SCSI) avec l'option "debug".

Utilisation

Nous allons maintenant tester l'utilisation de votre nouveau périphérique. Pour cela, notre premier essai sera de monter une carte mémoire. Veillez à bien avoir branché votre lecteur avec une carte insérée au préalable. Ici nous avons inséré une carte SD. Notre système la reconnait (cf. plus haut, avec la commande 'sg_map') en tant que '/dev/sdb'. Nous allons donc la prendre en tant que telle :c).

Première étape exemple, le premier montage de la carte

$ mkdir /mnt/sdcard
$ mount /dev/sdb1 /mnt/sdcard

Seconde étape, la copie d'un fichier exemple sur la carte

$ cd /mnt/sdcard
$ cp /etc/resolv.conf .

Si tout s'est bien passé, vous etes prets à automatiser tout cela...

Se faciliter la vie

Pour se simplifier la vie, je vous propose deux étapes : L'utilisation de fstab pour qu'un simple "mount" fasse l'affaire, et l'utilisation d'automount, que je vous laisserais approfondir, car cela nous ferait sortir du sujet central de ce document.

/etc/fstab

Pour automatiser le montage de vos cartes mémoires, renseignez (en adaptant cela à votre cas particulier) le fichier '/etc/fstab'. Ainsi, vous pourrez, par une simple commande, monter ou démonter, en tant qu'utilisateur normal, vos média amovibles. Les lignes qui suivent vous offre un aperçu de ce que l'on peut faire

/dev/sda1       /mnt/cfcard             vfat            defaults,noauto,user            0 0
/dev/sdb1       /mnt/sdcard             vfat            defaults,noauto,user            0 0

Ainsi, pour monter puis démonter votre carte mémoire SD, tappez simplement

$ mount /mnt/sdcard
$ umount /mnt/sdcard

automount / supermount

Pour aller encore plus loin dans l'automatisation de l'utilisation de votre lecteur de cartes mémoire, vous pouvez aller jusqu'à utiliser automount. Cet outil permet de gérer le montage / démontage de vos périphérique de la manière la plus transparente possible, l'idée étant d'insérer la carte et de la trouver directement montée dans '/mnt/sdcard' par exemple, sans aucune intervention.

Ne l'ayant moi-meme jamais testé, je vous laisse à l'excellent HOWTO de TLDP sur le sujet...

Conclusion

Utiliser un lecteur USB de cartes mémoire, des clés USB, etc... n'est pas plus compliqué avec un noyau Linux qu'un noyau Windows(tm). Ce présent tutoriel peut sembler difficile à aborder, mais cela vient du fait que j'ai choisi volontairement de faire le plus complet possible. Cependant, en soi, comme partout, nous n'avons qu'installé les drivers nécessaires, et pluggué le lecteur sur le bus USB. Avec l'utilisation d'automount ou de supermount, ce processus est encore plus facile à suivre. Normalement, tous ces outils sont normalement pré-installés et pré-configurés sur les distribution grand public de type RedHat(tm), Mandrake(tm), SuSE(tm) ou knoppix.

Veillez tout de meme à vérifier la compatibilité de votre matériel avec le noyau Linux... il peut arriver parfois de tomber encore sur de mauvaises (et parfois étranges) surprises.

Pour toute remarque, question ou contribution supplémentaire, vous trouverez mon mail dans la partie réservée à l'auteur, n'hésitez pas... Ce document est Libre et s'utilise en tant que tel :c)

Annexes

L'auteur

Baptiste SIMON <baptiste.simon@e-glop.net>

Administrateur système GNU/Linux

Ancien responsable de l'administration systèmes chez Code Lutin

Toujours à la recherche d'aventures, dans le cadre de son emploi en cours ;c)

Aperçu des divers formats de ce document

Ce document a été rédigé au format RST avec KWrite puis converti aux formats DN-XML et Docbook avec dn2dbk.xsl.

Les différentes versions ci-dessous ont été réalisées avec les feuilles XSLT officielles de docbook [2] et les outils du paquet xmlto de la Debian GNU/Linux.

Retrouvez toutes ces version ici :

Licence de publication

Ce document issu de www.e-glop.net est soumis à la licence GNU FDL. Permission vous est donnée de distribuer, modifier des copies de ce document (traduction, modifications, adaptation, etc...) tant que vous respectez la licence sus-citée.



[2] paquet docbook-xsl sur Debian GNU/Linux