Sysmic - J. Pouiller Formation à Linux Embarqué 2 / 254



Documents pareils
[DEVELOPPEMENT SUR LA CIBLE 2440] 19 avril 2010

Compilation croisée sous Linux et Windows

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Formation à Linux Embarqué. Jérôme Pouiller

Créer. Deuxième partie II. Ajouts d utilisateurs. Formation à Linux Embarqué. Résolution DNS. mot de passe

Formation à Linux Embarqué. Jérôme Pouiller

Systèmes embarqués D.Rossier

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Développement d une carte à processeur linux

Installation software

sshgate Patrick Guiran Chef de projet support

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Programmation C. Apprendre à développer des programmes simples dans le langage C

Personnes ressources Tice. Académie de Rouen

INFO-F-404 : Techniques avancées de systèmes d exploitation

MI03 TP. Objectifs du TP 1ère séance. 2ème séance. Construction d'un système linux embarqué complet

Département de génie électrique. ELE784 - Ordinateurs et programmation système. Laboratoire #1

Naissance d'un REPTAR

Construction de logiciel et packaging

Aide-Mémoire unix. 9 février 2009

Tutorial uclinux ARM7 Development Starter Kit. Pragmatec Produits et services dédiés aux systèmes embarqués. uclinux - Mise en oeuvre

Systèmes Embarqués Libres

Traitement de données

Introduction au langage C

Linux embarqué: une alternative à Windows CE?

Chapitre 10 : Logiciels

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Quelques éléments de compilation en C et makefiles

Installation et mise en œuvre de OpenSSH sous AIX 5L

Table des matières Hakim Benameurlaine 1

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Bon ben voilà c est fait!

Installation d'un serveur sftp avec connexion par login et clé rsa.

Installation et prise en main

Programmation système I Les entrées/sorties

Systèmes d exploitation

Projet Administration Réseaux

La mémoire. Un ordinateur. L'octet. Le bit

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

1 Démarrage de Marionnet

Le prototype de la fonction main()

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

3IS - Système d'exploitation linux - Programmation système

SSH, le shell sécurisé

Parallels Transporter Lisez-moi

TP1. Outils Java Eléments de correction

Optimisation de logiciels de modélisation sur centre de calcul

ST50 Projet de fin d études Noyau Linux et multi-processeur pour une plateforme embarquée

Guide simplifié pour QEMU

Virtual Box Mettez un PC dans votre... PC

Cours Langage C/C++ Programmation modulaire

Serveur de sauvegarde à moindre coût

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

phidget_v1.odt - Système embarqué sous Linux - rev.139 PHIDGET SBC (SINGLE BOARD COMPUTER)

Session 8: Android File System

Outils pour la pratique

INSTALLATION DEBIAN. Installation par le réseau

Tutoriel code::blocks

Linux 1: Présentation

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

Détection de pollution maritime avec GNU/Linux. Eric Bénard - eric@eukrea.com - 08 juillet 2010

Systèmes informatiques

Tuto 2 : Configuration Virtual box, Configuration et installation du serveur XiBO

Projet Semestre2-1SISR

La création d un paquet Debian. Aurélien Jarno. Journées du Logiciel Libre. 15 octobre 2005

SSH et compagnie : sftp, scp et ssh-agent

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Exercice sur les Dockers

I. Linux/Unix/UnixLike

Linux embarqué Retour d expérience et temps réel. Denis Coupvent-Desgraviers

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

Installation de Zabbix

Atelier : Virtualisation avec Xen

Initiation. àl algorithmique et à la programmation. en C

Builds et tests Utilisation de CMake et de Dart

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

VMware ESX/ESXi. 1. Les composants d ESX. VMware ESX4 est le cœur de l infrastructure vsphere 4.

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

ERESI : une plate-forme d'analyse binaire au niveau noyau. The ERESI team

Oracle 11g. Installation et administration. Claude Duvallet 1/36

Enoncé du TP 8 Système

Outils de développement collaboratif

