Cette page est en cours de rédaction.
Apportez votre aide…

Lecteurs de carte mémoire

L'objet de ce tutoriel est d'activer les lecteurs de carte mémoire parfois présents sur les PC portables mais non reconnus par défaut.

La première étape est de déterminer quel est le lecteur dans votre portable, pour cela :

lspci
  02:06.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller
  02:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller

Dans le cas de mon pc (un Acer Extensa 3001WLMi) il s'agit du contrôleur Texas Instruments PCIxx21

Ou :

lspci
  03:01.1 Class 0805: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)
  03:01.2 System peripheral: Ricoh Co Ltd Unknown device 0843 (rev 01)
  03:01.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 0a)
  03:01.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 05)

Dans le cas de mon pc (le Dell Inspiron 9400 de Pezzos), il s'agit du contrôleur Ricoh.

Recompiler le pilote V2

Tiré de https://ubuntuforums.org/showthread.php?t=797031. Fonctionne sous Ubuntu 9.04 pour les lecteurs de carte Texas Instrument PCIxx21.

Merci de préciser si ça marche pour d'autres versions ou d'autres lecteurs.

Le pilote nécessaire pour l'utilisation des cartes mémoires est présent dans le kernel, mais n'a pas été compilé dans la version distribuée.

Compiler un kernel prend du temps (1h - 1h30 suivant votre système), alors préparez quelque chose à faire pendant ce temps là. ^_^

Méthode manuelle

sudo apt-get build-dep linux-image-`uname -r`
  • Récupérer les fichiers sources du kernel
sudo apt-get source linux-image-`uname -r`
  • Entrer dans le répertoire où ont été téléchargé les fichiers sources
cd linux-`uname -r`

ou

cd linux-`eval "uname -r" | cut -f1 -d-`

suivant lequel fonctionne.

  • Activer la compilation du pilote des lecteurs de carte mémoire

Si vous utiliser un système 32 bit :

sudo gedit debian/config/i386/config

Si vous utiliser un système 64 bit :

sudo gedit debian/config/amd64/config
Rapportez vous à votre CD d'installation pour savoir quel est votre système d'exploitation.
  • Rechercher la ligne :
# CONFIG_MEMSTICK is not set
  • Remplacer par :
CONFIG_MEMSTICK=m
  • Enregistrer et fermer la fenêtre.
  • Dans le terminal taper :
sudo AUTOBUILD=1 NOEXTRAS=1 skipabi=true fakeroot debian/rules binary-generic
  • Mettre en place le nouveau pilote et l'activer
sudo cp -r debian/linux-image-`uname -r`/lib/modules/`uname -r`/kernel/drivers/memstick /lib/modules/`uname -r`/kernel/drivers/
sudo depmod -a
  • Insérer la carte, ça marche sans avoir besoin de redémarrer 8-)

Méthode automatique

