Bien que tournant sous linux, le zaurus est livré avec un ensemble
d'utilitaires pour windows, mais pas linux. Enfin, signalons quand même qu'il
existe une version de Qtopia Desktop pour linux librement téléchargeable sur le
site de trolltech. Ce qui nous intéresse dans cet article est de connecter le
zaurus en réseau TCP/IP avec le PC, sous linux, sans ajouter de matériel, c'est
à dire en utilisant le socle et la liaison USB.
On peut en effet utiliser d'autres techniques pour connecter le Zaurus au PC
comme une carte WiFi, une carte réseau, ou même au prix de quelques efforts,
une liaison bluetooth. Ces techniques demandant l'acquisition de matériel
supplémentaire, aussi bien pour le PC que pour le Zaurus, je ne les traiterai
pas ici.
J'ai utilisé, pour la rédaction de cet article, un PC portable tournant sous
linux debian woody tenue à jour avec notamment un noyau 2.4.21 téléchargé sur
kernel.org. Le Zaurus, quand à lui, utilise une ROM 3.10, de chez Sharp.
Préparer le Zaurus
A vrai dire, il n'y a pas grand chose à faire côté zaurus, au moins dans un
premier temps. Raccordez le bloc secteur au socle et enclenchez y le zaurus.
Ensuite, dans l'onglet Settings, choisissez PC Link.
Vérifiez sous Connection: que la valeur sélectionnée est bien USB -
TCP/IP (advanced).
C'est tout pour l'instant.
Sur le PC
Je suppose dans cet article que je m'adresse à des gens qui savent recompiler
un noyau et qui sont à l'aise avec la procédure à suivre dans le cas général.
Pour les néophytes, reportez vous aux nombreuses documentations détaillant la
marche à suivre (dans linux pratique ou sur lea-linux.org par exemple).
Un noyau
La méthode que je donne ici est générique et devrait convenir à toutes les
distributions (à quelques modifications près). En contrepartie, ce n'est pas
forcément la plus simple. Vous pouvez visiter http://docs.zaurus.com/ pour voir
si une méthode plus simple existe pour votre distribution ou votre noyau mais
cette page étant ancienne, elle ne donne pas la méthode présentée ici, qui
tient compte du fait que le module nous intéressant (usbnet) n'a été que
récemment intégré au noyau linux.
Vous l'aurez compris, vous devez posséder sur le PC un noyau possédant les
fonctionnalités adaptées à la mise en place d'un réseau sur le port usb. Je
vous donne ici des indications à suivre pour un noyau 2.4.21, dernier stable
disponible lors de la rédaction de l'article et premier à fournir le
module usbnet (on n'utilise donc plus un patch usbdnet).
Vérifiez donc et/ou faites les modifications nécessaires à votre noyau grâce
à la commande make xconfig ou make menuconfig, personnellement, je préfère la
seconde car elle donne moins une impression de fouillis et surtout parce
qu'elle ne requiert pas d'environnement X. C'est une bonne habitude à
prendre de travailler en mode console pour des tâches de maintenance, ainsi, si
un jour vous devez administrer un serveur à distance, une mise à jour du noyau
via ssh ne vous fera pas peur ;-).
Voici les options à vérifier/modifier :
- Dans Code maturity level options, sélectionnez Prompt for
development and/or incomplete code/drivers
- Dans USB support, sélectionnez Support for USB, le contrôleur
correspondant à votre cas parmi UHCI (Intel PIIX4, VIA, ...) support, UHCI
Alternate Driver (JE) support, OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...)
support et EHCI HCD (USB 2.0) support (EXPERIMENTAL) ainsi que
USB-to-USB Networking cables, Linux PDAs, ... (EXPERIMENTAL)
- Dans General setup, Support for hot-pluggable devices qui
nous servira en fin d'article, dans la section hotplug.
Faut-il mettre ces options en module ou les inclure dans le noyau ?
Personnellement, je vous conseille d'inclure dans le noyau ce qui est toujours
sur votre PC et en modules ce qui n'y est attaché que par moments. C'est
pourquoi, je vous encourage à mettre le support usb et éventuellement le pilote
du contrôleur dans le noyau et usbnet en module mais je ne force personne
...
Compilez et installez le noyau selon la méthode
habituelle en n'oubliant pas de copier le nouveau noyau et de relancer votre
chargeur (lilo, grub ou autre), connectez le zaurus à votre pc et rebootez.
Lors du démarrage si vous avez suivi mes conseils ou après avoir chargé les
modules usbcore et usb-uhci (par exemple), vous devriez obtenir ces messages
dans /var/log/messages ou en tapant dmesg. Si non, relisez l'article, il y a un
problème quelque part. Si oui, vous constatez que l'on retouve bien le couple
vid/pid du zaurus (Vendor ID, Product ID, le couple d'identifiants permettant
de relier un driver à un périphérique donné selon la norme usb)
hub.c: new USB device 00:1d.0-1, assigned address 2
usb.c: USB device 2 (vend/prod 0x4dd/0x8004) is not claimed by any active
driver.
Vous pouvez vérifier que tout c'est bien passé en tapant les commandes
suivantes :
ZazouMobile:/home/zazou# modprobe usbnet
ZazouMobile:/home/zazou# ifconfig usb0 up 192.168.129.1
ZazouMobile:/home/zazou# ifconfig usb0
usb0 Link encap:Ethernet HWaddr 6E:EF:75:60:19:F6
inet addr:192.168.129.1 Bcast:192.168.129.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2251 (2.1 KiB) TX bytes:0 (0.0 b)
ZazouMobile:/home/zazou# ping 192.168.129.201
PING 192.168.129.201 (192.168.129.201): 56 data bytes
64 bytes from 192.168.129.201: icmp_seq=0 ttl=255 time=2.8 ms
64 bytes from 192.168.129.201: icmp_seq=1 ttl=255 time=1.5 ms
64 bytes from 192.168.129.201: icmp_seq=2 ttl=255 time=3.4 ms
64 bytes from 192.168.129.201: icmp_seq=3 ttl=255 time=1.2 ms
--- 192.168.129.201 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.2/2.2/3.4 ms
ZazouMobile:/home/zazou#
Vous êtes en réseau avec votre Zaurus, vous pouvez donc vous connecter aux
serveurs disponibles sur le zaurus (comme ssh par exemple si vous l'avez
installé).
hotplug
On a réussi à configurer tout cela et ça marche ... Mais bon, retaper la
configuration réseau et devoir charger le module à la main à chaque fois, c'est
fatigant. On va se servir de la fonctionnalité hotplug sous linux
permettant au PC de détecter l'insertion de périphériques et d'assurer seul la
(re)configuration nécessaire.
L'hotplug est constitué de deux parties, une partie kernel qui envoie au mode
utilisateur des informations sur les périphériques que l'on connecte ou
déconnecte des ports usb et une partie utilisateur, les scripts qui reçoivent
d'une manière ou d'une autre les informations de connexion et chargent les
modules adéquats.
La partie kernel est prise en charge par un thread kernel khubd
et le script en mode utilisateur peut être choisi en éditant la valeur
/proc/sys/kernel/hotplug . Par défaut, il s'agit de
/sbin/hotplug
Cette partie kernel est opérationelle si vous avez suivi jusqu'ici les
instructions de l'article, en cochant l'option Support for hot-pluggable
devices lors de la configuration du kernel. Vous pouvez vérifier à
l'aide de dmesg ou dans /var/log/messages ou /var/log/syslog qu'il
fonctionne en connectant/déconnectant vos périphériques usb grâce à des messages
comme :
kernel: usb.c: new USB device 00:1d.0-1, assigned address 3
kernel: hub.c: USB device 3 (vend/prod 0x4dd/0x8004) is not claimed by any
active driver.
La nécéssité de l'hoplug est mise en évidence par le deuxième message.
Nous savons, nous, qu'il faut utiliser usbnet pour le Zaurus mais le système
doit l'avoir chargé pour s'en rendre compte, puisque chaque module annonce
lui-même de quels périphériques il s'occuppe.
Pour s'en convaincre, déconnectons le Zaurus, chargeons le module usbnet
(modprobe usbnet ) et reconnectons le. Voici les messages
obtenus :
kernel: usb.c: USB disconnect on device 00:1d.0-1 address 3
kernel: usb.c: registered new driver usbnet
kernel: hub.c: new USB device 00:1d.0-1, assigned address 4
kernel: usb0: register usbnet usb-00:1d.0-1, Sharp Zaurus SL-5x00
La première correspond à la déconnexion, la seconde au modprobe. Les deux
dernières sont la reconnexion et la prise en charge par usbnet, qui a
reconnu un Zaurus SL5x00. Bon, ça a marché, déconnectez le Zaurus et
déchargez le module (modprobe -r usbnet ).
Ce que nous allons faire en installant les scripts de hotplug, c'est faire
charger le bon module et configurer la connexion réseau au moment de la
connexion USB.
L'installation se déroule, sous debian en tapant apt-get
install hotplug . Ceci devrait vous gratifier des messages suivants :
Unpacking hotplug (from .../hotplug_0.0.20020114-7_all.deb) ...
Setting up hotplug (0.0.20020114-7) ...
Starting hotplug subsystem: usb.
Updating /etc/hotplug/usb.usermap ...done.
Pour les autres distributions, vous trouverez votre bonheur sur le site
linux-hotplug (ou en rpm, tgz, etc...) mais sachez que l'installation, si
elle n'a pas été faite au moment de l'installation, n'est jamais très
compliquée.
Les scripts utilisent, entre autres, le fichier
/lib/modules/(votre_version_de_kernel)/modules.usbmap pour
faire correspondre un module à un périphérique. Ce fichier est automatiquement
généré quand vous faites un depmod -a . Pour une raison que
j'ignore ce fichier contient une erreur de masque qui empêche la reconnaissance
du Zaurus. Editer ce fichier n'est pas une bonne solution à long terme
puisqu'il est réactualisé automatiquement. Vous pouvez utiliser les fichiers de
description de périphérique locaux, dans le répertoire /etc/hotplug (ou
modifier les entrées du module, à la fin du fichier source usbdnet.c). Donc,
ajoutez dans /etc/hotplug/usb.handmap la ligne du fichier modules.usbmap
contenant usbnet et 0x0383 0x04dd 0x8004 .
Remplacez-y 0x0383 par 0x0003, c'est à dire quelque chose comme :
usbnet 0x0003 0x04dd 0x8004 0x0000 0x0000 0x00 0x00 0x00 0x02 0x0a 0x00
0x00003800
L'important est que la ligne contienne usbnet 0x0003 0x04dd
0x8004 les autres valeurs peuvent être à 0. Une dernière astuce :
vous pouvez également ajouter cette ligne dans usb.usermap et ajouter
modprobe usbnet dans le script /etc/hotplug/usb/usbnet que nous
créerons dans quelques lignes. En effet, le fichier usb.handmap
contient des périphériques pour lesquels on tente de charger un module et de
lancer un script alors que pour les périphériques contenus dans
usb.usermap , on ne fait que lancer un script. Naturellement, si
le fichier /lib/modules/.../modules.usbmap contient les bonnes valeurs, tout
ceci n'est pas à faire.
Dans le cas où vous décideriez de modifier le module usbnet, il vous
suffit de remplacer à la fin du fichier source du module la section suivante
:
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO
| USB_DEVICE_ID_MATCH_DEVICE,
.idVendor = 0x04DD,
.idProduct = 0x8004,
par
.match_flags = USB_DEVICE_ID_MATCH_DEVICE,
.idVendor = 0x04DD,
.idProduct = 0x8004,
Ensuite, un simple make modules modules_install suffira à faire fonctionner
le hotplug, car le fichier modules.usbmap aura été mis à jour avec un
masque correct.
Il nous faut configurer l'interface réseau lorsque le module est chargé.
Dans notre cas, un script /etc/hotplug/usb/usbnet sera exécuté s'il
existe et est exécutable. Donc, on crée le répertoire et le script, c'est à
dire au minimum :
#!/bin/bash
#
ifconfig usb0 up 192.168.129.1
Les options supplémentaires ne sont pas nécessaires, les valeurs par
défaut étant adaptées.
N'oubliez pas de rendre ce fichier exécutable en
tapant chmod a+x /etc/hotplug/usb/usbnet et pluggez le Z...
A présent lorsque vous connectez votre zaurus, tout est effectué
automatiquement et vous pouvez directement vous y connecter, par exemple par
ssh en tapant ssh root@192.168.129.201
Partage de connexion
On va maintenant permettre au zaurus d'utiliser le réseau auquel est connecté
le PC pour naviguer sur Internet, partager et accéder à des fichiers et
ressources diverses, etc... Tout ce qui fait que l'on a tous envie d'être
connectés ;-)
Sur le PC : le PC doit router les paquets vers/depuis le Zaurus et
faire du masquerading, on lui dit de s'acquitter de cette tâche grâce aux
commandes suivantes que vous pouvez ajouter au script d'hotplug vu plus haut.
L'exemple ci dessous correspond à un PC connecté à internet via son interface
eth0, pour laquelle l'IP est 192.168.1.2 :
iptables -t nat -F
iptables -t nat -A POSTROUTING -j SNAT -o eth0 --to 192.168.1.2
echo 1 > /proc/sys/net/ipv4/ip_forward
Sur le Zaurus : vous devez dire au Zaurus par où envoyer ses packets.
On lui ajoute donc une passerelle (gateway) par défaut.
route add default gw 192.168.129.1
Nous verrons quelques lignes plus bas où ajoutez cette ligne pour
qu'elle soit automatiquement exécutée.
Reste le problème du proxy et du dns... Dans la nouvelle version de sa ROM,
l'interface graphique ne permet plus de les spécifier pour la connexion
via usb. Le problème est que le zaurus garde donc les valeurs valides
pour la dernière connexion réseau via carte CF ou SD, ce qui ne
correspond pas forcément à la bonne configuration...
La solution consiste à créer deux fichiers que l'on remplace quand le besoin
s'en fait sentir :
/etc/resolv.conf.usbdnet doit contenir vos dns, dans mon cas, il
s'agit de ceux de Nerim, j'obtiens donc le fichier suivant :
nameserver 62.4.16.70
nameserver 62.4.16.69
/home/root/Applications/Network/modules/Proxies.conf.usbdnet
doit contenir les infos de proxy, c'est à dire la plupart du temps, un fichier
vide. Vous pouvez toutefois le remplir en vous servant de l'existant (si vous
avez déjà configuré un réseau par carte sur le Zaurus)
/home/root/Applications/Network/modules/Proxies.conf , en remplaçant les
hôtes et les numéros de ports pour les faire correspondre à ceux de votre
réseau. La syntaxe du fichier est relativement simple.
Modifions enfin le fichier /etc/hotplug/usbd.func du Zaurus, qui contient
les fonctions appélées lors des connexion et déconnexion du support.
Dans usbd_net_if_up() , ajoutez avant la dernière accolade les
lignes suivantes :
/sbin/route add default gw 192.168.129.1
mv /home/root/Applications/Network/modules/Proxies.conf /home/root/Applications/Network/modules/Proxies.conf.bak
cp /home/root/Applications/Network/modules/Proxies.conf.usbdnet /home/root/Applications/Network/modules/Proxies.conf
mv /etc/resolv.conf /etc/resolv.conf.bak
cp /etc/resolv.conf.usbdnet /etc/resolv.conf
Dans usbd_net_if_down() , ajoutez avant la dernière accolade
fermante :
mv /home/root/Applications/Network/modules/Proxies.conf.bak /home/root/Applications/Network/modules/Proxies.conf
mv /etc/resolv.conf.bak /etc/resolv.conf
Cet article me paraissait plus simple qu'il ne l'est vraiment lorsque
je l'ai commencé, j'espère qu'il vous aura aidé à mieux connaître votre Z et
linux en général et qu'il n'aura pas été trop ardu ...
@+
Xavier Garreau - <xavier@xgarreau.org>
http://www.xgarreau.org/
Ingénieur de recherche PRIM'TIME TECHNOLOGY
http://www.prim-time.fr/
Membre fondateur du ROCHELUG
http://www.rochelug.org/
Liens & Références :
- Sharp Zaurus Developer site : http://docs.zaurus.com/
- linux-hotplug : http://linux-hotplug.sourceforge.net
- IP Masquerade HOWTO : http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/
Auteur : Xavier GARREAU
Modifié le 04.08.2003
|