Les différentes méthodes pour se connecter

Environnement Informatique EMSE Linux

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 3

Leçon 1 : Les principaux composants d un ordinateur

Créer son premier package.deb. 19 août

Installation d'un FreeNAS (v0.684b du 30/03/2007) pour sauvegarder les données d'un ZEServer

SSH. Romain Vimont. 7 juin Ubuntu-Party

Sauvegarde automatique des données de GEPI

Les commandes relatives aux réseaux

Module.NET 3 Les Assemblys.NET

Virtualisation CITRIX, MICROSOFT, VMWARE OLIVIER D.

Contrôle distant par liaison SSH Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Mise en place d un serveur trixbox sur un domaine Kwartz. Version 1.0 du 25 juin 2012 Lycée Polyvalent d Artois, Noeux les Mines Adrien Bonnel

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Transcription:

Sommaire Formation à Linux Embarqué Jérôme Pouiller <j.pouiller@sysmic.org> Administration d un Linux embarqué Création d un Linux Le noyau Debug et instrumentation Première partie I Administrer Sysmic - J. Pouiller Formation à Linux Embarqué 2 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 3 / 254 1 Notre environement Linux L embarqué 2 Le shell Bases 3 Communiquer avec la cible En RS232 Par ethernet Transférer des fichiers Utilisation de clefs numériques 4 Compiler et executer 5 Les Makefile Les Autotools Kmake En cas de problème 6 Ecrire un projet pour Linux embarqué Avec les Autotools Sans les Autotools 7 Bibliothèques courantes Sysmic - J. Pouiller Formation à Linux Embarqué 4 / 254 Qu est-ce que Linux? Linux ne désigne que le noyau Linux est souvent associé aux outils GNU d où le nom de GNU/Linux Systèmes avec les outils GNU mais un noyau différent : GNU/Hurd, Solaris, etc... Systèmes Linux sans GNU : Android Le nombre de systèmes Linux installés est difficile à évaluer (en partie à cause des système Linux embarqués) Sysmic - J. Pouiller Formation à Linux Embarqué 5 / 254 Composants de Linux GNU/Linux est finalement un aggloméra : App App Bash GNU App GNU lib GNU libc Noyau Linux Matériel App App Lib Sysmic - J. Pouiller Formation à Linux Embarqué 6 / 254 La Norme Posix Portable Operating System Interface [for Unix] Uniformise les OS Première version publiée en 1988 Souvent implémentée en partie... et parfois s en inspire simplement Posix Linux Linux Posix Le Projet GNU Créé en 1983 par Richard Stallman Pose les bases politiques de GNU/Linux GPL publiée en 1989 GPLv2 en 1991 GPLv3 en 2006 gcc apparait en 1985 bash et les Coreutils apparaissent en 1988 (inspirés de sh 1971/1977) Nombre d architectures supportées incalculable Le noyau Linux Créé en 1991 par Linus Torvalds Système communautaire 15 millions de lignes de code dans 30000 fichiers (+15%/an) Environ 1200 développeurs dans 600 entreprises (+35%/an) Environ 5000 contributeurs depuis la première version de Linux Environ 650 mainteneurs (c est-à-dire responsbales d une partie du noyau) Domaine d application très large, du DSP au super-calculateurs en passant pas les grille de calcul 24 architectures (= jeux d instructions) Des centaines de plateformes Environ 1000 drivers Une centaine de versions publiées Environ 10000 contributions sur chaque version Enormément de forks et de version non-officielles Sysmic - J. Pouiller Formation à Linux Embarqué 7 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 8 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 9 / 254

