RTS12Linux embarqu : construire son OS
Tanguy Risset
Labo CITI, INSA de Lyon, Dpt Tlcom
jan. 2011
RTS12 : Linux embarqu : 1
Historique Linux embarqu
Nombreuses versions de Linux embarqu pour diffrentstypes de matriel (Tlphones portable, PDA, set-topboxes, ...). Les caractristiques de ces systmes :
peu de RAM mmoire Flash (pas de disque dur) De nombreux priphriques spcifiques
Noyau Linux lger, souvent temps rel Quelques solutions Linux embarqu :
Distribution Linux Familiar (PDA) Open Moko (smart phones) Busy Box (commandes essentielles Unix en un seul fichier) Open Zaurus (PDA Sharp) ...
RTS12 : Linux embarqu : Introduction 2
Construire un Linux embarqu
Devant le nombre croissant de plate-formes apparaissant,les dveloppeurs ont mis en commun leurs efforts pourdvelopper des plate-formes de construction de linuxembarqu.
CrossTools OpenEmbedded
Construire un noyau simple pour larchitecture cible Slectionner seulement les paquets ncessaires Mettre en place le systme de boot Construire un environnement de compilation croise
RTS12 : Linux embarqu : Introduction 3
Architecture globale
RTS12 : Linux embarqu : Introduction 4
Matriel embarqu
Le matriel embarqu est diffrent du matriel classique : Diverses architectures de processeur : ARM, MIPS,
PowerPC... et x86 aussi Stockage en mmoire Flash (de type NAND ou NOR),
limite en capacit (quelques MB quelque centaine deMB)
RAM capacit limite (Quelques MB quelques dizainesde MB)
Diffrents bus spcifiques : I2C, SPI, CAN... Existence de cartes de dveloppement avec des facilits
de tlchargement du code et de debug.
RTS12 : Linux embarqu : Introduction 5
Exemple
Beaglboard
Arm Cortex A8 1 GHz DaVinci digital media
processor (DM3730,ARM+DSP) Puce graphique 3D 512 MB of DDR SDRAM 4GB SD-Card I2C, SPI, DVI-D, S-Video, 4
port USB Hub, StereoIn/Out, Ethernet 10/100...
Open Moko
ARM 920T 400 MHz,Samsung 2442B 2 MB of NOR flash 128 MB of RAM 256 MB of NAND flash 640x480 touchscreen , Bluetooth, GSM, serial,
GPS, sound, 2 buttons,Wifi, USB, etc.
RTS12 : Linux embarqu : Introduction 6
Configuration minimale pour Linux embarqu
Un CPU support par GCC et le noyau linux CPU 32 bits Les CPU sans MMU sont aussi supports travers le
projet uCinux
Au moins 4 8 MB de RAM Au moins 2 4 MB de stockage mmoire Linux nest pas adapt aux systmes bass sur les petits
micro-controleurs comme lEZ430 (quelque centaines dekB de Flash et RAM), pour ces systmes l : Pas dOS OS ddi (Contiki, FreeRTOS...)
RTS12 : Linux embarqu : Introduction 7
Composants logiciels
Une chane de compilation croise Compilateur qui tourne sur la machine de dveloppement
mais qui gnre du code pour la plate-forme embarque. Bootloader
Dmarr par le matriel directement, responsable desinitialisations de base, du chargement et de lexcution dunoyau
Noyau Linux Responsable de la gestion des diffrents services pour les
applications (processus, mmoire virtuelle, pile rseau,pilote de priphrique, ...)
Librairie C Interface entre le noyau linux et les applications de lespace
utilisateur Librairies et application
Votre programme....
RTS12 : Linux embarqu : Introduction 8
Systme de fichier Root
Dans un systme Linux, plusieurs systmesde fichiers peuvent tre monts et crer unhirarchie globale de fichiers et rpertoires Un systme de fichier particulier, le systme
de fichier root est mont en / . Sur les Linux embarqus, le systme de
fichier root contient toutes les librairies,applications, et donnes du systme. Construire ce systme de fichier est lune des
tche essentielle de lintgration de Linux surla plate-forme embarque. En gnral le noyau est spar du systme
de fichier root
RTS12 : Linux embarqu : Introduction 9
Chane de compilation croise La chane de compilation classique est une chane de
compilation native Pour les systmes embarqus, on utilise une chane de
compilation croise (cross-compiling toolchain). Elle est gnralement compose de
Binutils : as, ld, objdump, nm, strip, ... En-ttes du noyau (kernel header) Compilateur GCC
I peut cibler diffrents CPU : ARM, AVR, Blackfin, CRIS, FRV,M32, MIPS, MN10300, PowerPC, SH, v850, i386, x86_64,IA64, Xtensa, etc
Bibliothque C/C++I Composant essentiel, permet linteraction entre les
programmes et le noyauI De nombreuses dclinaisons :glibc, uClibc, eglibc,
dietlibc, newlibI La libC est choisie en mme temps que la chane de
compilation croise, gcc tant compil avec. Dbugger GDB
RTS12 : Linux embarqu : Chanes de compilation croises 10
Librairie C
glibc GNU Lib C ' 2.5MB pour ARM eglibc embedded glibc uClibc, librairie trs lgre Dietlibc (' 70KB) Newlib Exemples de tailles de programmes :
RTS12 : Linux embarqu : Chanes de compilation croises 11
Construire une chane de compilation
Bien distinguer La machine sur laquelle est construite la chane de
compilation (build machine) La machine sur laquelle la chane de compilation va tre
excute (host machine) La machine sur laquelle les binaires gnrs par la chane
de compilation vont tre excuts (target machine).
En gnral, host et build machines sont les mmes. Choisir la libc Choisir les versions des diffrents composants Configurer la chane :
format binaire, ABI (Application Binary Interface) calcul flottant ? Locale, IPV6, etc...
RTS12 : Linux embarqu : Chanes de compilation croises 12
tapes de construction
Une fois tous les choix effectus (ou.. pour toutes lesconfigurations choisies) : Extraire et installer les en-ttes du noyau Extraire, configurer et installer les binutils Extraire, configurer et installer une premire version de gcc
qui va gnrer les binaires pour la cible. Extraire, configurer et compiler la libc en utilisant le
compilateur construit ltape prcdente Configurer et compiler le cross-compilateur gcc
RTS12 : Linux embarqu : Chanes de compilation croises 13
Construire une chane de compilation croise
On peut le faire soi-mme... en thorie... On peut utiliser une chane de compilation pr-compile
CodeSourcery, http://www.codesourcery.com http://elinux.org/Toolchains Mais, aucune prise sur la configuration (paquets installs,
target machine...) Ou on peut utiliser des outils de gnration de chanes de
compilation CrossTools, Le prcurseur (Dan Kegel), plus maintenuhttp://www.kegel.com/crosstool
Crosstool-ng, http://ymorin.isageek.org/dokuwiki/projects/crosstool
buildroot, http://buildroot.uclibc.org PTXdist, http://www.pengutronix.de/software/ptxdist OpenEmbedded, le plus complethttp://www.openembedded.org/
RTS12 : Linux embarqu : Chanes de compilation croises 14
http://www.codesourcery.comhttp://elinux.org/Toolchainshttp://www.kegel.com/crosstoolhttp://ymorin.isageek. org/dokuwiki/projects/crosstoolhttp://ymorin.isageek. org/dokuwiki/projects/crosstoolhttp://buildroot.uclibc.orghttp://www.pengutronix.de/software/ptxdisthttp://www.openembedded.org/
Le bootloader
Sur les architectures embarques, le boot de bas niveauest trs dpendant du CPU et de la plate-forme. Certaines cartes ont une Flash partir de laquelle le CPU
boote aprs un reset Certains CPU ont un morceau de code intgr dans une
ROM qui charge automatiquement une petite portion deFlash dans la RAM
Il existe de nombreux bootloader open-source gnriques,parmis eux : U-Boot, Universal boot, standard de facto, maintenu par
Denx http://www.denx.de/wiki/UBoot Barebox, successeur dU-boot, mais ne supporte pas
encore autant de matriels
RTS12 : Linux embarqu : La sequnce de boot 15
http://www.denx.de/wiki/UBoot
U-boot U-boot doit tre install dans la mmoire Flash pour tre
excut par le matriel : La carte propose un moniteur de boot qui permet de flasher
le bootloader de second niveau (cest le cas sur labeagleboard)
U-boot est dj install et peut tre utilis pour se re-flasher(attention, peut rendre la carte inutilisable !)
La carte propose une interface JTAG qui permet dcriredans la Flash sans aucun system tournant sur la carte.
Une fois install, U-boot propose, par lintermdiaire duport srie, un certain nombre de commandes. U-boot est alors utilis pour charger et booter sur une
image noyau (uImage ou U-boot image), mais il peut aussichanger limage noyau ou le systme de fichier rootprsent sur le systme. La communication avec lhte se fait par Ethernet (tftp)
ou le port srie
RTS12 : Linux embarqu : La sequnce de boot 16
Linux : Squence de boot traditionnelle
1. Bootloader Excute par le CPU une adresse fixe en ROM/Flash Initialize le support du matriel ou se trouve le noyau
(Flash, rseau, SD-card...) Charge limage du noyau dans la RAM Lance lexcution du noyau
2. Noyau Se dcompresse lui-mme Initialise le noyau et les pilotes compils statiquement
utiliss pour accder le systme de fichier root monte le systme de fichier root excute le premier programme utilisateur (spcifi par le
parametre init du noyau).3. Premier programme utilisateur
Configure lespace utilisateur et dmarre les servicessystmes
RTS12 : Linux embarqu : La sequnce de boot 17
Mais...
Cette squence implique que tous les pilotes depriphriques sont compils statiquement dans le noyau. Cette hypothse est valide dans le monde embarqu ou le
noyau est paramtr en fonction du matriel, elle lestbeaucoup moins pour les PC de bureau. Le systme de boot actuel contient donc le mcanismeinitramfs (ex-initrd) Un petit systme de fichier contenu dans le noyau lui-mme Il peut dtecter le matriel, charger les modules du noyau
ncessaires Il monte alors le systme de fichier root et excute linit
RTS12 : Linux embarqu : La sequnce de boot 18
Connaissance pour Linux embarqu
La mise ne place dun linux embarqu ncessite deconnatre un peu le mcanisme de boot, notamment pourparametrer correctement la commande de lancement dunoyau. Il faut aussi connatre ladministration linux (gestion de
paquets, installation driver, etc.) Enfin suivant le type de stockage physique disponible, le
systme de fichier peut tre spcifique Pour normment de plates-formes existantes, les
configurations requises sont disponibles dans les outils deconstruction de chane de compilation commeOpenEmbedded
RTS12 : Linux embarqu : La sequnce de boot 19
OpenEmbedded
Initi par les dveloppement mis en commun de ladistribution OpenZaurus pour les PDA Sharp Zaurus et dela distribution Familiar pour PDAs. Rejoint ensuite par de nombreuses distributions :
OpenSimpad, GPE Phone Edition, ngstrm, OpenMoko... Bas sur bitbake : un norme Makefile mondial OpenEmbedded contient actuellement (2011)
2097 packages dans recipes/ 7294 versions de packages dans recipes//*.bb
305 machines dfinies dans conf/machine 34 distributions dfinies dans conf/distro
RTS12 : Linux embarqu : OpenEmbedded 20
BitBake
BitBake est le composant permettant OpenEmbeddeddexister Implment en python partir de loutils de gestion des la
distribution Gentoo (emerge) BitBake peut :
Tlecharger les sources sur internet (.tgz, svn, git,...) Appliquer les patches Construire les composants Construire le compilateur et le cross-compilateur Configurer, compiler la libc Crer le systme de fichier root, Crer et installer les packages additionel necessaires
(systme de gestion de paquets ipkg)
RTS12 : Linux embarqu : OpenEmbedded 21
BitBake
RTS12 : Linux embarqu : OpenEmbedded 22
Utilisation dOpenEmbedded : beaglboard
Procdure suivie pour la mise en place de ce cours Distribution Angstrom :http://www.angstrom-distribution.org/
git clonegit://gitorious.org/angstrom/angstrom-setup-scripts.git
(installe bitbake et openembedded, tout est fait dans lerepertoire angstrom-setup-scripts.) export MACHINE=beagleboard bitbake console-image ....... Quelques heures et 5 Gigas plus tard ....
RTS12 : Linux embarqu : OpenEmbedded 23
http://www.angstrom-distribution.org/
Dploiement dAngstrom avec OpenEmbedded
dans le repertoireangstrom-setup-scripts/build/tmp-angstrom_2008_1/
deploy/glibc/images/beagleboard
fichiers u-Boot, uImage Systme de fichier rootAngstrom-console-image-glibc-ipk-2010.
7-test-20110111-beagleboard.rootfs.tar.bz2
Modules modules-beagleboard.tgz
Une fois tout cela install sur la carte SD.....
RTS12 : Linux embarqu : OpenEmbedded 24
angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboardangstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboardAngstrom-console-image-glibc-ipk-2010.7-test-20110111-beagleboard.rootfs.tar.bz2Angstrom-console-image-glibc-ipk-2010.7-test-20110111-beagleboard.rootfs.tar.bz2modules-beagleboard.tgz
beaglboard booting AngstromTexas Instruments X-Loader 1.4.4ss (Jul 28 2010 - 16:59:13)Beagle xM Rev AReading boot sectorLoading u-boot.bin from mmcU-Boot 2010.03 (Aug 06 2010 - 11:28:56)[....]reading boot.scr** Unable to read "boot.scr" from mmc 1:1 **reading uImage[...]
Loading Kernel Image ... OKOK
Starting kernel ...Uncompressing Linux.............................................................[ 0.000000] Linux version 2.6.32 (koen@dominion) (gcc version 4.3.3 (GCC) ) 0[..............]Starting GPE display manager: gpe-dm
.-------.| | .-.| | |-----.-----.-----.| | .----..-----.-----.| | | __ | ---'| '--.| .-'| | || | | | | |--- || --'| | | ' | | | |'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
-' |'---'
The Angstrom Distribution beagleboard ttyS2Angstrom 2009.X-test-20100104 beagleboard ttyS2
beagleboard login: rootroot@beagleboard:~#
RTS12 : Linux embarqu : OpenEmbedded 25
Rfrences
Certains slides et illustrations proviennent de Free Electrons :http://free-electrons.com/
Prsentations BeagleBoad :http://beagleboard.org/esc
RTS12 : Linux embarqu : OpenEmbedded 26
http://free-electrons.com/http://beagleboard.org/esc
Linux embarquIntroductionChanes de compilation croisesLa sequnce de bootOpenEmbedded