Linux embarqué

Book description

Présentation
Un ouvrage de référence accompagné de deux études de cas

Sans équivalent en français, cet ouvrage s'ouvre par un panorama du marché de l'embarqué et des solutions Linux existantes en les comparant aux alternatives propriétaires. Il indique ensuite la méthodologie à suivre pour construire, à partir du noyau Linux, un système embarqué adapté. Les règles d'utilisation des licences GPL/LGPL pour les systèmes embarqués, ainsi que la prise en charge des dernières versions du noyau Linux (3.0 et supérieures) sont détaillées.

L'ouvrage décrit les derniers outils utilisés dans le monde Linux embarqué tels que l'émulateur de matériel QEMU, l'environnement de développement Buildroot et OpenEmbedded, le chargeur de démarrage Barebox, nouveau-venu après U-Boot, les extensions temps réel Xenomai et PREEMPT-RT, ou encore la bibliothèque graphique embarquée Qt4 développée par Nokia. En outre, un chapitre entier est dédié à l'utilisation des outils de mise au point, tels que Ftrace/trace-cmd et KernelShark, KGDB, OProfi le ou les sondes d'émulation JTAG. Les exemples de l'ouvrage portent sur l'architecture ARM, aujourd'hui la plus répandue pour les applications embarquées, mais également sur les processeurs x86, très présents au travers du processeur Intel Atom(r). La majorité des exemples décrits peuvent être directement exploités par le lecteur dans un environnement ARM9 émulé par l'outil libre et gratuit QEMU.

Cette quatrième édition est enrichie d'un chapitre dédié à OpenEmbedded, d'un chapitre détaillé sur le démarrage d'une carte ARM, du bootloader à l'application dans le cadre d'une étude de cas complète.

À qui s'adresse cet ouvrage ?
  • Aux développeurs Linux et aux ingénieurs ayant à réaliser des systèmes embarqués.
  • Aux décideurs et industriels ayant à choisir une solution pour leurs applications embarquées.
Au sommaire
  • Introduction à Linux et aux systèmes embarqués
    • Les logiciels embarqués et leurs domaines d'application
    • Linux comme système embarqué
    • Choix du matériel
  • Mise en place d'un système Linux embarqué
    • Structure du système Linux
    • Environnement de développement
    • Construction de la distribution
    • Configuration du réseau
    • Le chargeur de démarrage
    • Mémoire de masse et système de fichiers
  • Techniques avancées
    • Utiliser Buildroot
    • Utiliser OpenEmbedded
    • Outils de mise au point
    • Systèmes temps réel
    • Interface homme-machine
    • Etude de cas

