Formation Linux : Construire et installer une plateforme Linux pour système embarqué
1er jour
Introduction à la formation Linux
Architecture de Linux
- Linux
- Histoire
- Gestion de version
- Les diverses licences utilisées par Linux (GPL, LGPL, etc)
- Distributions Linux
- Architecture et modularité de Linux
Les chaînes de compilation croisée
-
- Chaînes de compilation croisée pré-compilées
- Outils de génération de chaînes de compilation croisée
- Crosstool-ng
- Buildroot
- Compilation manuelle de chaîne de compilation croisée
Exercice : Construction d’une chaîne de compilation croisée avec Crosstool-ng
Les outils Linux pour l’embarqué
-
- Les bootloaders (Uboot, Redboot, barebox)
- Les librairies adaptées à l’embarqué (eglibc, uClibc)
- Les IHM adaptées à l’embarqué
- Busybox
Le boot loader U-Boot
-
- Introduction à U-Boot
- Booter la carte à travers U-Boot
- Booter depuis la NOR
- Booter depuis la NAND
- Booter depuis la eMMC
- Variables d’environnement d’U-Boot
- Variables définies par l’utilisateur
- Variables prédéfinies
- Substitution de variable
- Le shell U-Boot minimal
- Ecrire des scripts dans des variables
- Exécuter des scripts
- Utiliser des variables dans des scripts : le patron set-script
- Principales commandes d’U-Boot
- Booter un OS
- Accéder aux flashs
- Accéder aux systèmes de fichier (NFS, FAT, EXTx, JFFS2…)
- Le shell U-Boot complet
- Structure du script
- Instructions de contrôle (if, for…)
Exercice: Ecrire un script qui configure le réseau et passe cette information au noyau
Linux
Exercice: Booter la carte en NFS, en utilisant des images pré-existantes
Exercice: Ecrire des scripts pour choisir entre booter depuis la flash ou le réseau
2ème jour
Créer le noyau Linux embarqué
-
- Télécharger un code source stable
- Obtenir une tarball
- Utiliser GIT
- Configurer le noyau
- Compiler le noyau et ses modules
- Modules internes aux sources de Linux (in-tree)
- Modules externes aux sources (out-of-tree)
- Installer le noyau et les modules
- Télécharger un code source stable
Exercice: Configurer et compiler un noyau pour la carte cible
Le BSP Linux
-
- Architecture du BSP Linux
- Structure générale
- Le BSP ARM
- Le système de compilation de Linux
- Définir et initialiser la carte
- Programmatiquement (platform, i2c, spi, …)
- En utilisant le Flattened Device Tree
- Architecture du BSP Linux
Exercice: Créer un BSP minimal pour la carte cible
Créer un système de fichier racine
-
- Paquetages
- Divers systèmes de compilation de paquetages (autotools, CMake, …)
- Compiler un paquetage en croisée
- Les applications tout-en-un
- Busybox, les utilitaires basiques
- Dropbear: communications cryptées(ssh)
- Construire manuellement son système de fichier racine
- Fichiers de périphérique, programmes et bibliothèques
- Fichiers de configuration (réseau, udev, …)
- Installer des modules
- Chercher et installer les bibliothèques dont on a besoin
- Tester la cohérence et la complétude du système de fichier
- Paquetages
Exercice: Configurer et compiler Busybox et Dropbear
Exercice: Créer un système de fichier racine minimal en utilisant Busybox et Dropbear
Le boot de Linux
-
- Paramètres du noyau Linux
- La séquence de démarrage de Linux
- Divers systèmes d’initialisation (busybox init, system V init, systemd)
- Démarrer automatiquement un système embarqué
Exercice: Booter Linux en démarrant automatiquement une application utilisateur
3ème jour
Systèmes de fichier embarqués
-
- Interfaces de stockage
- Périphérique bloc MTD
- Mémoires flash et MTDs Linux
- flash NOR
- flash NAND
- flash ONENAND
- Les divers formats de système de fichier pour flash
- JFFS2, YAFFS2, UBIFS
- Systèmes de fichier en lecture seule
- CRAMFS, SQUASHFS
- Ramdisks et initrd
- Créer un initramfs
- Booter à travers un initramfs
- Choisir les bons formats de système de fichier
- Flasher le système de fichier
- Interfaces de stockage
Exercice: Construire un système de fichier racine de type initrd
Buildroot
-
- Fonctionnement
- Configuration de la chaîne de compilation
- Sélection de paquetages
- Configuration système (port série, remplissage de /dev, …)
- Configuration du noyau et du boot-loader
- Construire une image de système de fichier
- Adaptation
- Utiliser une chaîne de compilation pré-compilée
- Ajouter un patch à un paquetage existant
- Ajouter un nouveau paquetage
- Utiliser un squelette de rootfs customisé
- Fonctionnement
Exercice: Construire un système de fichier racine avec Buildroot
4ème jour
Introduction à Yocto
-
- Présentation de Yocto
- Histoire
- Yocto, Open Embedded et Poky
- Objetif du projet Yocto
- Les principaux projets
- Architecture Yocto
- Aperçu
- Recettes et classes
- Les tâches
- Présentation de Yocto
Exercice: Exercice : Utiliser les commandes bitbake pour compiler des packages et des
images
Structure des recettes du package Yocto
-
- Objectifs du système de compilation
- Construire des images déployables
- Couches et priorités de couches
- Mise en page de l’annuaire
- layout des dossiers
- Fichiers de configuration (local, machine et distribution)
- L’outil bitbake
- Ajouter un nouveau layer
- Structure de la couche (Layer)
- Différents types de couches (Layer)
- Objectifs du système de compilation
Exercice: Ajouter un nouveau layer
Exercice: Ajouter une nouvelle recette
5ème jour
Linux temps-réel
-
- solutions temps-réel pour Linux
- xenomai
- patch rt preempt
- architecture de Xenomai
- co-kernel
- skins
- drivers RTDM
- architecture de Xenomai
- installer Xenomai
- cross-compiler une application Xenomai
- solutions temps-réel pour Linux
Exercice: installer Xenomai 3.x
Exercice: mesurer les temps de latence
Exercice: cross-compiler une application Xenomai
Le BSP U-Boot
-
- Portage de U-Boot
- Structure de code source U-Boot
- Ajouter une nouvelle carte aux sources U-Boot
- Drivers U-Boot (RS232, réseau, flash, SD / MMC)
- Démarrage U-Boot et initialisation de la carte
- Portage de U-Boot
Exercice: Création d’un BSP dans U-Boot et configuration du code d’initialisation