L'objet de ce howto 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:
alex@alex-laptop:~$ 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
pezzos@ubuntu-laptop:~$ 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.
Valable à partir des noyaux 2.6.20, ce qui exclut Dapper (merci de remonter d'éventuelles astuces)
Ne fonctionne plus à partir de Intrepid Ibex : Ubuntu 8.10
Dans ce cas, pour essayer de charger une carte sd, il faut activer les modules suivants:
$ sudo modprobe tifm_sd $ sudo modprobe mmc_core
Si cela fonctionne, vous pouvez charger ces modules au démarrage :
$ sudo gedit /etc/modules
et les inserer à la suite des autres :
tifm_sd mmc_core
Il semble que dans certain cas le second module n'est pas nécessaire, en particulier dans le cas de l'utilisation d'une carte SD. A vous de voir !
Si vous n'arrivez toujours pas à faire fonctionner votre lecteur de carte, vous pouvez essayer de recompiler vous même le pilote.
On va d'abord aller chercher le pilote :
svn co -r155 http://svn.berlios.de/svnroot/repos/tifmxx/trunk/driver/
On se place dans le dossier du pilote :
cd driver
On va chercher le patch :
wget http://www.sw83.de/misc/tifm_ms.patch
patch -p0 < tifm_ms.patch make sudo make install
Enfin insérez votre carte et ça devrait fonctionner ! :
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. Le tuto explique comment recompiler le kernel pour obtenir le pilote. Par la suite, libre à vous d'installer le kernel fraîchement compilé ou de juste utiliser le pilote.
sudo apt-get build-dep linux-image-`uname -r`
sudo apt-get source linux-image-`uname -r`
cd linux-`uname -r`
ou
cd linux-`eval "uname -r" | cut -f1 -d-`
suivant lequel fonctionne.
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
# CONFIG_MEMSTICK is not set
CONFIG_MEMSTICK=m
sudo AUTOBUILD=1 NOEXTRAS=1 skipabi=true fakeroot debian/rules binary-generic
sudo cp -r debian/linux-image-`uname -r`/lib/modules/`uname -r`/kernel/drivers/memstick /lib/modules/`uname -r`/kernel/drivers/ sudo depmod -a
#!/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é"
* chmod 755 ~/memstick.sh
ou
sudo apt-get install fakeroot sudo sh ~/memstick.sh
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)
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).
sudo modprobe tifm_sd
pciehp acpiphp jmb38x_ms sdhci-pci flash_bd xd_card jmb38x_xd
et ça marche…
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
Gutsy Gibbon | uniquement avec les cartes SD |
Hardy Heron | testé avec mini sd dans adaptateur, fonctionne, mais pas de detection automatique d'insertion |
Pour que votre lecteur fonctionne, il faut éditer comme suit le fichiers “modules” :
sudo gedit /etc/modules Editer le fichier en root en mode graphique n'est pas une très bonne idée
et rajoutez les 2 lignes suivantes à la fin du fichier :
tifm_sd mmc_core
Télécharger le pilote dans le dépôt Trusty Universe
Paquet : libccid (1.4.15-1) [universe]
Le tarball (tar.bz2) - fichier archive des sources du pilote - est disponible dans Dépôt du paquet libccid dans Trusty Universe.
Dans Némo:
sudo su
sudo apt-get install -f --fix-missing checkinstall
Retour à nos moutons:
./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;
make && make install && depmod && checkinstall
CheckInstall vous demande le nom du paquet DEB des sources du pilote;
O2 Micro Inc Oz776 SmartCard Reader
Checkinstall créé le paquet dans le répertoire des sources.
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.
Ce lecteur de carte SD n'est pas reconnu par défaut sur Ubuntu 12.04. Heureusement, c'est un bug connu et un paquet deb existe pour le corriger !
Il suffit de le télécharger et de l'installer : http://planet76.com/drivers/realtek/rts-bpp-dkms_1.1_all.deb.
Le lecteur sera alors fonctionnel au prochain redémarrage.
Cette solution donnée ici : https://bbs.archlinux.org/viewtopic.php?pid=1263089#p1263089, traduite ci dessous, fonctionne parfaitement avec le nouveau noyau :
erreur: unknown field ‘proc_info’ specified in initializer .proc_info = proc_info,
La méthode décrite pour 12.04 ne fonctionne plus. Le problème vient du fait que proc-info n'est plus présent dans les kernel récents. https://forums.gentoo.org/viewtopic-t-974708-start-0.html
Il faut donc compléter la méthode mentionnée pour Ubuntu 12.04.2 et 12.04.3, en supprimant les assertions relatives à proc_info :
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); }
.proc_info = proc_info,