Tutoriel: Ajouter un lecteur de cartes à votre Linksys WRT54G

LinuxWRT Powered

Par Rasmus Rohde et Mads Ulrik Kristoffersen, traduction Ludovic Médard

Ce projet est destiné aux personnes qui souhaitent ajouter un peu de stockage à leur Linksys WRT54G sans toucher à la mémoire de l’appareil. Ce que nous ferons sera de relier un lecteur de cartes à certaines des broches GPIO du CPU du Linksys et avec l'aide d'un driver nous pouvons l’employer comme un dispositif de Linux. Ceci signifie que si vous compilez votre kernel pour le Linksys avec, par exemple le support de MSDOS et VFAT vous pourrez monter, lire, et écrire les partitions voir plus sur une SD carte classique. La vitesse obtenue pour la lecture et l’écriture semble être environ 200 KB/s.

Photos

Ce dont vous avez besoin

Comment procéder

1. Pour que la carte fonctionne nous devons souder les six fils dans le routeur. Ce schéma devrait vous donner une idée des broches qui vont servir:

.

1.  CS - Chip Select for the SD card

2.  DI - Entrée des données

3. VSS - La terre est une bonne chose

4. VDD - Nous avons besoin de puissance bien sur. 3.3V fera le travail

5. CLK - L'horloge que nous produisons pour la carte

6. VSS2 - Une autre terre est également utile

7. DO - Sortie des Données

Nous piloterons la carte en mode SPI, signifiant que seulement une des quatre données de sortie  sera employée (borne 7). L'obtention de Spéc. pour piloter la carte en mode natif est TRÈS coûteuse et en outre le nombre limité de broches GPIO disponibles à l'intérieur du routeur exige également l'utilisation d'une certaine sorte de protocole. Les deux broches VSS peuvent simplement être câblées ensemble pour ce projet (VSS2 est employé pour commander le mode de sommeil de la carte). A cela jetons un regard aux soudures à faire dans le routeur.

1.       Les trois premiers points de soudure sont situés à RP3.

2.       Les deux suivants sont au  JP1

3.       Le dernier point est à la DEL DMZ

 

Procédez en soudant un fil à chacun des 6 points de soudure. Il faut avoir une attention particulière aux court circuit aux broches de RP3 -  ces points de soudure ont été choisis parce qu'ils fournissent l'accès le plus spacieux aux pistes GPIO requises !
2. Maintenant les fils devraient être correctement soudés à l'intérieur du routeur, de sorte que nous puissions continuer à les relier à la carte (lecteur). Cette image montre le lecteur de cartes. Il est assez facile de souder sur celui-là.
3. Montez le lecteur de cartes quelque part à l'intérieur de votre routeur. Nous
avons choisi le côté droit du capot, en percent les deux bords afin de pouvoir insérer et retirer la carte couvercle fermé. Voyez les liens  au dessus de la page pour voir ce que ressemble ceci à et vérifiez cette image de ce trou.
4.C'était facile. 
Nous sommes maintenant prêts pour la partie logicielle.

Partie logicielle

D’abord nous allons configurer le kernel de manière a supporter le MSDOS et la VFAT. Le support des partitions doit être ajouter dans le kernel alors que le support VFAT doit être ajouter comme un module dans le kernel. Voici quelques petites choses que vous pouvez vouloir inclure dans votre config :

CONFIG_PARTITION_ADVANCED=y
CONFIG_MSDOS_PARTITION=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y

Maintenant récupérez le driver et le  Makefile. Vous devrez modifier le fichier Makefile jusqu’a l’endroit les entêtes de votre noyau linux OpenWRT sont “the mipsel compiler location”. Quand c’est bon, faite juste un make (ignorez les warnings – c’est bon).

Le module est maintenant prêt à être inséré. Assurez-vous qu’une carte est placée dans le lecteur et puis chargez le module. Vérifiez avec dmesg que tout c’est bien passé, et si tout va bien vous devriez maintenant avoir un nouveau périphérique /dev/mmc/... Voici un extrait du répertoire

