logo lenewt

Compiler le kernel Linux pour système embarqué

Le kernel est à la base de tout système Linux, c’est lui qui gère les interactions avec les composants matériels ainsi que l’exécution des programmes, les allocations de mémoire, etc.

Prérequis

Cet article suppose que vous avez déjà généré une toolchain pour votre système embarqué ARM, si ce n’est pas le cas vous pouvez commencer par l’article précédent : Configurer et générer un système de fichier Linux avec Buildroot.

Maintenant que vous avez votre toolchain et votre système de fichier, il vous manque encore un élément essentiel, le kernel !

Le kernel est à la base de tout système Linux, c’est lui qui gère les interactions avec les composants matériels ainsi que l’exécution des programmes, les allocations de mémoire, etc. Le kernel est le premier composant de votre système Linux à entrer en jeu.

Récupérer le kernel

La version officielle du kernel Linux est disponible sur le site kernel.org.

Comme nous l’avons fait pour Buildroot, nous allons prendre la version LTS (nommée longterm 5.4.61) pour notre exemple, mais rien ne vous empêche de prendre la dernière version stable, le processus sera le même !
Les sources complètes du kernel sont disponible via le lien « tarball ».

Téléchargez l’archive et décompressez-la. On peut passer à la suite !

Configurer votre environnement

Souvenez-vous du dossier « output » généré par Buildroot, à l’intérieur se trouve un dossier « host », c’est votre toolchain. Avant de configurer le kernel, il va falloir changer quelques variables d’environnement pour indiquer au kernel vers quelle architecture vous souhaitez compiler et où se trouve votre toolchain.

Pour une architecture ARM avec la toolchain générée par Buildroot:

export ARCH=arm

export CROSS_COMPILE=arm-linux-

export PATH=$PATH:chemin_vers_buildroot/output/host/bin

Ce que l’on fait ici :

  • On définie l’architecture cible comme étant ARM
  • On spécifie le préfix qu’on tous les outils de compilation de la toolchain (par exemple : arm-linux-g++)
  • On ajoute le dossier bin de la toolchain au path

Configurer le kernel linux pour ARM

Le kernel fourni des fichiers de configuration par défaut adaptés aux différents SoC. Pour lister les fichiers de configurations disponibles :

make help

Liste des configurations arm

Une fois votre configuration identifiée :

make votreSoC_defconfig

Après quelques secondes, vous devriez obtenir

# configuration written to .config

Notez que comme pour Buildroot, vous pouvez également accéder à un menu de configuration. Ce menu permet de changer de très nombreuses options et nécessiterait sûrement un article à lui seul. Dans notre cas la configuration par défaut de notre SoC est suffisante et nous n’irons pas y toucher.

Si toutefois vous voulez aller y jeter un oeil :

make nconfig

Compiler votre kernel linux ARM

Maintenant que votre configuration est terminée, vous n’avez plus qu’à lancer la compilation !
Pour se faire :

make

Notez que si votre machine dispose de plusieurs cœurs, vous pouvez paralléliser la compilation pour gagner du temps. Ici pour une machine disposant de 8 cœurs :

make -j8

compilation du kernel linux arm

On y est, votre kernel est généré dans arch/arm/boot/.

Le mot de la fin

Le prochain article portera sur le déploiement du kernel et du système de fichier vers une carte ARM.

D’ici là, besoin d’aide pour développer votre objet connecté ou système embarqué ?
Nous pouvons gérer tout ou partie du développement de votre logiciel embarqué, alors n’hésitez pas à nous contacter, nous serons ravis de pouvoir vous aider !

Stay tuned !