Retrouvez cet article dans : Linux Magazine Hors série 24
Cet article se propose de faire la revue des principaux outils libres adaptés à l’embarqué. Ils sont répertoriés suivant les différentes étapes de conception et de fonctionnement d’un système embarqué.
Les principales caractéristiques de ces outils seront détaillées sans que soit toutefois précisée leur mise en œuvre. Certains le seront indirectement au travers des différents articles de ce hors-série.
La boîte à outils libres pour l’embarqué : une classification
Quand on désire mettre en œuvre des Logiciels libres autour du noyau Linux pour l’embarqué, il existe un certain nombre de contraintes importantes imposées par le matériel :
- La mémoire étant une ressource à optimiser pour réduire le coût du système embarqué (on n’a pas à disposition des centaines de Mo comme avec un PC classique), il convient d’avoir des outils occupant peu de mémoire. On dit qu’ils sont à faible empreinte mémoire.
- Ils doivent éventuellement pouvoir s’exécuter directement en mémoire ROM (FLASH ou EEPROM) sans recopie préalable en RAM pour optimiser l’utilisation de la mémoire RAM. On dit qu’ils supportent le XIP (eXecute in Place).
- Ils doivent fournir les mêmes fonctionnalités que leurs homologues pour Linux « classique ».
- Ils doivent être optimisés en temps d’exécution.
Ces outils peuvent être classifiés suivant les différentes étapes de conception et de fonctionnement du système embarqué. On s’intéressera donc à l’aspect logiciel et non matériel, par exemple aux outils libre pour concevoir le matériel (conception du PCB, conception numérique...).
Cette classification se base ainsi sur le déroulement de vie d’un système sous Linux embarqué :
- La compilation croisée des sources des outils libres.
- Les bibliothèques libc à faible empreinte mémoire.
- Le debug des outils libres et des applications.
- Le noyau Linux pour l’embarqué : liste des différents portages disponibles. Il est possible suivant les portages/distributions, de générer aussi le système de fichiers root (root File System) en même temps. Si cela n’est pas proposé, des outils libres comme BusyBox se proposent de le faire.
- Lancement du noyau : le bootloader Linux remplit ce rôle.
- Les outils libres.
Les outils libres peuvent être rangés à leur tour dans différentes catégories :
- Shells et commandes Linux de base.
- Éditeurs de texte.
- Outils réseau et connectivité IP.
- Interfaces graphiques.
- Émulateurs de processeurs.
- Autres.
Outils libres : mise en œuvre
La mise en place d’un environnement de développement croisé est nécessaire. On trouve deux éléments indispensables :
- Le PC de développement sous Linux. C’est la machine hôte ou host. Un compilateur C/C++ généralement est installé. C’est un compilateur croisé capable de générer du code exécutable par le système embarqué à développer.
- Le système embarqué à développer. C’est la machine cible ou target. Il exécutera le noyau Linux, les utilitaires et les applications spécifiques déployées.
La machine hôte et la machine cible sont reliées au minimum par l’intermédiaire d’une liaison série pour le téléchargement, la programmation et le debug de la cible. La liaison série sert classiquement comme sous Linux de port par défaut où sont envoyées les traces du noyau Linux embarqué.
Malheureusement, la liaison série, même programmée à 115,2 kb/s, est trop lente pour servir comme moyen de téléchargement de fichiers de plusieurs Mo. Cela peut prendre de quelques minutes à quelques dizaines de minutes.
On préfère donc utiliser une liaison Ethernet bien plus rapide : le téléchargement durera quelques dizaines de secondes. Cela implique d’avoir une connexion Ethernet présente sur la carte cible. Le moniteur/bootloader de la carte cible doit pouvoir supporter le téléchargement de fichiers par Ethernet. Pour cela, il intègre un client TFTP (Trivial FTP) fonctionnant au-dessus du protocole de transport UDP qui est facilement « romable » (adaptable sur mémoire morte ou flash) du fait d’être un protocole de transport non connecté et sans état.
La cible doit bien sûr pouvoir embarquer Linux. Pour cela, il faut que :
- Le processeur soit au moins un processeur 32 bits avec MMU (Linux) ou sans MMU (µClinux).
- Que la cible ait quelques Mo de mémoire RAM et ROM (FLASH pour la facilité de reprogrammation).
Dès lors, tout est possible pour utiliser des outils libres...
Outils libres : compilateurs croisés
A tout seigneur, tout honneur. Sans le compilateur GNU gcc, rien ne serait possible et Linux ne serait pas ! Merci RMS !
Étant fortement configurable et modulaire, il est possible à partir de ses sources de générer un compilateur croisé pour pratiquement tous les processeurs utilisés dans l’embarqué. Les langages intéressants pour l’embarqué sont principalement le langage C et dans une moindre mesure, le langage C++. Pierre (Ficheux) a présenté dans le numéro 74 de juillet/août 2005 de Linux Magazine comment générer un tel compilateur croisé. On pourra soit :
- Générer from scratch le compilateur croisé à la main ou à l’aide de l’outil Crosstool.
- Utiliser une chaîne de compilation croisée déjà générée et précompilée, ce qui est préférable.
Le tableau suivant présente les principaux outils libres de cette rubrique :

