add a sample script to build the kernel

This commit is contained in:
kleph 2013-10-03 00:05:00 +02:00
parent 714e23b140
commit 95be07593c

View file

@ -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.