add a sample script to build the kernel
This commit is contained in:
parent
714e23b140
commit
95be07593c
1 changed files with 68 additions and 24 deletions
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue