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.
28/08/2020
Nathanaël Landais
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
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
On y est, votre kernel est généré dans arch/arm/boot/.
Le mot de la fin
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 !