mini2440. Séance 4 : configuration et compilation de busybox

Salut.

Pour cette séance 4 de mise en oeuvre de la carte mini2440, nous allons voir comment configurer et compiler busybox qui sera ensuite installé dans le système de fichiers root.

Busybox est LE couteau suisse quand on fait du Linux embarqué ! Il permet à l'aide d'un seul exécutable d'avoir accès à un ensemble configurable de commandes Linux. Chaque commande est un lien symbolique vers l'exécutable busybox : on exploite ainsi dans les sources C de busybox l'argument argv[0]...

On installe dans un premier temps les sources de busybox disponibles ici :

$ cd mini2440
$ tar -xvzf linux-busybox-mini2440-1.13.3.tgz
$ cd busybox-1.13.3

La configuration par défaut correspond au shell script godefconfig :

$ cd busybox-1.13.3
$ cat godefconfig
cp fa.config .config

On pourra éventuellement configurer busybox avec le shell script goconfig afin de sélectionner les commandes Linux (applets) que l'on veut en plus :

$ cat goconfig
make ARCH=arm CC=arm-linux-gcc menuconfig
$ ./goconfig

On compilera busybox avec le shell script go :

$ cat go
make ARCH=arm CC=arm-linux-gcc
$ ./go

On installera busybox avec le shell script goinstall dans le système de fichiers root que l'on a construit lors de la séance 3 (répertoire root_fs/)  :

$ cat goinstall
make ARCH=arm CC=arm-linux-gcc CONFIG_PREFIX=/home/eddy33/mini2440/root_fs install
$ su
# ./goinstall

On ajustera au préalable la variable CONFIG_PREFIX vers le chemin absolu du répertoire root_fs/ en fonction de son environnement de développement sur le PC hôte.

Notre système de fichiers root est presque opérationnel. Il reste à rajouter les bibliothèques pour le processeur ARM :

$ cd mini2440
$ su
# \\cp -a ./arm-2008q3/arm-none-linux-gnueabi/libc/armv4t/lib/* ./root_fs/lib
# \\cp ./arm-2008q3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/* ./root_fs/usr/lib

Il manque éventuellement les modules Linux et le firmware des périphériques à rajouter sous root_fs/lib (on verra cela à la prochaine séance) mais le système de fichiers root sous root_fs/ doit être utilisable en l'état...

Les tests peuvent se faire en utilisant le système de fichiers root ainsi créé soit en mémoire NAND flash (partition MTD 3), soit sur la carte SD.

Pour mettre le système de fichiers root en mémoire NAND Flash de la carte mini2440, il faut au préalable le convertir en système de fichiers de type JFFS2. On utilisera la commande mkfs.jffs2. On utilisera le shell script gojffs2 :

$ cd mini2440
$ cat gojffs2
mkfs.jffs2 -lqnp -e 16 -r ./root_fs -o rootfs.jffs2
cp rootfs.jffs2 /tftpboot
$ su
# ./gojffs2
On suppose que le PC hôte a comme adresse IP 192.168.0.1 et la carte mini2440 a comme adresse IP 192.168.0.100. On configurera u-boot en conséquence :
MINI2440 # setenv netmask 255.255.255.0
MINI2440 # setenv ipaddr 192.168.0.100
MINI2440 # setenv serverip 192.168.0.1
MINI2440 # saveenv
On utilisera ensuite u-boot pour télécharger par TFTP le fichier image JFFS2 rootfs.jffs2 puis on le programmera dans la partition MTD 3 de la mémoire NAND Flash :
MINI2440 # tftp 32000000 rootfs.jffs2
MINI2440 # nand erase rootfs
MINI2440 # nand write.jffs2 32000000 rootfs $(filesize)

On pourra éventuellement créer la macro u-boot gorootfs pour faciliter les prochaines programmations :

MINI2440 # setenv gorootfs tftp 32000000 rootfs.jffs2\\;nand erase rootfs\\;nand write.jffs2 32000000 rootfs \\$(filesize)
MINI2440 # saveenv

La programmation du fichier rootfs.jffs2 se fera alors simplement par la commande u-boot :

MINI2440 # run gorootfs

Pour recopier le système de fichiers root sur la carte SD, on utilisera le shell script gosd. On branchera au préalable un lecteur de cartes SD sur le PC hôte, la carte SD sera enfichée dans le lecteur.

Pour la première fois, la carte SD sera formatée au format ext3. On suppose que la carte SD est vue comme le périphérique /dev/sde :

$ cd mini2440
$ su
# fdisk -l
# fdisk /dev/sde
Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1016, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1016, default 1016):
Using default value 1016
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# mkfs.ext3 /dev/sde1

On copiera ensuite le répertoire root_fs/ sur la carte SD ainsi formatée à l’aide du shell script gosd :

# cat gosd
umount /dev/sde1
mount -t ext3 /dev/sde1 /mnt
\\rm -rf /mnt/*
sync
\\cp -r root_fs/* /mnt
sync
umount /dev/sde1
# ./gosd

Pour utiliser le système de fichiers root en mémoire NAND Flash, on configurera u-boot comme suit :

MINI2440 # setenv boot_nand setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 mini2440=1tb console=tty0,115200 console=ttySAC0,115200 rootwait \\; nboot.e kernel \\; bootm
MINI2440 # setenv bootcmd run boot_nand
MINI2440 # saveenv

Pour utiliser le système de fichiers root sur la carte SD, on configurera u-boot comme suit :

MINI2440 # setenv boot_sd setenv bootargs console=tty0,115200 console=ttySAC0,115200 mini2440=1tb rootfstype=ext3 root=/dev/mmcblk0p1 rw rootwait \\; nboot.e kernel \\; bootm
MINI2440 # bootcmd run boot_sd
MINI2440 # saveenv

Il faut noter que le paramètre mini2440 précise la taille de l'écran LCD :

  • mini2440=0tb : écran 3"1/2
  • mini2440=1tb : écran 7"

On pourra tester notre système de fichiers root une fois que l'on aura un noyau Linux opérationnel pour la carte mini2440, ce qui sera expliqué à la prochaine séance.

Prochaine séance : configuration et compilation du noyau Linux pour la carte mini2440...

++

Sources :

Vus : 4188
Publié par Eddy33 : 81