root@radio:~# ls -al /lib/modules/2.4.20/
drwxr-xr-x    1 root     root            0 Jan  1 00:08 .
drwxr-xr-x    1 root     root            0 Jan  1 00:01 ..
lrwxrwxrwx    1 root     root           28 Jan  1 00:01 et.o -> /rom/lib/modules/2.4.20/et.o
-rw-r--r--    1 root     root        50616 Jan  1 00:02 fat.o
-rw-r--r--    1 root     root        12780 Jan  1 00:08 mmc.o
-rw-r--r--    1 root     root        11244 Jan  1 00:03 msdos.o
-rw-r--r--    1 root     root        19156 Jan  1 00:05 vfat.o
lrwxrwxrwx    1 root     root           28 Jan  1 00:01 wl.o -> /rom/lib/modules/2.4.20/wl.o
root@radio:~# insmod mmc
Using /lib/modules/2.4.20/mmc.o
root@radio:~# dmesg | tail -7
mmc Hardware init
mmc Card init
mmc Card init *1*
mmc Card init *2*
Size = 249856, hardsectsize = 512, sectors = 499712
Partition check:
 mmca: p1
root@radio:~# insmod fat
Using /lib/modules/2.4.20/fat.o
root@radio:~# insmod msdos
Using /lib/modules/2.4.20/msdos.o
root@radio:~# mount /dev/mmc/disc0/part1 /mnt -tmsdos
root@radio:~# ls -al /mnt
drwxr-xr-x    2 root     root        16384 Jan  1  1970 .
drwxr-xr-x    1 root     root            0 Jan  1 00:01 ..
-rwxr-xr-x    1 root     root            0 Jan  1 00:07 bossepr0.pic
-rwxr-xr-x    1 root     root        22646 Jan  1 00:02 ld-uclib.so
-rwxr-xr-x    1 root     root        12780 Jan  1  2000 mmc.o
-rwxr-xr-x    1 root     root      1048576 Jan  1  2000 temp.bin
-rwxr-xr-x    1 root     root     16777216 Jan  1  2000 temp2.bin
-rwxr-xr-x    1 root     root     16777216 Jan  1  2000 temp3.bin
-rwxr-xr-x    1 root     root          693 Jan  1  2000 temp4.bin
root@radio:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/root                  896       896         0 100% /rom
/dev/mtdblock/4           2176      1580       596  73% /
/dev/mmc/disc0/part1    249728     33856    215872  14% /mnt

Un peu d’aide pour la compilation du kernel

La manière la plus facile d'avoir un noyau qui fonctionne avec le support des file system désiré est de télécharger OpenWRT et de compiler l'image.

Quand vous vous serez familiarise avec ce processus, il est tres facile de changer ensuite les paramètres du noyau.

Allez dans le repertoire buildroot/build_mipsel/linux et exécuter la commande make menuconfig, allez ensuite sur FileSystems->Partition Types et activer les options "Advanced partition selection" et "PC BIOS (MSDOS partition tables)".

Dans "File systems" vous devez aussi activer "DOS FAT fs support" et si vous le voulez "VFAT (WIndows 95) fs support". Quand cela est fait, sauvez la configuration et ensuite quitter le configurateur du noyau. Exécutez les commandes make dep zImage pour faire une recompilation du noyau.

Ensuite vous pouvez recompiler votre OpenWRT image et le nouveau noyau sera inclus automatiquement

Broches GPIO, hein?

Le processeur intégré Broadcom BCM4712 utilise dans le WRT54G donne accès a des broches d'entrée/sortie (ou GPIO broches) qui sont utilise dans différents routeurs. Nous avons pu identifier 8 broches jusqu'a maintenant et sont assignes comme suit:

 

Pin

Direction

Name

GPIO 0

(Output)

WLAN LED

GPIO 1

Output

POWER LED

GPIO 2

Output

ADM_EECS

GPIO 3

Output

ADM_EESK

GPIO 4

Input

ADM_EEDO

GPIO 5

Output

ADM_EEDI

GPIO 6

Input

Reset button

GPIO 7

Output

DMZ LED

 

Les broches utilisées pour ce projet sont les broches ADM_EESK, ADM_EEDO, ADM_EEDI et DMZ LED. Les broches ADM_* sont utilises comme une interface afin de configurer la puce ADMTek switch. Du fait qu'elles ne soient utilises que durant le boot, nous sommes libres de les utiliser pour notre propre usage (les broches correspondantes seront configures après en tri-state). Le nom des autres broches se décrivent d'elles mêmes. La direction des broches peuvent être configurées individuellement (même si cela ne correspond pas a la fonction principale de chaque broche).


Valid XHTML 1.0!