diff --git a/content/jouet_fr.mdown b/content/jouet_fr.mdown index b61fc10..a3acb22 100644 --- a/content/jouet_fr.mdown +++ b/content/jouet_fr.mdown @@ -16,7 +16,7 @@ L'idée était de ne pas écraser le système de démo et d'essayer d'utiliser l ## Compilation ### Toolchain / sources Je me suis inspiré de ce [wiki](http://www.eewiki.net/display/linuxonarm/SAMA5D3) pour gcc et u-boot. J'ai aussi pris les patch u-boot en suivant les liens donnés sur le wiki. -Une fois le compilateur installé, on exporte la variable CC qui contient le chemin et le préfix de l'architecture et en informant make que l'on utilise un autre compilateur : +Une fois le compilateur installé, on exporte la variable `CC` qui contient le chemin et le préfix de l'architecture et en informant make que l'on utilise un autre compilateur : ``` bash export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi- ARCH=arm CROSS_COPILE=${CC} make [...] @@ -42,6 +42,46 @@ Comme dit juste en dessous, je n'ai pas utilisé at91bootstrap et j'ai laissé c - si je désactive l'USB, ça freeze au chargement des pilotes mmc. - à creuser +#### script de compilation du noyau +Voici un exemple de script de compilation du noyau + +``` bash +#!/bin/sh +# script to build stock kernel + +DEPLOY_PATH=/tmp/deploy +if [ -d "${DEPLOY_PATH}" ]; then + rm -R "${DEPLOY_PATH}" +fi +mkdir "${DEPLOY_PATH}" + +# local path to cross compiler +CC=/home/kleph/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi- + +# menuconfig +# cp localconfig +make ARCH=arm CROSS_COMPILE=${CC} menuconfig + +# zImage +make -j5 ARCH=arm CROSS_COMPILE=${CC} zImage + +# modules +make -j5 ARCH=arm CROSS_COMPILE=${CC} modules + +# dtbs +make ARCH=arm CROSS_COMPILE=${CC} dtbs + + +# modules archive +make ARCH=arm CROSS_COMPILE=${CC} modules_install INSTALL_MOD_PATH=${DEPLOY_PATH}/modules + +# firmware archive +make ARCH=arm CROSS_COMPILE=${CC} firmware_install INSTALL_FW_PATH=${DEPLOY_PATH}/firmware +``` + +#### déploiement et tests +Une fois tous les éléments compilés, il faut les installer dans `/boot`. + ## Configuration ### firmware @@ -70,11 +110,15 @@ Les paramètres d'U-boot On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande. Voici des paramètres pour démarrer le noyau original fourni avec la carte et un système sur la carte SD - setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 +``` +setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 +``` Pour les archives, voici les paramètres de démarrage d'origine, pour démarrer depuis la NAND : - console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs +``` +console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs +``` Les paramètres peuvent être aussi être donnés dans un fichier de configuration : uEnv.txt @@ -91,26 +135,26 @@ mmcrootfstype=ext2 rootwait fixrtc Voici ma configuration u-boot après l'interruption : ``` bash - baudrate=115200 - bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait - bootcmd=if mmc rescan; then echo SD/MMC found on device;if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if run loadzimage; then run loaddtb;run mmcboot;fi;fi; - bootdelay=3 - bootenv=uEnv.txt - bootfile=zImage - console=ttyS0,115200n8 - dtb_file=sama5d34ek.dtb - dtbaddr=0x21000000 - ethact=macb0 - importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize - loadaddr=0x22000000 - loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv} - loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs/${dtb_file} - loadzimage=load mmc ${mmcdev} ${loadaddr} ${bootfile} - mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype} - mmcboot=echo Booting from mmc ...; run mmcargs; bootz ${loadaddr} - ${dtbaddr} - mmcdev=0 - mmcroot=/dev/mmcblk0p2 ro - mmcrootfstype=ext4 rootwait +baudrate=115200 +bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait +bootcmd=if mmc rescan; then echo SD/MMC found on device;if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if run loadzimage; then run loaddtb;run mmcboot;fi;fi; +bootdelay=3 +bootenv=uEnv.txt +bootfile=zImage +console=ttyS0,115200n8 +dtb_file=sama5d34ek.dtb +dtbaddr=0x21000000 +ethact=macb0 +importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize +loadaddr=0x22000000 +loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv} +loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs/${dtb_file} +loadzimage=load mmc ${mmcdev} ${loadaddr} ${bootfile} +mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype} +mmcboot=echo Booting from mmc ...; run mmcargs; bootz ${loadaddr} - ${dtbaddr} +mmcdev=0 +mmcroot=/dev/mmcblk0p2 ro +mmcrootfstype=ext4 rootwait ``` @@ -119,7 +163,7 @@ Elle est composée de plusieurs autres commandes : - `loadenv` qui charge le fichier `uEnv.txt`(bootenv) en mémoire, puis `importenv` qui lit la configuration - `loadzImage` charge le fichier `zImage`(bootfile) en mémoire -- `loaddtb` charge le device tree [wiki](http://www.devicetree.org/Main_Page)(dtb_file) +- `loaddtb` charge le [device tree](http://www.devicetree.org/Main_Page)(dtb_file) - `mmcboot` qui passe la main au noyau On voit donc que la plupart des noms de fichiers sont paramétrables, on peut donc assez facilement avoir une configuration avec un noyau stable et un autre de test.