NetBSD sur une carte Olimex LIME 2
classé dans Asrall, Geekeries
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.
Commentaires