Outils libres : bibliothèques libc
La bibliothèque libc permet d’avoir accès aux appels systèmes standards d’E/S de Linux (stdio.h). Il convient d’avoir une libc à faible empreinte mémoire. La libc standard est celle du projet GNU dénommée glibc. Malheureusement, elle n’est pas adaptée à l’embarqué car elle n’est pas à faible empreinte mémoire.
Le tableau suivant présente les principaux outils libres de cette rubrique :

Outils libres : debug
Ces outils permettent de debugger le noyau Linux et les applications embarquées. L’outil debugger roi est le GNU gdb.
Il est bien sûr possible, si l’on a les outils adéquats, d’utiliser un émulateur ICE (In Circuit Emulator) qui reste un outil performant mais cher. Si l’on possède par exemple une interface de debug matérielle ICD (In Circuit Debugger) comme le BDM (Background Debug Module), il est possible de la coupler à gdb.
Dans le cas du debug d’une application, 2 possibilités s’offrent au développeur :
- Utiliser le port série de liaison entre l’hôte et la cible, couplé à gdb.
- Utiliser le réseau Ethernet. Dans ce cas, une application serveur gdbserver est lancée sur la cible pour debugger l’application. On utilisera alors l’application gdb comme application cliente pour se connecter ensuite à l’application gdbserver de la cible.

L’outil gdb, bien que puissant, s’utilise en mode lignes de commande très austères. Il est possible de le coupler à une interface graphique servant de front end pour pouvoir l’utiliser de façon plus conviviale. Le tableau suivant présente les principaux outils libres de cette rubrique :
Outils libres : noyau Linux pour l’embarqué
Le noyau Linux standard est initialement conçu pour les processeurs de la famille x86. La version courante du noyau (2.6) contient néanmoins le portage pour les processeurs suivants : alpha, ARM, H8300, IA64, m68k, m68knommu, MIPS, PowerPC, S390, SH, SH64, SPARC, SPARC64, V850, x86_64... Mais l’on doit souvent patcher les sources du noyau Linux officiel pour tenir compte des particularités spécifiques à un type de processeur dans une famille donnée. Il vaut mieux alors s’orienter vers des noyaux patchés, adaptés à son type de processeur et prêts à l’emploi.
Le tableau suivant présente les principaux outils libres de cette rubrique :

Outils libres : bootloaders
Le bootloader est avant tout un moniteur ROM qui permet d’initialiser la carte cible et d’avoir accès à des commandes de debug de base :
- Lecture/écriture mémoire.
- Assemblage/désassemblage en ligne.
- Téléchargement de fichiers images (fichiers au format binaire, Motorola Srecord ou Intel) par la liaison série ou par l’interface réseau Ethernet de la carte cible.
- Lancement de programme et debug avec points d’arrêt et mode pas à pas.
- Programmation de mémoire ROM de type FLASH (avec par exemple l’image d’un noyau Linux embarqué et son root File System).
La fonctionnalité la plus intéressante est celle de bootloader qui permet de lancer un noyau Linux et de lui spécifier son root File System installé généralement en mémoire FLASH. Ce dernier peut être aussi éventuellement monté par NFS (Network File System).
Le bootloader Linux le plus universel et le plus intéressant est sans aucun doute u-boot (Universal boot).
Le tableau suivant présente les principaux outils libres de cette rubrique :