Qu est-ce qu une distribution? Qu est-ce que l embarqué? Cible et Hôte Debian, Ubuntu, Meego, Red Hat, Suse,... s de programmes disponibles pour GNU/Linux Ensemble de normes et de procédure Permet de garantir le fonctionnement des programmes distribué Notre distribution Hôte : Ubuntu Notre distribution Cible : Aucune D après Wikipedia : Un système embarqué peut être défini comme un système électronique et informatique autonome, qui est dédié à une tâche bien précise. Ses ressources disponibles sont généralement limitées. Cette limitation est généralement d ordre spatial (taille limitée) et énergétique (consommation restreinte). Les systèmes embarqués font très souvent appel à l informatique, et notamment aux systèmes temps réel. Le terme de système embarqué désigne aussi bien le matériel que le logiciel utilisé. Nous parlerons de système cible (target, la board) et de système hôte (host, votre machine) Le host va nous permettre de programmer, debugger, contrôler le système cible durant la période de développement Le système cible sera ensuite autonome. Nous utilisons un Linux sur les deux systèmes. Cela n est pas une obligation (même, si cela facilite certains automatismes). Sysmic - J. Pouiller Formation à Linux Embarqué 10 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 11 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 12 / 254 La cible : Calao USB-A9260 La cible : Calao USB-A9260 Bases Architecture très classique dans le milieu de Linux embarqué : Microcontrolleur Atmel AT91SAM9260 Core ARM926EJ-S 180MHz 256Mo de flash 64Mo de RAM 64Ko d EEPROM Choisie car compacte, bien documentée, ouverte et très bien supportée par Linux Sous Linux, on peut faire beaucoup de choses avec la ligne de commande Très souvent, ce sera le seul langage de script disponible sur la cible Lancer une commande $ ls Séparation des arguments par des espaces $ mkdir dir1 dir2 Souvent les arguments optionnels commence par - pour les options courtes et -- pour les options longues (attention aux exceptions) $ ls -l -a $ ls -la $ ls --sort=time Sysmic - J. Pouiller Formation à Linux Embarqué 13 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 14 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 15 / 254 Redirections Redirections Les chemins On utilise beaucoup les redirections des entrées/sorties sous Linux (< >) : Commande standard $ echo foo Sortie standard vers un fichier $ echo foo > file1 Un fichier vers l entrée standard $ cat -n < file1 Sortie standard d une commande vers l entrée d une autre $ echo bar foo wc $ ls wc -l Couplage des redirections $ cat -n < file1 wc > file3 L espace n est pas obligatoire et les redirections ne sont pas forcement à la fin de la ligne $ >file2 cat<file1 -n Il est possible d utiliser des chemins : absolus $ mkdir /tmp/tete relatifs $ mkdir../../tmp/titi mkdir foo signifie mkdir./foo Sysmic - J. Pouiller Formation à Linux Embarqué 16 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 17 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 18 / 254

