Compiler le noyau linux pour Raspberry Pi peut prendre de quelques minutes à plusieurs heures en fonction de la puissance de votre machine de compilation.

Machine utilisée pour cross-compiler :

  • Processeur : Xeon E5-2620 v2 2.1GHz 15MB Cache , 6 Coeurs, 12 Threads
  • Mémoire     : DDR 8GB 1600MHz

Temps de compilation :
real 18m37.066s
user 97m22.264s
sys 5m30.492s

Attention !
Vous pouvez aussi le compiler directement sur votre Raspberry Pi sans passer par un serveur de compilation.

Cette technique est utilisée sur le site officiel de Raspberry Pi.

  • L’avantage de la compilation sur Raspberry Pi est de ne pas avoir à installer une chaine de cross-compilation.
  • L’inconvénient est que la puissance de calcul du Raspberry même le plus performant (Rasp 2 et Rasp 3) demandera des heures des compilation et utilisera beaucoup d’espace de stockage.

En général, la cible embarquée telle qu’un Raspberry Pi ne doit pas être utilisée à des fins de compilation sauf en de rares occasions.


A partir d’un terminal

Installation des dépendances

# Installation des dépendances de compilation
sudo apt-get install git bc

# Installation des dépendances de configuration
sudo apt-get install libncurses5-dev

Clonages GIT

# Récupération des sources officielles de Linux avec GIT :
git clone https://github.com/raspberrypi/tools tools-rpi
git clone --depth=1 https://github.com/raspberrypi/linux linux-rpi

# Ajout du compilateur croisé dans le PATH :
export PATH=${PWD}/tools-rpi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}

cd linux-rpi

Defconfig pour Raspberry Pi Zero et 1

 SOC Broadcom BCM2835 : monocoeur ARM1176JZF-S 32 bits, ARM11
# [Basic kernel configuration for PI 1 and Zero boards]
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

Defconfig pour Raspberry Pi 2 et 3

SOC Broadcom BCM2836 Quadricoeur Cortex A7, 64 bits, ARMv7
SOC Broadcom BCM2837 Quadricoeur Cortex A53, 64 bits, ARMv8
# [Basic kernel configuration for PI 2 and 3 boards]
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

Menuconfig

Configurer (manuellement) le kernel Linux avec menuconfig avant la compilation

# Execute menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

# Pensez à sauvegarder la configuration avant de quitter !

Compiler le kernel

(cette opération peut prendre environ 1 heure)

# Options de compilation :
# -j12 : diviser la charge de calcul sur les threads de votre CPU (Xeon de 12 threads dans l'example)
# zImage : compiler le zImage# modules : compiler l'ensemble des modules
# dtbs : compiler l'ensemble des dtb
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 zImage modules dtbs

Installer les éléments compilés sur une carte SD bootable

# Commande MAKE pour déployer uniquement les modules d'une compilation
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/sdb2 modules_install

# Sauvegarder l'ancienne image kernel
sudo cp /media/sdb1/kernel.img /media/sdb1/kernel-backup.img

# Copier la nouvelle image kernel sur la carte SD
sudo cp arch/arm/boot/Image /media/sdb1/kernel.img

# Demonter les cartes
sudo umount /dev/sdb1
sudo umount /dev/sdb2

Références :


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.