Outils libres : shells et commandes Linux de base
L’interpréteur de commandes Linux ou shell est indispensable pour une interaction et la configuration de la carte cible. Il doit être à faible empreinte mémoire. Le véritable couteau suisse pour Linux embarqué est BusyBox.
L’outil BusyBox :
- Est un outil libre à faible empreinte mémoire.
- Fournit un shell (ash, lash).
- Fournit toutes les commandes Linux de base via un seul exécutable et des liens symboliques.
- Peut générer un système de fichiers root avec des scripts simples d’initialisation.
- Se compile avec la glibc ou µClibc.
- Intègre un serveur web, un client/serveur DHCP, des outils réseau et fournit les commandes de gestion de modules Linux...
La liste des commandes et utilitaires fournis est impressionnante (http://busybox.net/downloads/BusyBox.html)Â :
addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2, busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk, fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt, getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, fdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iptunnel, kill, killall, klogd, lash, last, length,
Le tableau suivant présente les principaux outils libres de cette rubrique :

Outils libres : éditeurs de texte
L’éditeur de texte intégré dans le système cible est très pratique pour pouvoir faire des modifications en cours de fonctionnement sur les fichiers de configuration. Le tableau suivant présente les principaux outils libres de cette rubrique.



Outils libres : outils réseau et connectivité IP
Les outils réseau et de connectivité IP concernent toutes les applications mettant en œuvre les protocoles IP. Cela comprend principalement tous les serveurs web embarqués qui servent à piloter le système embarqué à distance. Le tableau suivant présente les principaux outils libres de cette rubrique.
Outils libres : interfaces graphiques
Certains systèmes embarqués peuvent intégrer un environnement graphique pour avoir des IHM graphiques (Graphical User Interface). Si le circuit graphique intégré dans le système embarqué le supporte, il est possible d’utiliser le mode frame buffer disponible par défaut avec le noyau Linux. Il est aussi possible de mettre en place des environnements graphiques du type X11. Le tableau suivant présente les principaux outils libres de cette rubrique.
Outils libres : émulateurs
Les émulateurs permettent sur la machine hôte d’émuler le processeur de la machine cible. Il est même possible aussi d’émuler le système Linux de la machine cible dans sa globalité sur la machine hôte ! Le tableau suivant présente les principaux outils libres de cette rubrique.

Outils libres : autres
Les outils suivants sont importants dans l’environnement Linux embarqué. Le tableau suivant présente les principaux outils libres de cette rubrique.

Où trouver d’autres outils libres ?
Il est possible de trouver des outils libres sous licence GPL sur différents sites les hébergeant. Ils ne sont pas forcément adaptés à l’embarqué, mais doivent pouvoir être portés sur la carte cible si l’on possède le compilateur croisé adéquat. Le tableau suivant présente les principaux sites hébergeant des outils libres.

Enfin, il reste les sites consacrés à un processeur cible donné qui contiennent de nombreuses ressources. Le tableau suivant présente les principaux sites sur les processeurs cibles :

Conclusion
Nous avons pu voir les principaux outils libres disponibles pour l’embarqué. Il en existe bien sûr d’autres et consulter les sites comme sourceforge.net et freshmeat.net au préalable est un réflexe à acquérir.
De même, s’abonner à un newsgroup s’intéressant à l’outil libre choisi est plus qu’obligatoire car l’on retrouve généralement dans les archives du newsgroup la réponse à son problème.
Une chose est néanmoins certaine : dans l’embarqué, il est inutile de vouloir réinventer la roue !
Bibliographie
- La page outils pour Linux embarqué de l’auteur, http://www.enseirb.fr/~kadionik/embedded/embeddedlinux.html#OUTILS
- Opdenacker (M.), Free Software tools for embedded systems, Free Electrons, http://free-electrons.com/training/devtools/en
Retrouvez cet article dans : Linux Magazine Hors série 24

