mini2440. Séance 5 : configuration et compilation du noyau Linux

Salut.

Pour cette séance 5 de mise en oeuvre de la carte mini2440, nous allons voir comment configurer et compiler le noyau Linux qui sera ensuite installé dans la mémoire NAND Flash de la carte mini2440.

On installe dans un premier temps les sources du noyau Linux 2.6.32.2 pour la carte mini2440 ici :
$ cd mini2440
$ tar -xvzf linux-2.6.32.2-mini2440_20110305.tgz

Le noyau Linux est ensuite configuré puis compilé pour la carte mini2440.

On se placera dans le répertoire des sources du noyau. On créera au préalable le lien symbolique kernel :

$ ln -s linux-2.6.32.2 kernel
$ cd kernel

On configurera le noyau Linux avec le shell script goconfig :

$ cd kernel
$ cat goconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
$ ./goconfig

Le fichier de configuration est sauvegardé dans le fichier .config. On pourra utiliser les fichiers config suivants adaptés à la carte mini2440 que l'on recopiera en lieu et place du fichier .config (il existe des fichiers de configuration par défaut config_mini2440_* correspondant à différents types d'écrans LCD sous kernel/) :

  • Fichier de configuration du noyau Linux 2.6.32.2 pour écran A70 avec JFFS2, GPIO et I2C
  • Fichier de configuration du noyau Linux 2.6.32.2 pour écran A70 avec JFFS2, GPIO, I2C et SPI

On compile le noyau Linux avec le shell script go :

$ cat go
make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
$ ./go

On compile les modules éventuels du noyau Linux avec le shell script gomodules :

$ cat gomodules 
ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make modules
$ ./gomodules

On installera les modules du noyau Linux avec le shell script gomodules_install dans le système de fichiers root (répertoire root_fs/)  :

$ cat gomodules_install
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- INSTALL_MOD_PATH=/home/eddy33/mini2440/root_fs modules_install
$ ./gomodules_install

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

Il faudra bien sûr alors mettre à jour son système de fichiers root installé dans la mémoire NAND Flash ou sur la carte SD de la carte mini2440...

On installera le noyau Linux via le fichier uImage avec le shell script goinstall :

$ cat goinstall
cp arch/arm/boot/uImage /tftpboot
$ ./goinstall

Le noyau Linux uImage est installé dans le répertoire /tftpboot/. Il sera téléchargé via le protocole TFTP en RAM avec u-boot puis programmé dans la partition MTD 2 de la mémoire NAND Flash avec u-boot.

On télécharge donc le fichier uImage depuis u-boot en RAM de la carte mini2440 puis on le programme dans la partition MTD 2 de la mémoire NAND Flash. 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
MINI2440 # tftp 32000000 uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
TFTP from server 192.168.0.1; our IP address is 192.168.0.100
Filename 'uImage'.
Load address: 0x32000000
Loading: T #################################################
###################################################
done
Bytes transferred = 2058212 (1f67e4 hex)
MINI2440 # nand erase kernel
MINI2440 # nand write.e 0x32000000 kernel

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

MINI2440 # setenv gokernel tftp 32000000 uImage\\;nand erase kernel\\;nand write.e 0x32000000 kernel
MINI2440 # saveenv

La programmation du fichier uImage se fera alors simplement par la commande u-boot :

MINI2440 # run gokernel

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

On rappelle que le paramètre mini2440 précise la taille de l'écran LCD :

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

On fait un reset de la carte mini2440. On doit avoir les traces de boot du noyau Linux (qui ne trouve pas encore son système de fichiers root…) :

## Booting kernel from Legacy Image at 32000000 ...
   Image Name:   Linux-2.6.32.2
   Created:      2011-06-24  11:33:32 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2058148 Bytes =  2 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel
Uncompressing Linux.............................................................
Linux version 2.6.32.2 (eddy33@ipcchip) (gcc version 4.3.2 (Sourcery G++ Lite1
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz           
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
. . .

On a alors accès au login. Cela valide ainsi toutes ces 5 séances. Nous avons au final un système Linux embarqué opérationnel sur la carte mini2440

Prochaine séance : configuration et compilation de la bibliothèque tslib pour l'écran tactile de la carte mini2440...

++

Sources :

Vus : 3156
Publié par Eddy33 : 81