Si vous n'aimez pas le terminal, il est possible d'utiliser un petit script fait par sapmemailek
  • Ouvrez nautilus (l'explorateur)
  • Clic droit –> Créer un document –> Fichier vierge
  • Copier-coller ce qui suit :
#!/bin/sh
if [ "$1" = "" ]; then
echo "Vous ne m'avez pas donné le type d'architecture de votre ordinateur, par exemple pour Intel : i386 ; pour AMD64 : amd64"
return
fi
cd tmp_kernel_files && echo "Je dois être utilisé dans un répertoire où il n'y a pas de sous-répertoire nommé : tmp_kernel_files" && return
echo "Création du répertoire temporaire : ./tmp_kernel_files"
#0.) Création du répertoire temporaire : ./tmp_kernel_files
mkdir tmp_kernel_files
cd tmp_kernel_files
#1.) Télécharge les fichiers sources du dernier noyau linux :
apt-get build-dep linux-image-`uname -r`
apt-get source linux-image-`uname -r`
cd linux-`uname -r` || cd linux-`eval "uname -r" | cut -f1 -d-`
#2.) Ajoute "CONFIG_MEMSTICK=m" à debian/config/i386/config
echo CONFIG_MEMSTICK=m >> debian/config/$1/config || return
#3.) Compile le noyau entier :
AUTOBUILD=1 NOEXTRAS=1 skipabi=true fakeroot debian/rules binary-generic
#4.) Copie le pilote "Memory Stick" dans le noyau du système :
cp -r debian/linux-image-`uname -r`/lib/modules/`uname -r`/kernel/drivers/memstick /lib/modules/`uname -r`/kernel/drivers/
#5.) Applique les changements au système:
depmod -a
#6.) Nettoie les fichiers temporaires :
cd ..
cd ..
rm -r -f tmp_kernel_files
echo "Répertoire temporaire : ./tmp_kernel_files effacé"
  • Enregistrer sous : ~/memstick.sh
  • Fermer le fichier et le rendre exécutable
  • Ouvrir un terminal et taper :
  * chmod 755 ~/memstick.sh

ou

  • Utiliser la méthode graphique décrite ici et permettre l'exécution.
  • Et ben… maintenant, il faut ouvrir un terminal (là il n'y a pas le choix) ;-)
sudo apt-get install fakeroot
sudo sh ~/memstick.sh
Lors de l'exécution du script, il est demandé si le système est un i386 ou un AMD64
  • Une fois fini, insérer une carte, elle devrait fonctionner.

Note: aucune de ces 2 méthodes ne fonctionne pour le Ricoh Co Ltd R5C822.

Note 2: pensez à blacklister le module sdhci sur les versions récentes (10.04+), pour cela ajouter "blacklist sdhci" au fichier /etc/module (testé sous hp dv9000 avec Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro)

1 ere méthode

J'ai un portable Dell Inspiron 9400 qui intègre un lecteur de carte SD Ricoh. Ce lecteur marche très bien d'origine sur Windows XP mais n'est pas automatiquement détecté sur mon installation Ubuntu. Ce que ne voulons est simple, que la carte SD monte automatiquement dès son insertion dans le slot.

Pour ceci, il suffit d'éditer le même fichier que pour le contrôleur Texas après avoir fait peut-être une petite sauvegarde :

sudo cp /etc/modules /etc/modules.bak

Nous allons maintenant simplement éditer le fichier /etc/modules :

gksu gedit /etc/modules

Et rajouter à la fin de ce fichier dans une nouvelle ligne :

tifm_sd

Lors du redémarrage, votre lecteur de carte sera fonctionnel (normalement).

Pour tester avant de modifier /etc/modules, on peut se contenter de:
sudo modprobe tifm_sd


Sous 12.04, il peut être utile d'ajouter aussi au fichier /etc/modules non pas le module tifm_sd mais ceux là :

pciehp
acpiphp
jmb38x_ms
sdhci-pci
flash_bd
xd_card
jmb38x_xd

Ou encore :

tifm_7xx1
tifm_core
tifm_ms
tifm_sd
mmc_block
mmc_spi
Sur xubuntu 12.04, inspiron 6400, j'ai blacklisté le module shdci-pci, en ajoutant blacklist sdhci-pci dans /etc/modprobe.d/blacklist
Sur debian wheezy 7.0, Dell inspiron 6400, j'ai blacklisté le module r852 en ajoutant blacklist r852 dans /etc/modprobe.d/blacklist.conf

2 ieme méthode

Il existe une autre méthode pour activer votre lecteur de carte (testé avec un DELL inspiron 6400 )

tapez la commande :

lspci

vous allez avoir une liste, dans cette liste repérer la ligne qui contient :

SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter

à gauche de cette ligne vous avez quelque chose de ce genre :

03:01.1

ensuite il suffit de taper ces commandes en changeant le 03:01.1 par ce que vous avez vous :

sudo setpci -s 03:01.1 0xCA=0x57          ( write enable )
sudo setpci -s 03:01.1 0xCB=0x02          ( MMC Disable )
sudo setpci -s 03:01.1 0xCA=0x00          ( write disable )

et ca marche pour une carte du type MMC !

source : http://intr.overt.org/blog/?p=59

Pour que votre lecteur fonctionne, il faut Ouvrez le fichier /etc/modules avec les droits d'administration et rajoutez les 2 lignes suivantes à la fin du fichier :

tifm_sd
mmc_core

Installez le paquet libccid.

Le tarball (tar.bz2) - fichier archive des sources du pilote - est disponible dans Dépôt du paquet libccid dans Trusty Universe.

  • Décompressez l'archive;
  • Aller dans le dossier qui contient l'archive décompressée
  • Cliquer droit entre les fichiers > menu "Ouvrir dans un terminal";
  • Entrez votre mot de passe pour exécuter la compilation en tant qu'Administrateur
     sudo su 
Télécharger le paquet check Install afin de créer un paquet DEB à partir des sources
sudo apt-get install -f --fix-missing checkinstall

Retour à nos moutons:

  • Entrez la commande de compilation
    ./configure 

Si vous obtenez un message d'erreur, ne vous inquiétez pas! cette procédure n'est pas obligatoire mais nécessaire si la procédure est initiée par le processus de compilation. Poursuivez le processus de compilation du pilote;

  • Entrez
    make && make install && depmod && checkinstall

CheckInstall vous demande le nom du paquet DEB des sources du pilote;

  • Entrez
    O2 Micro Inc Oz776 SmartCard Reader 
  • Faîtes Entrée deux fois;

Checkinstall créé le paquet dans le répertoire des sources.

Bien que le driver de ce lecteur (rtsx_pci) ait été intégré au noyau sur les versions récentes (12.04.4 et ultérieur), il ne semble pas fonctionner chez tout le monde.

Une méthode de contournement consiste à utiliser l'ancien module (rts_bpp), comme décrit ci-après.

En attendant que ce problème soit résolu, merci de ne pas supprimer cette section. Hélas cette méthode ne fonctionne plus sous Ubuntu 16.04.

Le problème vient du fait que proc-info n'est plus présent dans les noyaux récents. Voir ici

Il faut donc supprimer les assertions relatives à proc_info :

  1. Télécharger les sources depuis launchpad :
  2. Extraire l'archive, Ouvrez le fichier rtsx.c (ou remplacez le par celui-ci déjà modifié) :
    1. Supprimer "_ _devinit" juste avant "rtsx_probe" à la ligne 893
    2. Supprimer "_ _devexit" juste avant "rtsx_remove" à la ligne 1048
    3. Enlever "_ _devexit_p()" autour de "rtsx_remove" à la ligne 1074
    4. Supprimer les lignes 125 à 156
      static int proc_info (struct Scsi_Host *host, char *buffer,
      char **start, off_t offset, int length, int inout)
      {
      char *pos = buffer;
      
      if (inout)
      return length;
      
      SPRINTF(" Host scsi%d: %s\n", host->host_no, CR_DRIVER_NAME);
      
      SPRINTF(" Vendor: Realtek Corp.\n");
      SPRINTF(" Product: Barossa Plusplus\n");
      SPRINTF(" Version: %s\n", DRIVER_VERSION);
      SPRINTF(" Build: %s\n", __TIME__);
      
      /*
      * Calculate start of next buffer, and return value.
      */
      *start = buffer + offset;
      
      if ((pos - buffer) < offset)
      return (0);
      else if ((pos - buffer - offset) < length)
      return (pos - buffer - offset);
      else
      return (length);
      }
    5. Supprimer la ligne 259 (227 si vous avez déjà supprimé les lignes précédentes)
      .proc_info = proc_info,
  3. Compiler avec "make" (les paquets "build-essential", "fakeroot" et "checkinstall" sont nécessaires, voir le tutoriel:compilation)
  4. Puis "sudo make install"
  5. Puis "sudo modprobe rts_bpp"(Si cela ne fonctionne pas faire 'sudo depmod -a' et réessayer)
  6. Blacklister rtsx_pci dans le fichier /etc/modprobe.d/rtsx_blacklist.conf en ajoutant sur une nouvelle ligne "blacklist rtsx_pci" (créer le fichier si il n'existe pas)
  7. Redémarrer

- - - - - - - - -


==== >

important

Sous Ubuntu 22.04 avec un Clevo/LDLC, le lecteur de carte semblait mort alors qu'un lecteur externe donnait accès à la carte SD sans problème.

Le message d'erreur était :

Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)

Les tentatives de compilation décrites ci-dessus échouaient avec un message d'erreur dès "make".

J'ai failli abandonner, puis j'ai suivi ces conseils :

sudo update-pciids && lspci -nn | grep "Card Reader" 

Puis :

Essayez quelque chose d'aussi simple que :

sudo modprobe -r rtsx_pci

sudo modprobe rtsx_pci

Avec ce commentaire : "En effet, le module rtsx_pci gère le lecteur de carte. Parfois, cela ne fonctionne pas correctement au démarrage."

Effet IMMÉDIAT, sans même redémarrer. Le lecteur de carte SD est redevenu fonctionnel. Les solutions par compilations ci-dessus semblent correspondre à un état antérieur d'Ubuntu. J'écris en mars 2024.

La veille, j'avais installé firmware-realtek_20230625-2_all.deb, un paquet Debian qui maintenant apparaît dans Synaptic et contient RTL8411. J'ai aussi installé le paquet Realtek r8168. Puis ultérieurement supprimé ce dernier paquet qui cause des erreurs dans dpkg. Le paquet Debian ne sert possiblement à rien. Le problème posé par Realtek Card Reader a donc une solution opérante mais aléatoire.;-) :-|

AUTRE SOLUTION (TORDUE) DE CONTOURNEMENT :

La carte mémoire en question, je la laisse en permanence insérée pour des sauvegardes. Il est possible d'ouvrir /etc/fstab et de rajouter une ligne pour que la carte SD soit chargée automatiquement au démarrage du système dans un fichier vide de "Media", par exemple, dédié à cet usage et créé pour cela.

Il me faut potasser fstab et mtab… quand j'aurai le temps. Le chargement en lecture seule que j'ai observé a des solutions sans passer par un clic droit. Mais la modification de /etc/fstab présente aussi des inconvénients. Un dernier recours.

MAINTENANT la carte SD se monte souvent au démarrage. Elle peut disparaître après une simple mise en veille de l'ordinateur. En cas d'absence du lecteur et de la carte, tenter « sudo modprobe rtsx_pci » ou « sudo modprobe rtsx_pci rtsx_pci_sdmmc », on croit que c'est le GRAAL ! Mais non, pas à chaque fois. Et même maintenant, ça ne marche plus pour moi ! La solution du problème restant aléatoire, il vaut mieux disposer d'un lecteur externe de carte mémoire qui, lui, branché sur un port USB, marche à tous les coups. La carte SD était visible aussi en démarrant sur la live-USB d'Ubuntu, preuve que les drivers et modules de 22.04 incluent tout ce qu'il faut pour Realtek Card Reader RTL8411 Device 5286/5289. Je comprends la prise de tête internationale sur ce problème agaçant. Le problème tient-il au modèle de lecteur ? Mon Clevo/LDLC n'est pas sans défauts et Clevo est spécifiquement mis en cause par d'autres sur ce problème. Faut-il chercher mieux que la situation actuelle quoique insatisfaisante ? Je m'en tiens là.

Le 02 octobre 2024, les solutions décrites ci-dessus qui étaient aléatoires, ne fonctionnent plus du tout. Les cartes SD sont inaccessibles avec le lecteur intégré. Puis, le 25 octobre, la carte SD se charge de nouveau sans aucune intervention, mais pas à chaque fois… Mon lecteur externe fonctionne sans souci, merci à lui.

  • lecteur_carte_memoire.txt
  • Dernière modification: Le 25/10/2024, 21:50
  • par jean3476