Table of contents

  1. Couverture
  2. Le résumé et la biographie auteur
  3. Page de titre
  4. Copyright
  5. Chez le même éditeur
  6. Préface
  7. Table des matières
  8. Avant-propos
    1. À qui s’adresse ce livre ?
    2. Structure de l’ouvrage
    3. Précisions concernant les troisième et quatrième éditions
  9. Première partie: Introduction à Linux et aux systèmes embarqués
    1. Chapitre 1: Les logiciels embarqués et leurs domaines d’application
      1. Qu’est-ce qu’un logiciel embarqué ?
      2. Caractéristiques des logiciels embarqués
      3. Logiciel embarqué ou système embarqué ?
      4. Les champs d’application
      5. Tour d’horizon des systèmes existants
        1. VxWorks
        2. QNX
        3. µC/OS (micro-C OS) et µC/OS II
        4. Windows
        5. LynxOS
        6. Nucleus
        7. VRTX
        8. eCos
      6. Conclusion
    2. Chapitre 2: Linux comme système embarqué
      1. Contraintes des systèmes embarqués propriétaires
      2. Les avantages de l’open source
      3. Les inconvénients
        1. La crédibilité de l’open source
        2. Le support technique
        3. La complexité des licences
        4. La compatibilité ascendante
      4. Pourquoi Linux est-il adapté à l’embarqué ?
        1. La fiabilité
        2. Le faible coût
        3. Les performances
        4. La portabilité et l’adaptabilité
        5. L’ouverture
      5. Dans quels cas Linux peut-il être inadapté ?
      6. Les systèmes embarqués basés sur le noyau Linux
        1. Wind River Linux
        2. MontaVista Linux
        3. BlueCat Linux
        4. ELDK
        5. Android
      7. Conclusion
    3. Chapitre 3: Choix du matériel
      1. Choix d’une architecture, PC/x86 ou non ?
      2. La notion de MMU
        1. uClinux : un noyau Linux sans MMU
      3. Les processeurs compatibles x86
      4. Les autres architectures
      5. La mémoire de masse
      6. Les bus d’extension et de communication
        1. Les bus d’extension ISA et PCI
        2. Les ports série
        3. Le bus USB
        4. Les autres bus : I2C, SPI, FireWire
      7. Quelques exemples de cartes mères
        1. Le projet Armadeus
        2. Les cartes Eukréa
        3. Les cartes FOX (ACME Systems)
        4. Les cartes Pragmatec
        5. Récupération de cartes existantes
        6. Les formats Mini-ITX et Micro-ITX
        7. Le standard PC/104 (x86)
      8. Conclusion
  10. Deuxième partie: Mise en place d’un système Linux embarqué
    1. Chapitre 4: Structure du système Linux
      1. Le noyau Linux
        1. Structure globale du noyau
        2. Les modules dynamiques du noyau
        3. Compilation du noyau
          1. Obtention et extraction des sources
          2. Configuration du noyau
          3. Compilation et installation
      2. Répertoires et fichiers principaux
        1. Organisation générale
        2. Le répertoire /dev
        3. Le système de fichiers /proc
        4. Le système de fichiers /sys
        5. Les niveaux d’exécution ou run levels
        6. Les bibliothèques partagées
        7. Le répertoire /var
      3. Conclusion
    2. Chapitre 5: Environnement de développement
      1. Choisir un système de développement
        1. Quelle distribution Linux ?
        2. Quels composants installer ?
        3. Utilisation d’une machine virtuelle
        4. Utilisation de Cygwin
        5. Autre choix possible : Mac OS X ?
      2. La chaîne de compilation croisée
        1. Le choix de la libc
          1. Glibc
          2. uClibc
          3. Eglibc
        2. Utiliser ELDK
        3. Utiliser Crosstool
          1. Description de la structure
          2. Exemple de production d’une chaîne ARM
        4. Utiliser Crosstool-NG
        5. Exemples de compilation
          1. Compilation d’un noyau Linux
          2. Débogueur GDB croisé
          3. Programme gdbserver
          4. Débogueur GDB natif ARM
          5. Utilisation d’un fichier Makefile
      3. Les autres outils de développement
        1. Utilisation d’un EDI
        2. Émulateur de matériel
          1. Quelques mots sur l’émulateur QEMU
          2. Mode utilisateur
          3. Installation de QEMU
          4. Test de QEMU pour une application embarquée
          5. Quelques options utiles
        3. L’émulation de terminal
          1. Utilisation de screen
          2. Utilisation de minicom
      4. Et maintenant ?
    3. Chapitre 6: Construction de la distribution
      1. Les éléments d’une distribution Linux minimale
        1. Choix du compilateur croisé
        2. Compilation du noyau
      2. Création du système de fichiers racine
        1. Le coup du coucou !
        2. Un système de fichiers racine basé sur Busybox
          1. Les problèmes des distributions classiques
          2. Busybox, la solution universelle de l’embarqué
          3. Compiler et installer Busybox
          4. Installer le répertoire /dev
          5. Tester la distribution
          6. Configuration de Busybox
          7. Amélioration de l’image
          8. Authentification des utilisateurs
          9. Utilisation d’un initramfs
          10. Conclusions sur la construction du système de fichiers racine
      3. Partir d’une distribution classique existante
        1. Adaptation d’un Live-CD Fedora
      4. Conclusion
    4. Chapitre 7: Configuration du réseau
      1. La commande ifconfig
      2. La commande route
      3. Test d’une application réseau (wget)
        1. Configuration du client DHCP sur la distribution
        2. Utilisation d’un pont (bridge)
      4. Scripts de configuration du réseau
        1. Le script rc.inet1
          1. Initialisation de l’interface locale
          2. Initialisation de l’interface Ethernet, PPP ou PPPOE
          3. Calcul du fichier /etc/resolv.conf
          4. Nom de domaine et nom du système
          5. Arrêt des interfaces
        2. Le script rc.inet2
      5. Configuration de PPP
        1. Validation du support PPP
        2. Installation du programme pppd
        3. Mise en place du répertoire /etc/ppp
      6. Passons aux choses sérieuses !
    5. Chapitre 8: Le chargeur de démarrage
      1. Utilisation de GRUB
        1. Nommage des périphériques
        2. Mode interactif
        3. Fichier de configuration
        4. Installation de GRUB sur une clé USB
        5. Création d’une image ISO bootable avec GRUB
      2. Utilisation de Syslinux
      3. Utilisation de U-Boot
        1. Compilation de la version modifiée de QEMU
        2. Compilation de U-Boot
        3. Installation et test de l’image U-Boot sous QEMU
        4. Installation sur une carte réelle
        5. Les principes de U-Boot
        6. La syntaxe de U-Boot
          1. Exemples de manipulation
          2. Liste des principales commandes et variables
        7. Un premier exemple de démarrage de la carte
          1. Installation du serveur TFTP
          2. Configuration du serveur NFS
          3. Paramétrage U-Boot pour NFS-Root
        8. Démarrage automatique de la distribution
        9. Utilisation d’un fichier de définition de variables
      4. Utilisation de Barebox
        1. Compilation de Barebox
        2. Installation et test de l’image Barebox sous QEMU
        3. Utilisation de Barebox
          1. Copie des fichiers sur le serveur TFTP
          2. Téléchargement et programmation en flash
          3. Démarrage de Linux sur la carte
          4. En résumé
        4. Exploration des sources de Barebox
      5. Conclusion
    6. Chapitre 9: Mémoire de masse et système de fichiers
      1. Rappels sur les technologies des mémoires
        1. La mémoire RAM
        2. La mémoire ROM
        3. La mémoire flash
      2. Choix du support physique
        1. La CompactFlash
        2. La clé USB
        3. La carte Disk On Module
      3. Utilisation du périphérique
        1. Partitionnement
        2. Formatage
        3. Installation de la distribution
        4. Installation du bootloader GRUB
      4. Utilisation du pilote MTD
        1. Flash NOR ou NAND
        2. Architecture du pilote MTD
        3. Configuration et mise en place de MTD
          1. Paramétrage du noyau Linux
          2. Découpage de la flash
          3. Copie du noyau sur la flash
          4. Installation du système de fichiers racine sur la flash
          5. Test du système
        4. Utilisation du format CRAMFS
          1. Cas d’une flash NAND
        5. Utilisation du format TMPFS
        6. Utilisation de mtd-utils
          1. Disponibilité dans ELDK-4.2
          2. Génération à partir des sources
          3. Exemple d’utilisation
      5. Conclusion
  11. Troisième partie: Techniques avancées
    1. Chapitre 10: Utiliser Buildroot
      1. Buildroot, une introduction
        1. Qu’est-ce que Buildroot ?
        2. Buildroot aujourd’hui
        3. Quand utiliser Buildroot ?
      2. Installation et utilisation
        1. Un premier test de génération
        2. Création d’une configuration prédéfinie
        3. Aperçu de la structure de Buildroot
        4. Système de gestion des paquets
          1. Exemple du paquet fbv
          2. Reconstruction des paquets
          3. Ajout de paquets externes
          4. Nouvelle syntaxe pour les paquets
      3. Utilisation de Buildroot sur une véritable carte
        1. Ajout du support des cartes Pragmatec DEV2410
          1. Ajout de la prise en charge de Pragmatec dans les cibles
          2. Configuration U-Boot
          3. Configuration du noyau Linux
          4. Format des images de système de fichiers racine produites
          5. Périphérique utilisé pour la console
          6. Cas d’une chaîne de compilation externe
          7. Sauvegarde de la configuration
      4. Test sur la carte DEV2410
      5. Cas des dernières versions de Buildroot (2011, 2012)
        1. Quelques exemples d’utilisation
          1. QEMU/Versatile PB
          2. SODIMM2410
          3. Eukréa CPUIMX51SD
      6. Conclusion
    2. Chapitre 11: Utiliser OpenEmbedded
      1. OpenEmbedded, historique du projet
      2. Principe de base
      3. Installation
        1. Prérequis
        2. Téléchargement de l’outil et préparation de l’environnement
        3. Premiers pas avec qemuarm
        4. Exploration des répertoires
          1. Organisation générale
          2. Les métadonnées
          3. L’environnement de travail
          4. Résultat de la construction
        5. Test de l’image avec QEMU
      4. Concepts d’OpenEmbedded
        1. Le grand chef : bitbake
        2. Le livre de recettes : OpenEmbedded
        3. Éléments de syntaxe
        4. À propos des tâches
        5. Anatomie d’une recette
          1. Recette à partir de sources brutes
          2. Recette à partir de sources utilisant Autotools
          3. Recette de compilation d’une application Qt
      5. Premier projet avec OpenEmbedded
        1. Comment travailler avec OpenEmbedded ?
          1. Sélection des couches
        2. Création de la couche du projet
        3. Création d’une image personnalisée
        4. Génération d’un SDK
        5. Astuces utiles
          1. Reconstruire un paquet
          2. Étude des dépendances
          3. Dépôt de paquets
          4. Libérer l’espace disque
          5. Travailler sans connexion Internet
          6. Construire une recette sans gestion de dépendances
          7. Que valent les variables d’une recette ?
          8. Un problème, une solution, un patch
      6. Perspectives
      7. Documentation
    3. Chapitre 12: Outils de mise au point
      1. Quels outils de mise au point sous Linux ?
      2. Mise en place de traces
        1. Introduction à syslog
          1. Trace depuis un programme utilisateur
          2. Trace depuis un module noyau
          3. Configuration par /etc/syslog.conf
          4. Cas de Busybox
      3. Utilisation de strace et ltrace
      4. Utilisation de GDB
        1. Mise au point avec gdbserver
        2. Utilisation de l’émulateur QEMU
          1. Mise au point du noyau Linux
          2. Mise au point d’un module dynamique
          3. Mise au point du bootloader U-Boot
        3. Utilisation de KGDB
          1. Mise au point du noyau Linux
        4. Utilisation d’une sonde JTAG
          1. Mise en œuvre de la sonde BDI3000
      5. Outils de mise au point mémoire
        1. Allocation de mémoire
        2. Les outils disponibles
      6. Mise en œuvre d’OProfile
        1. Installation d’OProfile
        2. Configuration d’OProfile
        3. Enregistrement des informations de profiling
        4. Production des résultats
      7. Mise en œuvre de Ftrace
        1. Ftrace ou LTT/LTTng ?
        2. Activation dans le noyau
        3. Premières utilisations de Ftrace
          1. Trace de fonction
          2. Trace d’événement
        4. Quelques utilisations plus avancées
        5. Exploitation des résultats
        6. Utilisation de trace-cmd
      8. Conclusion
    4. Chapitre 13: Systèmes temps réel
      1. Gestion du temps dans les systèmes d’exploitation
        1. Système à temps partagé
        2. Système temps réel
      2. Test d’une application temps réel sous Linux
        1. Description de l’expérience
        2. Développement du programme de test
          1. Configuration des options de préemption
          2. Modification de la politique d’ordonnancement
        3. Le noyau Linux n’est définitivement pas temps réel
      3. Le patch PREEMPT-RT
        1. Modifications effectuées
        2. Installation
        3. Test de performances
      4. Utilisation d’un co-noyau
        1. RTLinux
        2. RTAI
          1. Compilation et installation du noyau Linux modifié
          2. Compilation et installation de la distribution RTAI
          3. Test de la distribution
        3. Xenomai
          1. Architecture de Xenomai
          2. ADEOS
          3. Structure et fonctionnement d’une application Xenomai
          4. Installation de Xenomai
          5. Compilation et installation du noyau Linux modifié
          6. Compilation et installation de la distribution Xenomai
          7. Test de la distribution
          8. Interface /proc
          9. Prise en compte du multiprocessing (SMP)
          10. Adaptation de l’exemple de test du port parallèle
          11. Introduction à RTDM
          12. Test de Xenomai/ADEOS sur une architecture ARM
      5. Conclusion
    5. Chapitre 14: Interface homme-machine
      1. La console et les terminaux
        1. Configuration d’une disposition clavier spécifique
      2. X Window System
        1. Une introduction à X
        2. Adaptation du système X11
      3. Le framebuffer de Linux
        1. Configuration du framebuffer
        2. Utilisation du framebuffer
      4. Utilisation de DirectFB
      5. Utilisation de SDL
      6. Les toolkits graphiques
        1. Qt/Embedded
          1. Architecture de Qt/Embedded
          2. Mise en place de Qt/Embedded
        2. GTK+ sur framebuffer (GTK-DFB)
        3. La bibliothèque wxWidgets
        4. Le toolkit EFL
      7. LCDproc, une bibliothèque d’affichage LCD
      8. Pilotage à distance
        1. Serveur et navigateur web
        2. Nouvelles techniques du Web
          1. Java
          2. Ajax
          3. Adobe Flash
          4. HTML5
      9. Conclusion
    6. Chapitre 15: étude de cas
      1. Description du projet
      2. Éléments composant le système
        1. Le bootloader
        2. Le noyau
        3. Le système de fichiers racine
        4. Le SDK
        5. L’application
        6. Le déploiement
        7. En résumé
  12. Index

Product information

  • Title: Linux embarqué
  • Author(s): Pierre Ficheux, Eric Bénard
  • Release date: June 2012
  • Publisher(s): Eyrolles
  • ISBN: 9782212134827