Julien De Bona
Free Software, Cooking, and Everything


Debian Sarge sur Soekris net4801

Publié le 2006-02-26.

Matériel

  • 1 Soekris net4801
  • 1 carte CompactFlash 512 MB
  • 1 lecteur de cartes CompactFlash USB2
  • 1 ordinateur (en l'occurence, iBook G4)
  • 1 terminal (j'ai utilisé un VT510, mais un émulateur genre minicom convient aussi)
  • 1 câble série null-modem pour relier la Soekris au terminal ou au PC sur lequel est installé l'émulateur de terminal

Logiciels

  • Un système UNIX sur l'ordinateur (j'ai utilisé Debian Sid PPC mise à jour le 27/2/2006)
  • Qemu
  • Un CD d'installation de Sarge (netinstall i386); il n'y a pas besoin de le graver: l'image ISO suffit

Notes sur le hardware

Le lecteur CompactFlash de la Soekris émule un disque dur IDE; il faud donc installer le système comme si c'était le cas. La seule interface locale (hors réseau) de la Soekris est le port série. Il est configuré en 19200bits/s, 8 bit de données, pas de parité, 1 bit d'arrêt et pas de contrôle de flux.

Procédure

La technique est simple: installer le système classiquement, puis placer la CompactFlash dans la Soekris.

Insérer le CD d'installation de Debian dans le lecteur de l'ordinateur et connecter le lecteur de carte, et y insérer la carte. La carte est alors reconnue comme un lecteur de disque SCSI (/dev/sda dans mon cas). Veiller à ce que l'utilisateur qui va lancer Qemu ait les droits d'écriture sur la carte. Dans le cas de Debian avec udev, elle est rattachée au groupe floppy, dont je suis membre et donc je n'ai rien à faire. Jouer du chmod ou du chown si nécessaire.

Démarrer ensuite Qemu comme suit:

qemu -hda /dev/sda -cdrom /dev/cdrom -boot d -m 64 -user-net

Qemu utilisera donc la carte CompactFlash comme disque IDE et le CD comme CD (on peut remplacer /dev/cdrom par une image ISO. La machine virtuelle démarre sur le CDROM (-boot d), a 64 MB de RAM (suffisant pour l'installation, laisse de la place pour le système hôte), et pourra accéder au réseau (et à Internet puisque mon réseau y est connecté).

Procéder à l'installation classique en ne faisant qu'une seule partition sur toute la carte. Pas besoin de swap (système embarqué et mémoire largement suffisante). Pour le filesystem, le bon vieux ext2 économise la taille d'un journal. Lors du redémarrage, arrêter qemu et le redémarrer sur la carte CompactFlash:

qemu -hda /dev/sda -boot c -m 64 -user-net

Ne sélectionner aucun package supplémentaire. Après coup, je me dis qu'il aurait mieux valu ne pas utiliser l'option -user-net car l'installeur installe quand-même plusieurs packages en plus de ceux installés depuis le CD.

Lorsque le système est installé, on obtient une occupation disque de 316 MB sur les 456 de la carte. On peut alors passer à la préparation du système pour la Soekris.

Ces modifications reposent sur une particularité de la Soekris: elle n'a ni clavier ni moniteur; la seule interface physique est le port série. Il va donc falloir, par commodité, y faire les affichages de GRUB, de la console et permettre d'y ouvrir une session. Configuration de GRUB

La configuration de GRUB se trouve dans /boot/grub/menu.lst. Attention, Debian manipule ce fichier par la commande update-grub, qui se charge de créer le fichier à partir de commentaires spéciaux qui y sont placés (après la ligne "### BEGIN AUTOMAGIC KERNELS LIST").

Comme indiqué dans le fichier, il faut mettre au début la configuration globale de GRUB. Il faut d'abord définir et configurer le port série, puis indiquer à GRUB d'utiliser ce port pour ses affichages:

serial --unit=0 --speed=19200 --word=8 --stop=1 --parity=0
terminal serial

Il faut ensuite passer au kernel les options nécessaires pour afficher sa console sur le port série, et ainsi pouvoir suivre son démarrage. Dans la portion AUTOMAGIC KERNELS LIST , repérer la ligne # kopt=... (c'est la première option de cette portion), et y ajouter console=ttyS0,19200n8 , ce qui donne:

# kopt=root=/dev/hda1 ro console=ttyS0,19200n8

Ensuite, lancer la commande update-grub. On voit alors, en rééditant le fichier, que dans les définitions des kernels (juste après ## ## End Default Options ##), que la ligne kernel a été mise à jour en conséquence:

kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro console=ttyS0,19200n8

Configuration du login

Maintenant, il faut pouvoir ouvrir un shell sur le port série. Cela se fait en éditant /etc/inittab. On y trouve tout en bas deux exemples (lignes commençant par T0 et T1, dont il suffit de s'inspirer:

T0:23:respawn:/sbin/getty -L ttyS0 19200 vt100

Ensuite, il suffirait d'envoyer un signal à init pour prendre en compte les changements, mais comme on doit arrêter la machine virtuelle pour placer la carte Flash dans la Soekris, on peut s'en passer. J'arrête donc la machine de la manière traditionnelle, place la carte Flash dans la Soekris, configure mon terminal conformément au manuel de la Soekris, le connecte sur le port série, raccorde la première carte réseau de la Soekris (celle juste à côté du port série) à mon réseau (avec serveur DHCP et accès à Internet (en effet, l'option -user-net de Qemu a fourni ce serveur lors de l'installation). Je la démarre et ... ça marche!

Il y a cependant quelques petits problèmes avec GRUB: il ne vide pas complètement l'écran du terminal, est très lent à s'afficher et ne réagit pas aux flèches pour changer de kernel.

A ce point, je peux ouvrir une session sur le port série, et faire connaissance avec la bête. Je récupère l'adresse IP avec ifconfig, puis je me connecte depuis mon ordinateur via SSH pour copier-coller la suite:

julien@grappa:~$ ssh root@192.168.128.2
The authenticity of host '192.168.128.2 (192.168.128.2)' can't be established.
RSA key fingerprint is 07:f4:fe:28:9e:31:aa:33:47:92:ba:88:c5:d7:1e:e5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.128.2' (RSA) to the list of known hosts.
Password: 
Last login: Thu Mar 27 00:20:53 1980
soekris:~# cat /proc/cpuinfo 
processor       : 0
vendor_id       : Geode by NSC
cpu family      : 5
model           : 9
model name      : Unknown
stepping        : 1
cpu MHz         : 266.656
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu tsc msr cx8 cmov mmx cxmmx
bogomips        : 522.24
soekris:~# free
total       used       free     shared    buffers     cached
Mem:        127024      25908     101116          0       1544      14232
-/+ buffers/cache:      10132     116892
Swap:            0          0          0
soekris:~# lspci
0000:00:00.0 Host bridge: Cyrix Corporation PCI Master
0000:00:06.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
0000:00:07.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
0000:00:08.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
0000:00:12.0 ISA bridge: National Semiconductor Corporation: Unknown device 0510
0000:00:12.1 Bridge: National Semiconductor Corporation: Unknown device 0511
0000:00:12.2 IDE interface: National Semiconductor Corporation SCx200 IDE (rev 01)
0000:00:12.5 Bridge: National Semiconductor Corporation: Unknown device 0515
0000:00:13.0 USB Controller: Compaq Computer Corporation ZFMicro Chipset USB (rev 08)
soekris:~# lsmod
Module                  Size  Used by
ipv6                  229892  12 
af_packet              20872  2 
ohci_hcd               19460  0 
usbcore               104164  3 ohci_hcd
natsemi                25824  0 
capability              4872  0 
commoncap               7168  1 capability
psmouse                17800  0 
ide_cd                 38176  0 
cdrom                  35740  1 ide_cd
genrtc                  9332  0 
ide_generic             1664  0 
sc1200                  8456  1 
ide_disk               16768  2 
ide_core              125028  4 ide_cd,ide_generic,sc1200,ide_disk
unix                   26036  12 
font                    8576  0 
vesafb                  6688  0 
cfbcopyarea             3840  1 vesafb
cfbimgblt               3200  1 vesafb
cfbfillrect             3712  1 vesafb
soekris:~# df
Sys. de fich.        1K-blocs       Occupé Disponible Capacité Monté sur
/dev/hda1               466662    322686    119077  74% /
tmpfs                    63512         0     63512   0% /dev/shm
soekris:~#

Et voilà. Les cartes Ethernet utilisent le module natsemi, la carte CompactFlash est pilotée par les drivers ide et sc1200, et le port USB est un port 1.1 OHCI (module ohci_hcd). De cette configuration, il reste à ajouter ce qui manque et retirer ce qui est en trop. On peut aussi vérifier que l'heure est à jour.

Comme je prévois de tester d'autres choses, je réinsère la CompactFlash dans mon ordinateur et la sauvegarde d'un dd if=/dev/sda of=soekris-debian.img. C'est l'histoire d'une minute à 8.3 MB/s.


tags: linux, reseau, soekris, embarque

Quelques tags ...