Génération de U-Boot pour la mini2440
Pour générer u-boot, vous avez besoin d’une chaîne de compilation croisée pour la mini2440. Vous pouvez vous référer à l’article suivant qui explique comment en mettre une en place.
Récupération des sources du bootloader
On commence par récupérer les sources du bootloader u-boot pour la mini2440, sources que l’on va placer dans un répertoire nommé “uboot†:
cd ~/mini2440/
mkdir u-boot
cd u-boot
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
Compilation du bootloader
Avant de lancer la compilation, il est nécessaire de déclarer la variable CROSS_COMPILE en fonction de notre chaîne de compilation croisée.
export CROSS_COMPILE=arm-920t-linux-gnueabi-
Avant de démarrer la compilation, il est possible de modifier certains paramètres de u-boot directement (comme par exemple l’adresse ip de la carte), dans le fichier include/configs/mini2440.h. J’ai pour ma part également ajouté les variables suivantes :
"majker=tftp 32000000 uImage\;nand erase kernel\;nand write.e 32000000 kernel\0" \
"majrfs=tftp 32000000 rootfs.jffs2\;nand erase rootfs\;nand write.jffs2 32000000 rootfs \$(filesize)\0" \
"boot_nand=setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 mini2440=0tb console=tty0,115200 console=ttySAC0,115200 rootwait \; nboot.e kernel \; bootm\0" \
"bootcmd=run boot_nand\0" \
Ainsi, les commandes "call
Il est temps de lancer la compilation :
cd u-boot
make mini2440_config
make
A la fin de la compilation, on peut vérifier la présence du fichier u-boot.bin dans le répertoire uboot/mini2440
Installation de U-Boot dans la mini2440
Sans rentrer dans les détails, la mini2440 est équipée d’une petite flash NOR et d’une grosse flash NAND. On sélectionne la flash dans laquelle on veut booter via l’interrupteur S2 (situé à côté du connecteur audio vert).
On a donc deux bootloader dans la carte, un dans chaque flash. On ne va pas toucher au bootloader installé dans la NOR flash, mais on va l’utiliser pour accéder à la NAND flash, l’effacer et la reprogrammer. Cette façon de faire est assez intéressante car assez sécurisée : on peut faire n’importe quoi dans la NAND flash, la carte pourra toujours booter sur la NOR flash.
Téléchargement de l’outil de download par USB
Le téléchargement du bootloader dans la mini2440 se fait par deux canaux : la liaison série pour entrer des commandes et la liaison USB pour transférer le fichier binaire.
Nous avons besoin de l’outil qui permet de télécharger, via l’USB, un fichier dans la mini2440 (via Supervivi). On va installer l’outil en question dans le répertoire mini2440 :
$mkdir mini2440
$cd mini2440
/mini2440$mkdir tools
/mini2440$cd tools
/mini2440/tools$wget http://www.domodom.fr/documentsJointsSpip/s3c2410_boot_usb.zip
/mini2440/tools$unzip s3c2410_boot_usb.zip
/mini2440/tools$chmod 777 s3c2410_boot_usb
Préparation du flashage du bootloader
Les versions plus anciennes de u-boot permettaient l’exécution de celui-ci directement en RAM, cela n’est plus le cas maintenant.
Avant de continuer, il est temps de brancher la mini2440 sur notre PC de développement avec un câble série et un câble USB.
On peut ensuite installer minicom (terminal rs232) :
sudo apt-get install minicom
On peut le configurer via la commande suivante, puis sélectionner Serial port setup, puis taper a, puis entrer le nom de votre liaison série (/dev/ttyX, ou /dev/ttyUSBX si vous utilisez comme moi un adaptateur USB/série. Enfin, on sauvegarde la configuration via Save setup as dfl, puis sortie via exit.
sudo minicom -s
Flashage du bootloader
On peut ensuite démarrer la carte après avoir basculé l’interrupteur S2 sur la position NOR (on va démarrer avec Supervivi). Dans le menu Supervivi, taper v :
Remarque : si après avoir rentré la commande ’V’, le message USB host is not connected yet. s’affiche, cela signifie que la mini2440 n’arrive pas à se connecter en USB sur le PC.
En parallèle, lancer la commande :
sudo ./s3c2410_boot_usb /home/dom/mini2440/u-boot/u-boot.bin
Si tout se passe bien, on doit voir dans minicom, quelque chose qui ressemble à ça :
Ca y est, le bootloader est flashé dans la mini2440.
Configuration de la flash pour recevoir Linux
Pour pouvoir installer Linux dans la flash, il va être nécessaire d’effacer toute la flash NAND. Cette opération va être effectuée depuis U-Boot. A la fin de cette opération, la flash NAND sera complètement effacée, U-Boot compris. Il faudra donc redémarrer la carte sur la NOR puis reflasher U-Boot dans la NAND flash.
On va donc remettre l’interrupteur S2 sur la position NAND et redémarrer la carte. On doit voir apparaître dans minicom :
Dans minicom, on va effacer la NAND flash via la commande nand scrub :
ON peut alors créer la table de bad blocks via la commande nand createbbt : (cette opération est assez longue, voir même très longue, compter 12 minutes pour une flash de 1Go)
La flash est maintenant prête, c’est-à -dire totalement effacée. On va donc devoir flasher à nouveau notre bootloader en redémarrant la carte avec Supervivi (S2 en position NOR), commande V, , etc...
Une fois le bootloader flashé et la carte redémarrée sur sa NAND flash, on peut accéder au menu du bootloader via la liaison série. On peut visionner les paramètres du bootloader avec la commande printenv, les modifier via la commande setenv (exemple : setenv ipaddr 192.168.1.160). Pour sauvegarder les paramètres modifiés, il faut exécuter la commande saveenv.
Attention, après un premier flashage du bootloader, il est nécessaire de spécifier à celui-ci où se trouve la zone de flash où sont stockés les paramètres. Pour connaître l’adresse de cette zone, il suffit d’exécuter la commande mtdparts et trouver l’adresse de la zone env (ici, 40000) :
Pour spécifier l’adresse de la zone de paramètres, on exécute donc la commande :