Chibi-nah::blog

Des geekeries, de la MAO, de tout et de rien…

Archives

NetBSD sur une carte Olimex LIME 2

Photo d'une carte Olimex LIME 2

Un petit article tout simple, qui explique comment installer rapidement NetBSD sur une carte Olimex LIME 2.

Ça ne servira pas forcément à grand-chose. C'est plus pour le sport/fun/amusement/parce que c'est possible (rayer les mentions inutiles).

Pour commencer, il faut :

  • Une carte Olimex LIME 1 ou LIME 2. Perso, j'ai utilisé ma Brique Internet que j'utilise pour faire les tests.
  • Une carte au format microSD (que j'appellerai SD dans l'article par commodité) et un adaptateur microSD -> SD. Le minimum serait 2 Go, j'ai utilisé une microSD de 16 Go en classe 10.
  • Un câble série à brancher sur le connecteur UART de la carte, et un logiciel (genre microcom) pour pouvoir l'utiliser.
  • Un ordinateur sous GNU/Linux (de préférence) ou *BSD. Les MACs, ça a beau être basé sur FreeBSD (+ micronoyau MACH), ça ne compte pas. Windows, on oublie. Je n'ai pas testé sur Haiku ni sur MonaOS.
  • De la place sur le disque dur.
  • Une connexion internet qui fonctionne.
  • Avoir de quoi compiler fex2bin serait un plus.

Pour être franc, je n'ai rien inventé. Je me suis basé sur la page d'installation de NetBSD pour ARM/Allwinner. J'ai utilisé le noyau de la carte BananaPi, carte qui est "relativement" proche de la LIME2. J'avais la flemme de compiler le noyau BSD exprès pour la carte.

Donc, commençons par récupérer l'image système de NetBSD, en version ARM, se trouvant là : http://ftp.netbsd.org/pub/NetBSD/NetBSD-7.0.1/evbarm-earmv7hf/binary/gzimg/

Récupérons le bootloader (u-boot) pour la carte, en l'occurence, la LIME 2, ici : http://dl.linux-sunxi.org/nightly/u-boot-sunxi/u-boot-sunxi-mainline/u-boot- sunxi-mainline-latest/

Décompressons l'image de NetBSD.

gunzip armv7.img.gz

Décompressons l'archive u-boot

tar xf u-boot-sunxi-mainline-a20-olinuxino-lime2.tar.xz

Déplaçons les fichiers décompressés dans le répertoire courant

mv u-boot-sunxi-mainline-a20-olinuxino-lime2-20160428T000127-e25b369/* ./

Copions le bootloader sur l'image de NetBSD, au bon endroit

dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1k seek=8 conv=notrunc

Flashons la carte SD (ici, /dev/sdb, ne vous trompez surtout pas de périphérique ou alors prévoyez un bon backup de votre machine) avec l'image modifiée de NetBSD.

sudo dd if=armv7.img of=/dev/sdb bs=1M

Éjecter et réinsérer la carte SD

À ce stade, on a une carte SD bootable avec u-boot, et contenant un système NetBSD. Cependant, le système n'est pas utilisable.

Monter la carte SD (sdb1 dans mon cas), et se déplacer dessus.

pmount /dev/sdb1 /media/sdb1
cd /media/sdb1

Comme il n'y a pas de noyau NetBSD prévu pour la LIME 2, on va utiliser celui du Banana Pi.

Copions alors le noyau, comme suit :

cp netbsd-BPI.ub netbsd.ub

Préparons le fichier de configuration pour u-boot.

vim boot.cmd

Ajoutons dans ce fichier :

setenv kernel_addr      82000000
setenv kernel           netbsd.ub
setenv bootargs         "root=ld0a"

fatload mmc 0:1 ${kernel_addr} ${kernel}
bootm ${kernel_addr}

Compilons ce fichier cmd à l'aide de mkimage (paquet u-boot-tools sous debian).

mkimage -C none -A arm -T script -d boot.cmd boot.scr

Il faut maintenant la configuration de la carte. Pour cela, télécharger le fichier a20-olinuxino_lime2.fex depuis https://github.com/linux-sunxi/sunxi-boards/tree/master/sys_config/a20.

Récupérer au passage (si ce n'est pas déjà fait) https://github.com/linux-sunxi/sunxi-tools, et compiler au moins fex2bin (pas sur la carte SD, bien entendu)

Convertir le fichier fex en fichier bin. Ne pas oublier de copier le fichier .bin sur la carte SD.

fex2bin a20-olinuxino_lime2.fex > lime2.bin

Créer (ou modifier) le fichier uEnv.txt

vim uEnv.txt

contenu du fichier uEnv.txt

bootargs=root=ld0a sysconfig=0x43000000
uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 43000000 lime2.bin;
fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000

Si tout va bien, vous devriez avoir ces fichiers sur la carte SD (j'aurais pu effacer les kernels des autres cartes, mais bon, flemme) :

LICENCE.broadcom
a20-olinuxino_lime2.fex
boot.cmd
boot.ini
boot.scr
bootcode.bin
cmdline.txt
fixup.dat
fixup_cd.dat
kernel7.img
lime2.bin
netbsd-BEAGLEBOARD.ub
netbsd-BEAGLEBONE.ub
netbsd-BPI.ub
netbsd-CUBIEBOARD.ub
netbsd-CUBIETRUCK.ub
netbsd-HUMMINGBIRD_A31.ub
netbsd-ODROID-C1.ub
netbsd.ub
start.elf
start_cd.elf
uEnv.txt

Démonter proprement la carte avant de l'éjecter

cd
pumount /dev/sdb1

Insérer la carte SD dans le lecteur de la carte Olimex, brancher le câble série sur le connecteur UART (Bleu -> GND, Rouge -> RX, Vert -> TX), lancer microcom, et alimenter la LIME 2 pour la démarrer.

microcom -p /dev/ttyUSB0 -s 115200

Si tout va bien, u-boot devrait apparaître à l'écran

U-Boot SPL 2016.05-rc3-ge25b369 (Apr 28 2016 - 00:13:29)
DRAM: 1024 MiB
CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
Trying to boot from MMC1


U-Boot 2016.05-rc3-ge25b369 (Apr 28 2016 - 00:13:29 +0200) Allwinner Technology

CPU:   Allwinner A20 (SUN7I)
Model: Olimex A20-OLinuXino-LIME2
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

Après les tests initiaux, NetBSD devrait démarrer. Quelques instants plus tard, un message indiquant que le système redimensionne la partition devrait apparaître. Cette étape est nécessaire pour que toute la carte SD soit utilisable.

Growing ld0 disklabel (1111MB -> 15343MB)
Resizing /

Dès que cette opération est terminée, le système redémarre automatiquement.

Si tout va bien, le message suivant devrait apparaître

NetBSD/evbarm (armv7) (console)

login:

Se connecter via le login root. Il n'y a pas de mot de passe.

Et voilà, NetBSD est désormais utilisable (quoique, encore au stade expérimental). Je ne connais pas l'impact de l'utilisation du noyau du Banana Pi sur cette carte, je n'ai pas assez de recul. Je ne serai en aucun cas responsable en cas d'explosion du CPU.

J'espère n'avoir rien oublié lors de la rédaction de cet article.

Juste à titre indicatif, voici le log complet du démarrage de la LIME 2.