Documentation : man (man -l pour une page locale ). </> et <?> permettent de rechercher dans une page de man Globbing (à ne pas confondre avec les expressions régulières) $ rm *.o Alias $ alias ll="ls -l --color=auto" $ alias cp="cp -i" $ alias mv="mv -i" $ alias rm="rm --one-file-system" Complétion (permet d aller plus vite et se protèger des fautes de frappe) $ cd /h<tab>/j<tab>/c<tab> Quelques séquences de touches : <Home>/<End> : début/fin de ligne <Ctrl+Left>/<Ctrl+Right> : se déplacer d un mot à l autre <Up>/<Down> : se déplacer dans l historique des commandes <Ctrl+R> : rechercher dans l historique. <Ctrl+R> de nouveau pour itérer Utilisez le copier-coller à la souris selection : copie click-milieu : colle double-click : selectionne le mot triple-click : selectionne la ligne Ecrire un script shell Les fonctionnalités d un script shell sont abolument identiques à celles de la ligne de commande. Ouvrir un nouveau fichier. On suffixe généralement les shell par +.sh+ $ vim script.sh Indiquer le shell utilisé sur la première ligne, préfixé de #! #!/bin/sh La suite s ecrit comme sur la ligne de commande echo foo bar Il est nécéssaire de donner les droits en exécution au script $ bash script.sh $ chmod +x script.sh $./script.sh Sysmic - J. Pouiller Formation à Linux Embarqué 19 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 20 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 21 / 254 Convention Se connecter par RS232 Se connecter par RS232 Par convention, nous préfixons dans ces slides les commandes shell par : $ pour les commandes à exécuter par l utilisateur normal % pour les commandes à exécuter par root > pour les commandes non-shell Nous préfixons parfois les commandes shell par le système ou la commande doit être executée RS232 est très utilisé. Vous trouverez peu de systèmes sans RS232 D un point de vue électrique : Gnd, Rx, Tx (+ RTS et CTS, mais inutile) Il est relativement simple de communiquer en RS232 avec une pin de sortie du processeur, mais de nos jours, on utilise des contrôleurs RS232 qui simplifient énormément le travail On pourra trouver des bus similaires et convertible en RS232 : RS422, RS485 Il faut un câble nul modem (= câble croisé) Il faut que le Linux sur la cible soit configuré pour utiliser le port RS232 comme console Possible en ajoutant console=ttys0,115200n8 dans la ligne de commande du noyau (sur PC, il suffit de passer par grub) Possible de le mettre dans la configuration du noyau Il faut sur le Linux un programme pour se logguer sur le port RS232 (comme sur PC) : login ou getty Il faut configurer le port RS232 : bitrate, protocole... Sysmic - J. Pouiller Formation à Linux Embarqué 22 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 23 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 24 / 254 Pourquoi n y a-t-il pas de port série sur notre cible? Communiqer par RS232 Avec les outils de haut niveau Communiqer par RS232 Minicom Vous savez qu il existe des convertisseurs USB/RS232 Sur notre cible, un convertisseur USB/RS232 intégré à la carte Le port USB que vous voyez n est pas vu par le micro-contrôleur. Il est relié à une puce qui effectue la conversion USB/RS232 et relie la connexion série à la sortie console du micro-contrôleur. Cela permet : d économiser une alimentation (le PC alimente) de gagner la place d un port série et d un port Jtag Permettre d accéder au port série sans être root : host% adduser user dialout Il est nécessaire de se relogguer pour que les modifications sur les groupes soient prises en compte Les outils de haut niveau : minicom : La référence picocom : Fonctionne sans ncurses (mieux pour l automatisation) gtkterm : Fonctionne en graphique putty : Fonctionne sous Linux et sous Windows Attention aux conflits avec certains services comme ModemManager host% apt-get install minicom host$ minicom -D /dev/ttyusb0 host$ minicom La configuration se fait par <RET><Ctrl+A><O> Serial Device : /dev/ttyusb0... Bps/Par/Bits : 115200 8N1 Hardware Flow Control : No <- Important Software Flow Control : No Sysmic - J. Pouiller Formation à Linux Embarqué 25 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 26 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 27 / 254

