26
RTS12 Linux embarqué : construire son OS Tanguy Risset Labo CITI, INSA de Lyon, Dpt Télécom jan. 2011 RTS12 : Linux embarqué : 1

Linux embarqué : construire son OS Tanguy Rissetperso.citi.insa-lyon.fr/trisset/cours/rts12/slides/embedded-linux.pdf · Construire un Linux embarqué Devant le nombre croissant

  • Upload
    lamnhu

  • View
    235

  • Download
    2

Embed Size (px)

Citation preview

  • RTS12Linux embarqu : construire son OS

    Tanguy Risset

    [email protected]

    Labo CITI, INSA de Lyon, Dpt Tlcom

    jan. 2011

    RTS12 : Linux embarqu : 1

    [email protected]

  • 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