Communiquer par RS232 Avec les outils de bas niveau Outils de bas niveau : stty, cat, echo Permet de scripter (Tests automatiques, etc...) Dans le cas ou vous devriez coder votre propre client Fonctionnement : Configuration : host$ stty -F/dev/ttyUSB0 115200 Lecture host$ cat /dev/ttyusb0 > file Ecriture host$ echo root > /dev/ttyusb0 host$ cat file > /dev/ttyusb0 Rebooter la clef Pour le fun : host$ lsusb -t host$ echo 3-1 sudo tee /sys/bus/usb/drivers/usb/ unbind host$ echo 3-1 sudo tee /sys/bus/usb/drivers/usb/ bind host$ dmesg tail Communiquer par réseau ethernet Plus difficile. Il faut : Une interface réseau (plus complexe qu un controleur RS232) Une pile IP (plus complexe qu une communication RS232, donc ne permet de se connecter que plus tardivement dans le boot) Une configuration IP Un programme pour recevoir la demande de connexion Sysmic - J. Pouiller Formation à Linux Embarqué 28 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 29 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 30 / 254 Communiquer par réseau ethernet Protocoles les plus utilisés : Telnet telnetd et telnet target% telnetd host$ telnet -l root target target% Pas sécurisé, attention à votre mot de passe (tshark -i lo -o out, puis chaosreader out) <CTRL+]> permet d accéder à l interface de commande Ssh sshd et ssh host$ ssh root@target target% Sécurisé Plein de bonus de sécurisés Il est possible de forcer la déconnexion avec <RET><~><.> et de suspendre une connexion avec <RET><~><CTRL+Z> Sysmic - J. Pouiller Formation à Linux Embarqué 31 / 254 Transférer des fichiers Par réseau rcp/scp host$ scp -r ~/dir root@target:dir-target target$ scp -r user@host:dir-host. tftp. La syntaxe dépend de l implémentation. udpsvd -ve 0.0.0.0 69 tftpd -c /files/to/serve target$ tftp host -g -r file target$ tftp host -p -l file host$ tftp target -c get file host$ tftp target -c put file wget host$ wget http://host/file host$ wget ftp://host/file Beaucoup d autres méthodes plus ou moins standards Sysmic - J. Pouiller Formation à Linux Embarqué 32 / 254 Transférer des fichiers Par liaison série Plus lent, moins malléable, mais peut vous sauver Protocoles {X,Y,ZMODEM ou Kermit host% apt-get install lrzsz target$ sz file target$ rz <Ctrl-A><S> Sysmic - J. Pouiller Formation à Linux Embarqué 33 / 254 Utiliser des clef ssh Utiliser des clefs ssh Notre premier programme hello.c Possibilité de créer des clefs pour ssh host$ ssh-keygen -t dsa Toujours mettre un mot de passe sur votre clef Recopiez votre clef dans ~/.ssh/authorized_keys host$ ssh-copy-id root@target Utiliser ssh-agent (inutile de nos jours car déjà lancé avec la session) host$ ssh-agent host$ SSH_AUTH_SOCK=/tmp/agent.3391; export SSH_AUTH_SOCK; host$ SSH_AGENT_PID=3392; export SSH_AGENT_PID; host$ echo Agent pid 3392; Enregistrer votre passphrase auprès de l agent host$ ssh-add Forwarder votre agent host$ ssh -A root@target target% #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include "hello.h" int main(int argc, char **argv) { static const char *str = "Hello World"; 8 long num = -1; char *end = NULL; if (argc > 1) { num = strtol(argv[1], &end, 10); if (!*argv[1] *end num < 0) { fprintf(stderr, "Invalid iteration number\ n"); num = -1; Sysmic - J. Pouiller Formation à Linux Embarqué 34 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 35 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 36 / 254

Notre premier programme hello.c Notre premier programme hello.h print(str, num); return 0; void print(const char *str, long num) { int i; for (i = 0; i!= num; i++) { 10 printf("%s\n", str); sleep(1); #ifndef HELLO_H #define HELLO_H void print(const char *str, long num); #endif /* HELLO_H */ Installation du compilateur : host% apt-get install gcc libc-dev normale : host$ mkdir build-x86 host$ gcc hello.c -o build-x86/hello host$ build-x86/hello 1 Hello World Remarque : On préfère effectuer des compilation out-of-source ou les objets se trouvent séparés des sources. Il est ainsi possible d avoir un répertoire pour la production et un pour le debug ou bien un répertoire par cible. Sysmic - J. Pouiller Formation à Linux Embarqué 37 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 38 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 39 / 254 Décompression de la toolchain : host% cd / host% tar xvzf.../arm-sysmic-linuxuclibcgnueabi_i386.tgz On installe très souvent les chaines de cross-compilation dans /opt. Beaucoup de toolchain ne sont pas relocable. C est-à-dire qu elle doivent être placée à l endroit où elles ont été compilée (car il contiennent certains chemins en dur ). pour la cible : host$ mkdir build-arm host$ /opt/arm-sysmic-linux-uclibc/bin/arm-linuxgcc hello.c -o build-arm/hello ou bien host$ PATH+=:/opt/arm-sysmic-linux-uclibc/bin host$ arm-linux-gcc hello.c -o build-arm/hello Test : target%./hello 1 Hello World Identifier le résultat Un bon moyen de reconnaître les binaires est d utiliser la commande file : host$ file */hello arm/hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped arm-static/hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped x86/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped x86-static/hello: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.15, not stripped Sysmic - J. Pouiller Formation à Linux Embarqué 40 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 41 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 42 / 254 Compiler et exécuter Règle d or Compiler avec un Makefile classique La force de Linux, c est sa polyvalence Programmer pour un Linux embarqué n est pas très différent que sur un Linux PC. Principales différences à garder à l esprit : Différence de vitesse de CPU et de quantité de mémoire Différence de périphérique. Conséquences : Drivers différents Bibliothèques différentes (exemple : Qt dépend de l accélération graphique) Les différence d architecture CPU peuvent empêcher l utilisation de certains outils de debug (ex : Perf, Valgrind, SystemTap...) Compiler un programme pour une autre cible s appelle cross-compiler Jamais d espaces dans les chemins de compilation Pas très normalisé Utilisé pour les petits projets ou les projets non standard Ressemble souvent à : CC=arm-linux-gcc LD=arm-linux-ld Il peut être nécessaire d avoir la chaîne de cross-compilation dans son PATH. host$ PATH+=:/opt/arm-sysmic-linuxuclibcgnueabi/bin Ne pas hésiter à lire le Makefile Sysmic - J. Pouiller Formation à Linux Embarqué 43 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 44 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 45 / 254

Compiler avec un Makefile classique Exemple avec memstat : Récupération des sources host$ wget http://ftp.de.debian.org/debian/pool /main/m/memstat/memstat_0.9.tar.gz Décompression des sources host$ tar xvzf memstat_0.9.tar.gz host$ cd memstat-0.9 CC=arm-linux-gcc LD=arm-linux-ld memstat Sysmic - J. Pouiller Formation à Linux Embarqué 46 / 254 Compiler avec Makefile classique Il est aussi souvent possible de compiler ces programmes sans passer par Makefile ou de réécrire le Makefile pour une utilisation plus récurrente. Exemple avec memstat : clean host$ arm-linux-gcc memstat.c -o memstat Sysmic - J. Pouiller Formation à Linux Embarqué 47 / 254 Compiler avec autotools C est le cas le plus courant Pour une compilation classique : host$./configure host% make install out-of-source. il est nécessaire d appeller le configure à partir du répertoire de build. host$ mkdir build host$ cd build host$../configure host% make install L installation peut nécessiter les droits root Utiliser sudo -E (attention à l option secure_path dans /etc/sudoers) Utiliser fakeroot Sysmic - J. Pouiller Formation à Linux Embarqué 48 / 254 Compiler avec autotools out-of-source : host$ cd build host$../configure --prefix=~/rootfs install Cross-compilation. host$ PATH+=/opt/arm-sysmic-linux-uclibcgnueabi /usr/bin host$ mkdir build host$../configure --host=arm-linux --build= i386 --prefix=~/rootfs install Il est aussi possible (parfois préférable) d utiliser DESTDIR= lors de make install au lieu de --prefix= Sysmic - J. Pouiller Formation à Linux Embarqué 49 / 254 Compiler avec autotools Exemple avec lzma : Récupération et décompression des sources host$ wget http://tukaani.org/lzma/lzma-4.32.7. tar.gz host$ tar xvzf lzma-4.32.7.tar.gz host$ cd lzma-4.32.7 Configuration host$ mkdir build && cd build host$ PATH+=/opt/arm-sysmic-linux-uclibcgnueabi /usr/bin host$../configure --host=arm-linux --build= i386 --prefix=~/rootfs Installation Sysmic - J. Pouiller Formation à Linux Embarqué 50 / 254 install Compiler avec autotools Obtenir de l aide : host$./configure --help Parmis les fichiers générés : config.log contient la sortie des opérations effectuées lors de l appel de./configure. En particulier, il contient la ligne de commande utilisée. Il est ainsi possible de facilement dupliquer la configuration. host$ head config.log config.status permet de regénérer les Makefile. config.status est automatiquement appellé si un Makefile.am est modifié. Sysmic - J. Pouiller Formation à Linux Embarqué 51 / 254 Kconfig Kconfig Kconfig Système de compilation du noyau Très bien adapté à la cross-compilation Adapté aux environnements embarqués Adapté aux environnements avec beaucoup de configuration Pas un système de compilation réel. Composé de : Kconfig, Système de gestion de configuration Kmake, règles Makefile bien étudiées. Chaque projet les adapte à ces besoins Application de la règle : "Pas générique mais simple à hacker" Dépend principalement de gmake Exemple avec busybox : host$ wget http://busybox.net/downloads/busybox -1.19.4.tar.bz2 host$ tar xvjf busybox-1.19.4.tar.bz2 host$ cd busybox-1.19.4 help Pour configurer les options : En ncurses (2 versions) host% apt-get install libncurses5-dev menuconfig nconfig En Qt4 host% apt-get install libqt4-dev xconfig Permettent d effectuer des recherches Ne pas oublier d installer les headers des bibliothèques Pour cross-compiler Pour compiler out-of-source host$ mkdir build O=build Mode verbose : V=1 Forcer la toolchain : CROSS_COMPILE=arm-linux- Indispensable pour le noyau : ARCH=arm Sysmic - J. Pouiller Formation à Linux Embarqué 52 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 53 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 54 / 254

Kconfig Test avec busybox : Récupération d une configuration par défaut CROSS_COMPILE=arm-linux- O=build defconfig Personnalisation de la configuration host% apt-get install libncurses5-dev CROSS_COMPILE=arm-linux- O=build menuconfig CROSS_COMPILE=arm-linux- Installation CROSS_COMPILE=arm-linux- CONFIG_PREFIX=~/rootfs install Sysmic - J. Pouiller Formation à Linux Embarqué 55 / 254 Placement des bibliothèques Pour que les autres programmes puissent en profiter le plus simple est d installer les bibliothèques dans TOOLCHAIN/TRIPLET/sysroot. Elle seront ainsi trouvées automatiquement par le compilateur. Il est aussi possible de modifier les variables CFLAGS et LDFLAGS (plus complexe) Nous verrons que les bibliothèques doivent aussi se trouver sur la cible. Sysmic - J. Pouiller Formation à Linux Embarqué 56 / 254 Et si ca ne marche pas? Cas où des programmes doivent être compilés puis exécutés sur la cible lors de la compilation Classiquement, des cas de bootstraping Cas notable de Python 1 Deux solutions : Résoudre le problème et envoyer un patch Compiler sur la target. Vous avez alors besoin d un gcc natif sur la target Un émulateur type qemu peut vous aider 1. compile avec des patchs, mais pas évident Sysmic - J. Pouiller Formation à Linux Embarqué 57 / 254 Historique des Autotools 1 Makefile 2 Makefile + hacks pour effectuer de la configuration 3 Makefile.in + configure 4 Makefile.in + configure.ac 5 Makefile.am + configure.ac Fonctionnement des autotools : Préparation % apt-get install automake autoconf Déclaration de notre programme et de nos sources pour automake $ vim Makefile.am bin_programs = hello hello_sources = hello.c hello.h Création d un template pour autoconf contenant les macros utiles pour notre projet $ autoscan $ mv configure.scan configure.ac $ rm autoscan.log $ vim configure.ac Personnalisation du résultat... AC_INIT([hello], [1.0], [bug@sysmic.org]) AM_INIT_AUTOMAKE([foreign])... Génération du configure et des Makefile.in. C est cette version qui devrait être livée aux packageurs. $ autoreconf -iv Sysmic - J. Pouiller Formation à Linux Embarqué 58 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 59 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 60 / 254 $./configure --help $ mkdir build $ cd build $../configure --host=arm-linux --build=i386 -- prefix=~/rootfs $ make $ make install La cible distcheck : 1 Recopie les fichiers référencés dans Autotools 2 Retire les droits en écriture sur les sources 3 Lance une compilation out-of-source 4 Installe le projet 5 Lance la suite de test 6 Lance un distclean 7 Vérifie que tous les fichiers créés sont effectivement supprimés 8 Crée une tarball correctement nommée contenant les sources Si automake est appelé avec -gnits, distcheck effectue des vérifications supplémentaires sur la documentation, etc... La fonctionnalité distcheck est le point fort souvent énoncé des autotools. $ make distcheck $ tar tvzf hello-1.0.tar.gz Sysmic - J. Pouiller Formation à Linux Embarqué 61 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 62 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 63 / 254

Utiliser les règles implicites facilite votre travail hello: hello.o Testons : CC=arm-linux-gcc CFLAGS=-Wall VPATH vous permet de gérer la compilation out-of-source. Remarquez que, pour que VPATH fonctionne correctement, il faut avoir correctement utilisé le quoting pour les directives d inclusion (< pour les entêtes systèmes et " pour les entêtes du projet). Testons : host$ cd build -f../makefile VPATH=.. CC=arm-linux-gcc gcc peut générer les dépendances de vos fichiers. On génère ainsi des morceaux de Makefile que l on inclue. Il ne faut pas oublier d ajouter la dépendance entre hello.d et les dépendances de hello.c %.o: %.c $(COMPILE.c) -MMD -o $@ $< -include hello.d hello: hello.o Sysmic - J. Pouiller Formation à Linux Embarqué 64 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 65 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 66 / 254 Les Makefile permettent d utiliser des fonctions de substitutions qui peuvent nous aider à rendre notre système plus générique. %.o: %.c $(COMPILE.c) -MMD -o $@ $< HELLO_SRC = hello.c 5 -include $(HELLO_SRC:%.c=%.d) hello: $(HELLO_SRC:%.c=%.o) Nous pouvons ajouter des alias pour nous aider dans les commandes complexes clean: rm -f hello $(HELLO_SRC:%.c=%.o) $(HELLO_SRC :%.c=%.d) 4.PHONY: debug-x86 debug-arm clean debug-arm/makefile: mkdir -p debug-arm echo all %: >> debug-arm/makefile echo make -f../makefile VPATH=.. CFLAGS=-g CC=arm-linux-gcc $$@ >> debug-arm/ Makefile debug-arm: debug-arm/makefile make -C debug-arm En poussant ce fonctionnement un peu plus loin, on obtient le Kmake. Un système génère un fichier contenant toutes les options. Kmake, utilise des variables pour rendre la compilation conditionnelle : HELLO_$(CONFIG1) += hello.o Néanmoins, le résultat n est pas portable entre les différentes implémentations de make. Sysmic - J. Pouiller Formation à Linux Embarqué 67 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 68 / 254 Sysmic - J. Pouiller Formation à Linux Embarqué 69 / 254 Notre environement Le shell Communiquer avec la cible Compiler et executer Ecrire un projet pour Linux embarqué Bibliothèques courantes Bibliothèques courantes Il existe des milliers de bibliothèques et d API disponibles pour Linux. Parmi elles : Les appels systèmes. Inclus avec le noyau Linux. Documentés par les pages de man. Liste sur syscalls(2) L interface Posix. Fournis par la libc. Documentés par les pages de man des sections 3 ou 3posix ou sur http://www.unix.org/version3/ Les bibliothèques très utilisées : libapr, glibc, ømq,... La documentation se trouve avec les source ou sur leur site web. Qt. Bibliothèque très complète pouvant être utilisé pour des usage très divers : embarqué, multimédia, etc... En C++. Documentation sur http://qt-project.org/doc/qt-5.0 Regarder les packets inclus dans Buildroot ou sur votre distribution permet d avoir une idée des bibliothèques les plus courantes Sysmic - J. Pouiller Formation à Linux Embarqué 70 / 254