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

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

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

Systèmes Embarqués Libres

Session 8: Android File System

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

Construction et sécurisation d'un système Linux embarqué. Frédéric AIME

[DEVELOPPEMENT SUR LA CIBLE 2440] 19 avril 2010

Naissance d'un REPTAR

Personnes ressources Tice. Académie de Rouen

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

Linux embarqué: une alternative à Windows CE?

Installation software

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

Debian Lenny - Virtualisation avec Libvirt/KVM Debian GNU/Linux

Chapitre IX : Virtualisation

Systèmes embarqués D.Rossier

Projet Semestre2-1SISR

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

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

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

Administration de Parc Informatique TP07 : Installation de Linux Debian

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

Compte Rendu. Projet Reseaux : Conception Implémentation d un Mini DataCenter

Virtualisation de serveur grâce à Linux-

G.U.S.T.A.V. Gestion Unifiée des Systèmes de fichiers Transposée aux Appareillages Virtuels G U S T A V

Compilation croisée sous Linux et Windows

Traitement de données

Guide simplifié pour QEMU

Chi rement des postes PC / MAC / LINUX

1 Démarrage de Marionnet

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

Mise en place des TPs Réseau en machines virtuelles. Utilisation de VmPlayer

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

Commandes Linux. Gestion des fichiers et des répertoires. Gestion des droits. Gestion des imprimantes. Formation Use-IT

Manuel de System Monitor

Documentation FOG. 3. Choisir le nom de la machine, le nom d utilisateur et le mot de passe correspondant (par exemple : fog, password)

Administration UNIX. Le réseau

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Projet Administration Réseaux

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

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

Chapitre 02. Configuration et Installation

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

Il est courant de souhaiter conserver à

Année Universitaire ième année IMAC Mardi 6 janvier Cloud computing Travaux Pratiques

NFS-Root client et serveur HowTo

Les différentes méthodes pour se connecter

Bon ben voilà c est fait!

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Installation d'un serveur FTP géré par une base de données MySQL

ArcGis Server 10 (sur VM CentOS bits) DOCUMENT D INSTALLATION

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

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

Documentation FOG. Déploiement d images de systèmes d exploitation à travers le réseau.

UBUNTU Administration d'un système Linux (4ième édition)

NON URGENTE TEMPORAIRE DEFINITIVE OBJET : RÉCUPÉRATION DES DONNÉES CLIENT SUR DISQUE DUR DÉFECTUEUX OU INVALIDÉ

Gérer ses environnements de développement avec Vagrant RMLL 2012

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

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

Tour d'horizon Bureau client Daemon's Aller plus loin

ndv access point : Installation par clé USB

Virtualisation et le hosting. Christophe Lucas Sébastien Bonnegent rouen.fr>

PPE 1 PRISE EN MAIN DE VMWARE VSPHERE 5.5 & CONFIGURATION D UNE MACHINE VIRTUELLE

Virtualisation CITRIX, MICROSOFT, VMWARE OLIVIER D.

TP : Introduction à TCP/IP sous UNIX

INFO-F-309 Administration des Systèmes. TP7: NFS et NIS. Sébastien Collette Résumé

Comment configurer Kubuntu

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

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

Tutoriel Création d une source Cydia et compilation des packages sous Linux

INSTALLATION DEBIAN. Installation par le réseau

LiveUSB clefisn. Meilland jean claude et Kbida Abdellatif. 16 septembre 2012

Figure 1a. Réseau intranet avec pare feu et NAT.

TD 1 - Installation de système UNIX, partitionnement

FreeNAS Shere. Par THOREZ Nicolas

Développement d une carte à processeur linux

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

DmilZ pour le forum Kimsufi.com. How-To : ESXi avec une seule IPv4 et une IPv6. Sommaire Historique Introduction...

Cellier Clément, Maginot Quentin, Tripier Axel, Zaorski Jean, Zini Robin. 18 mars 2015

TP SECU NAT ARS IRT ( CORRECTION )

Enoncé du TP 8 Système

Atelier : Virtualisation avec Xen

EN Télécom & Réseau S Utiliser VMWARE

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

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

1 Configuration réseau des PC de la salle TP

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

Machine virtuelle W4M- Galaxy : Guide d'installation

Configuration matériel. Tâche 2 : Installation proprement dite de l application sur un serveur de test virtualisé sous VmWare Workstation.

Serveur de sauvegardes incrémental

Installation d ORACLE 10g sous Debian Etch

Installation de Zabbix

Utilisation de matériels industriels avec des outils de virtualisation open source. Open Source dans le monde industriel

Ce TP consiste à installer, configurer et tester un serveur DNS sous Linux. Serveur open source : bind9 Distribution : Mandriva

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

DOCKER MEETUP. Christophe Labouisse

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

Administration de Parc Informatique TP02 : Utilisation du logiciel Marionnet

Transcription:

Résolution DNS Ajout de la résolution DNS host$ echo nameserver 192.168.1.254 > etc/ resolv.conf target% ping www.google.com Formation à Linux Embarqué Jérôme Pouiller <j.pouiller@sysmic.org> Utiliser la glibc au lieu de la uclibc. Il serait alors nécessaire de configurer le fichier nsswitch.conf. Il serait possible de chosir parmis différente back-ends pour gérer les authentifications et le réseau. Le reste de la configuration réseau s effectue normalement dans /etc/network Sysmic - J. Pouiller Formation à Linux Embarqué 102 / 241 Ajouts d utilisateurs Ajout d utilisateurs (nécessaire pour beaucoup d applications dont Dropbear) host$ echo root:x:0:0:root:/root:/bin/sh > etc/passwd host$ echo root:x:0: > etc/group host$ echo "::sysinit:login" >> etc/inittab Deuxième partie II Créer root::0:0:root:/root:/bin/sh créerait un utilisateur sans mot de passe Sysmic - J. Pouiller Formation à Linux Embarqué 103 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 65 / 241

7 Booter par réseau Le bootloader TFTP NFS 8 Compilation des differents éléments Compilation du noyau Création de l init Compilation de l espace utilisateur 9 Quelques ajouts fstab tmpfs MAKEDEV ptms mdev resolv.conf passwd Dropbear 10 Bootstrapper la toolchain 11 Flasher le rootfs 12 Simuler 13 Automatisation Sysmic - J. Pouiller Formation à Linux Embarqué 66 / 241 Booter par réseau Permet de travailler plus confortablement car evite les cycles de scp/flash Parfois, il faut demarrer la cible sous Linux pour pouvoir la flasher. C est donc la seule manière de continuer. Fonctionne aussi très bien avec des PC Trois étapes pour démarrer un système 1 Le bootloader configure la carte réseau et place le noyau en mémoire 2 Le noyau s execute et monte un filesystem réseau 3 Le premier processus de la vie du système est lancé : init Peudo Terminal Multiplexer ptmx (Peudo Terminal Multiplexer) Permet de facilement gérer l allocation des terminaux. (Nécessaire pour Dropbear) host% mknod dev/ptmx c 5 2 host$ mkdir dev/pts host$ echo none /dev/pts devpts >> etc/fstab Sysmic - J. Pouiller Formation à Linux Embarqué 100 / 241 Utilisation de mdev Intégré dans Busybox Uniquement depuis 2.6, nécessite /sys compilé et monté Permet de créer les devices à la volée Sur les systèmes très petits et où l utilisation de device dynamique n est pas nécessaire, onse passe de mdev à cause des dépendances avec le noyau Création de /dev sur un disque mémoire target% mount -t tmpfs none /dev Initialisation /dev lors du démarrage target% mdev -s Installation de mdev comme handler pour les nouveaux périphériques target% echo /sbin/mdev > /sys/kernel/ uevent_helper Sysmic - J. Pouiller Formation à Linux Embarqué 67 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 101 / 241

Filesystem temporaire Le bootloader Description Créer un filesystem en memoire permet de protèger notre flash (à durée de vie limitée), de garnatir que nos système est toujours identique entre chaque démarrage et d améliorer les performances. Création host$ mkdir tmp Ajout du stickybit comme il se doit host$ chmod +t tmp Le bootloader se trouver souvent sur une eeprom. Celle-ci est directement mappée sur le bus d adresse Au minimum, il doit initialiser : les timing de la mémoire RAM les caches CPU Montage d un filesystem contenu en mémoire target% mount -t tmpfs none tmp host$ echo none /tmp tmpfs >> etc/fstab Sysmic - J. Pouiller Formation à Linux Embarqué 98 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 68 / 241 Utilisation de MAKEDEV Le bootloader Description MAKEDEV permet d automatiser la création des fichiers devices de base host$ cd dev host$ MAKEDEV std host$ MAKEDEV console Il peut : Initialiser une ligne série pour l utiliser comme terminal Offrir un prompt et accèder à des options de boot Initialiser la mémoire flash Copier le noyau en mémoire Passer des arguments au noyau Initialiser le chipset réseau Récupérer des informations provenant d un serveur DHCP (serveur où récupérer l image du noyau, indications sur les mise à jour disponibles, etc...) Lire des fichiers provenant du réseau Lire des fichier par {X,Y,Z}MODEM Ecrire sur la flash Gérer un système de secours Initialiser des fonctionnalités cryptographiques (Trusted Plateform Manager) Sysmic - J. Pouiller Formation à Linux Embarqué 99 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 69 / 241

Le bootloader Description Résumé Il est très rare de pouvoir démarrer Linux sans bootloader fonctionnel Si votre bootloader n est pas fonctionnel, vous aurez souvent besoin d un matériel particulier pour le mettre à jour (un outils capable de flasher l eeprom) Bootloader connus : Grub Syslinux (et son dérivé Isolinux) U-Boot (utilisé ici) Redboot BareBox (successeur de U-Boot) Que contient l espace utilisateur standard? une arborescence des binaires des bibliothèques des fichiers devices Sysmic - J. Pouiller Formation à Linux Embarqué 70 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 96 / 241 Le bootloader Test Testons notre bootloader : Démarrez minicom host$ minicom -D /dev/ttyusb1 Resettez la carte Appuyez sur une touche pour stopper le démarrage [...] Hit any key to stop autoboot: 0 Obtenez la liste des commandes uboot> help Attention : Pas d historique Pas de flèches gauche/droite En cas de problème pour vous connecter, vérifiez vos paramètres RS232. Sysmic - J. Pouiller Formation à Linux Embarqué 71 / 241 Utilisation de fstab Il est possible d automatiser ce montage au démarrage avec fstab et mount -a host$ echo none /proc proc >> etc/fstab host$ echo none /sys sysfs >> etc/fstab target% mount -a Nous pouvons utiliser le fichier etc/inittab pour monter nos partitions automatiquement. host$ echo "::sysinit:/bin/mount -a" >> etc/inittab host$ echo "::shutdown:/bin/mount -r -a" >> etc/ inittab Sysmic - J. Pouiller Formation à Linux Embarqué 97 / 241

Autres init TFTP Mise en place Identique au protocole ftp mais plus simple Permet d etre implémenté avec très peu de ressource Mise en place : Il existe d autres formes d init : SystemV (celui que nous utilisons) runit (aussi proposé par Busybox) upstart (utilisé par Ubuntu) Ces init, plus moderne offre de nouvelle fonctionnalités et plus de robustesse pour le système. host% apt-get install tftp-hpa tftpd-hpa host% cp hello/build-arm/hello /srv/tftp Test en local Par le shell interactif host$ tftp 127.0.0.1 > get hello > quit Par la ligne de commande host$ tftp 127.0.0.1 -c "get hello" Sysmic - J. Pouiller Formation à Linux Embarqué 94 / 241 Et si ca ne marche toujours pas? Toujours commencer par hello-static, le moins dépendant Si il ne fonctionne pas, recherchez dans le format de binaire de la chaîne de compilation et avec sa compatibilité avec les options du noyaux Si hello-static fonctionne, mais pas hello en dynamique, cherchez du coté des du format de la libc et de sa compatibilité avec le format de binaire hello Si hello fonctionne masi que vous ne pouvez pas lancer de shell, cherchez du coté des devices et des droits. Si le shell démarre mais pas init, rechechez du coté des des fichiers de configuration et des devices Vérifier que votre cible ne change pas d IP en démarrant (ici dans /etc/inittab) Sinon, cherchez dans les parametres passés au noyau ou dans la configuration Si possible, toujours tester entre chaque modification Sysmic - J. Pouiller Formation à Linux Embarqué 95 / 241 En cas de problème, consultez les logs (/var/log/syslog ou /var/log/daemon.log) Il est possible de modifier le répertoire partagé dans Sysmic - J. Pouiller Formation à Linux Embarqué 72 / 241 /etc/default/tftpd-hpa TFTP Configuration de la cible pour télécharger et démarrer le noyau. Par RS232 : Configuration de l IP uboot> setenv ipaddr 192.168.1.12 Vérification la configuration IP uboot> ping 192.168.1.10 Déclaration de notre host comme serveur tftp uboot> setenv serverip 192.168.1.10 uboot> saveenv Téléchargement du noyau dans une zone libre de la mémoire uboot> tftpboot 21000000 uimage Exécution du noyau uboot> bootm 21000000 Sysmic - J. Pouiller Formation à Linux Embarqué 73 / 241 Le noyau trouve la flash, monte la flash et charge l init de la flash

Nfs Comparable au partage réseau de windows. Installation host% apt-get install nfs-kernel-server nfscommon host$ mkdir nfs-root host% vim /etc/exports Configuration du partage /home/user/nfs-root 0.0.0.0/0.0.0.0(ro, no_root_squash) Configuration de init Il est possible de configurer init avec le fichier /etc/inittab Lancement automatique d un shell host$ echo "ttys0::askfirst:/bin/sh" > etc/ inittab Appel d un script de démarrage. host$ echo "::sysinit:/etc/init.d/rcs" >> etc/ inittab host$ mkdir etc/init.d host$ echo "#!/bin/sh" > etc/init.d/rcs host$ chmod +x etc/init.d/rcs Documentation disponible sur la page de man inittab(5) (disponible ici : http://tfm.cz/man/5/inittab). Des fichier de configuration de init et d autres utilitaire de busybox sont disponibles dans busybox/examples Sysmic - J. Pouiller Formation à Linux Embarqué 74 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 92 / 241 Nfs Test sur l hôte host% service nfs-kernel-server restart host$ mkdir nfs-mount host% mount -t nfs 127.0.0.1:/home/user/nfsroot nfs-mount Vérification des droits root host$ echo foo > nfs-root/file host$ chmod 000 nfs-root/file host$ ls -l nfs-mount host% cat nfs-mount/file Test sur la cible (nécessite le support de NFS dans mount) target$ mkdir nfs-mount target% mount -t nfs 192.168.1.10:/home/user/ nfs-root nfs-mount En cas de problème, vérifiez les logs : /var/log/daemon.log Sysmic - J. Pouiller Formation à Linux Embarqué 75 / 241 Compilons init Fichiers de configuration Il faut monter les partitions /proc et /sys : target% mount -t proc none /proc target% mount -t sysfs none /sys Automatisation du montage avec inittab : host$ echo "::sysinit:mount -t proc none /proc" >> etc/inittab host$ echo "::sysinit:mount -t sysfs none /sys" >> etc/inittab Nos commandes semblent maintenant correctement fonctionner. Sysmic - J. Pouiller Formation à Linux Embarqué 93 / 241

Installation de Busybox Démarrage sur le NFS Modification des arguments passés au noyau Configuration IP Configurons le chemin de destination vers../install host$ make O=build CROSS_COMPILE=arm-linuxhost$ make O=build CROSS_COMPILE=arm-linuxinstall L installation créé des liens symboliques vers la binaire busybox Sans Busybox, toutes ces binaires seraient séparées et dispersées sur une dizaine de sources Nous pouvons maintenant démarrer avec init=/sbin/sh init=/bin/init pose encore quelques problèmes. uboot> setenv ipconf ip =192.168.1.13:192.168.1.10:192.168.1.254:255.255.2 target:eth0:off Configuration NFS uboot> setenv nfsconf root=/dev/nfs nfsroot =/home/user/nfs-root La variable bootargs permet de passer des arguments au noyau uboot> setenv bootargs ${ipconf} ${nfsconf} panic=1 Démarrage uboot> boot Sysmic - J. Pouiller Formation à Linux Embarqué 90 / 241 Compilons init Fichiers device Voir Documentation/filesystem/nfs/nfsroot.txt Après avoir monté le NFS, le noyau essaye de passer la main au Sysmic - J. Pouiller Formation à Linux Embarqué 76 / 241 programme init Récupération des sources Ou récupérer les sources du noyau? Ajoutons les devices /dev/tty (En fait, pas tout à fait obligatoire) host% mknod dev/ttys0 c 4 64 host% mknod dev/tty2 c 4 2 host% mknod dev/tty3 c 4 3 host% mknod dev/tty4 c 4 4 Nous pouvons maintenant démarrer avec init=/bin/init mais certaines fonctionnalités sont absentes (ps, etc... ) 1 Utiliser les sources souvent fournies. Il arrive souvent qu elles contiennent des drivers particuliers et qu elles soient déjà configurées 2 Utiliser git clone (nous y reviendrons) 3 Télecharger sur kernel.org host$ wget http://www.kernel.org/pub/linux/kernel/ v2.6/linux-2.6.33.7.tar.bz2 host$ tar xvjf linux-2.6.33.7.tar.bz2 Sysmic - J. Pouiller Formation à Linux Embarqué 91 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 77 / 241

Interface de configuration du noyau Utilise Kconfig host$ make help host$ mkdir build host$ make O=build ARCH=arm CROSS_COMPILE=armlinux- menuconfig Beaucoup d options, mais il y a l aide (<h>) et la recherche (</>) La configuration est sauvée dans.config usb-a9260_defconfig permet de charger une configuration pré-établie pour notre carte host$ make O=build ARCH=arm CROSS_COMPILE=armlinux- usb-a9260_defconfig Certains constructeur vous fournirons un patch ajoutant une cible _defconfig D autre vous fournirons un.config Busybox Contient la plupart des binaire nécéssaire pour démarrer un système Attention, ce ne sont pas les meme outils que sur PC. Il y a souvent des option non-implémentés ou des comportements différents Téléchargement host$ wget http://busybox.net/downloads/busybox -1.18.3.tar.bz2 host$ tar xvjf busybox-1.18.3.tar.bz2 host$ mkdir build On retrouve Kconfig host$ make O=build CROSS_COMPILE=arm-linuxallnoconfig host$ make O=build CROSS_COMPILE=arm-linuxmenuconfig Sysmic - J. Pouiller Formation à Linux Embarqué 78 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 88 / 241 Compilation du noyau Busybox Verifier les options du type de processeur Cocher NFS Le reste ne devrait pas empecher ce demarrer votre cible La compialtion se lance avec host$ make XXImage XX fait reference au format de la binaire produite : Le premier octet est-il du code? Respecte-t-il le format ELF? Y a-t-il un format particulier d entête à respecter? Dans le doute, il faut consulter la documentation de votre bootloader On trouve pleins d outils Au minimum, cochons ash, init, les Coreutils, dmesg, ifconfig, mount, tftp, tar, reboot, vi, flashcp Et aussi : CONFIG_PLATFORM_LINUX, CONFIG_FEATURE_EDITING, CONFIG_FEATURE_DEVPTS, CONFIG_LONG_OPTS, CONFIG_SHOW_USAGE, FEATURE_VERBOSE_CP_MESSAGE, IOCTL_HEX2STR_ERROR Sysmic - J. Pouiller Formation à Linux Embarqué 79 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 89 / 241

Installation des bibliothèques de base Les bibliothèques de base (libc et apparentés) sont forcement fournies avec le cross-compilateur, car elles y sont intimement liés Liste des bibliothèques nécessaires host$ arm-linux-ldd --root. hello-arm Copie host$ mkdir lib host$ cp /opt/arm-linux-.../lib/ld-uclibc -0.9.30.2.so lib host$ cp /opt/arm-linux-.../lib/libuclibc -0.9.30.2.so lib Compiler le noyau Dans notre cas, nous utilisons U-Boot (standard) Compilation host% apt-get install uboot-mkimage host$ make O=build ARCH=arm CROSS_COMPILE=armlinux- uimage Partage de l image par TFTP host% cp build/arch/arm/boot/uimage /srv/tftp/ uimage-2.6.33.7 host% ln -s uimage-2.6.33.7 /srv/tftp/uimage Au redémarrage, le bootloader passe par un registre l identifiant de la carte. Cet identifiant (spécifique à l architecture ARM) est erroné. A ce stade, il est plus facile de corriger ce problème dans le noyau dans le fichier arch/arm/tools/mach-types. Sysmic - J. Pouiller Formation à Linux Embarqué 86 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 80 / 241 Installation des bibliothèques de base Compilation du noyau Fichiers produits (ou productibles) par la compilation : Configuration de ldconfig host$ echo /lib > etc/ld.so.conf host$ echo /usr/lib >> etc/ld.so.conf Création des liens symboliques host$ ldconfig -r. -N Création du cache. Le cache n est pas obligatoire, mais si il existe, il doit être à jour host$ ldconfig -r. Nous pouvons maintenant démarrer avec init=/hello-arm vmlinux : L image ELF du noyau. Lisible par les debugueurs, certains flasheurs, certain bootloaders vmlinuz : parfois équivalent du bzimage, mais normalement, il s agit devmlinux compressé et strippé des informations inutiles au démarrage. Inutilisable dans l état, il est nécéssaire de lui adjoindre un bootloader pour le décompresser et l éxecuter. Image : vmlinux strippé et préfixé par un mini-bootloader permettant de sauter sur la fonction start_kernel de vmlinux. bzimage et zimage : vmlinuz avec le bootloader bz2 ou gz. xipimage : Idem Image mais destiné à être éxecuté directement sur un eeprom sans être copier en mémoire au préalable. uimage : Image avec une entête spéciale pour u-boot. Sysmic - J. Pouiller Formation à Linux Embarqué 87 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 81 / 241

Démarrage du noyau Créer l espace utilisateur Créer l arborescence A la fin du démarrage du noyau, celui donne la main à l éxecutable déclaré avec init=. Par défaut, il s agit de /sbin/init init ne se termine jamais Les arguments nons utilisés par le noyau sont passé à init On peut estimer que notre système démarre à partir du moment ou nous obtenons un shell (c est en tous cas la que la plupart des intégrateur Linux embarqué s arreterons) Du moins complexe au plus complexe à démarrer : init=/hello-arm-static init=/hello-arm init=/bin/sh init=/sbin/init Après le démarrage, le noyau ne trouve pas l init : [...] Kernel panic - not syncing: No init found. Try passing init= option to kernel. Copions maintenant hello-arm-static et hello-arm et essayons de démarrer avec : [...] Cannot open /dev/console: No such file or directory Effectuons ces tests avec le Rootfs original et un Rootfs vierge. Sysmic - J. Pouiller Formation à Linux Embarqué 82 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 84 / 241 Créer l espace utilisateur Créer l arborescence Nous travaillerons dans un répertoire vierge host$ mkdir nfs-root-mine host$ cd nfs-root-mine host$ ln -s nfs-root-mine nfs-root L arborescence classique sera : bin sbin usr/bin usr/sbin etc dev proc sys tmp Il est possible de ne pas respecter cette arborescence, mais cela compliquerait inutilement la chose var Démarrage d une binaire statique Les fichiers devices Permettent de communiquer avec le noyau Il représente plus ou moins chacun un périphérique Les plus importants sont normés (Documentation/devices.txt) Il est possible de les créer avec mknod : host% mknod dev/console c 5 1 Ce device est nécessaire pour printf. Il serait possible d écrire un programme ne nécessitant aucun accès à un périphérique (exemple : le service réseau echo) Nous pouvons maintenant démarrer avec init=/hello-arm-static Sysmic - J. Pouiller Formation à Linux Embarqué 83 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 85 / 241

Dropbear Serveur et client ssh Procédure classique (ou presque) host$ wget http://matt.ucc.asn.au/dropbear/ releases/dropbear-0.53.tar.bz2 host$ tar xvjf dropbear-0.53.tar.bz2 host$ mkdir build host$../configure --disable-zlib --host=armlinux --build=i386 --prefix=$(pwd)/../ install host$ make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" host$ make install Sysmic - J. Pouiller Formation à Linux Embarqué 104 / 241 Dropbear Gestion des clef authorisées host$ mkdir -p etc/dropbear host$ mkdir -p root/.ssh host$ cp ~/.ssh/authorized_keys root/.ssh Génération des clef host : target% dropbearkey -t rsa -f /etc/dropbear/ dropbear_rsa_host_key target% dropbearkey -t dss -f /etc/dropbear/ dropbear_dss_host_key target% dropbear -E host$ echo "ttys0::respawn:/sbin/dropbear -E" >> etc/inittab host$ ssh root@target Dropbear nécessite un certain nombre de fonctionnalité de notre Linux. Le faire fonctionner est un bon test de compatibilité de notre système Sysmic - J. Pouiller Formation à Linux Embarqué 105 / 241

Compiler le cross-compiler et la libc Le compilateur et la libc se compile ensemble On peut identifier la toolchain à son triplet : <CPU>-<VENDOR>-<SYSTEM> <SYSTEM> ~ <KERNEL>-<OS> <KERNEL> = linux <OS> est une notion plus floue : gnu, ulibc, glibc, ulibcgnueabi... Pour gcc, on abbrège souvent le triplet en omettant <VENDOR> Exemples : ppc85-e8541-linux-gnu arm9-atmel-linux-ulibceabi sh4-st-unknown : Pas de libc, permet de compiler le noyau et u-boot, mais pas d application user i586-pc-mingw32msvc : Target windows Attention, ca n est pas une science exacte Sysmic - J. Pouiller Formation à Linux Embarqué 106 / 241 Compiler le cross-compiler et la libc 3 étapes : On compile arm-unknown-gcc On configure le noyau pour installer les headers On compile la libc avec arm-unknown-gcc et le noyau préconfiguré, on compile le noyau On compile arm-linux-libc-gcc Difficultés : Assez complexe Souvent des problèmes de compatibilité entre les versions Sysmic - J. Pouiller Formation à Linux Embarqué 107 / 241

Compiler le cross-compiler et la libc Différentes libc : glibc ( GNU C Library, la vénérable) eglibc ( Embedded GNU C Library, meilleur support des diverses architectures. Utilisée depuis récement sur diverses distributions desktop ) newlib (utilisée par Cygwin) µclibc (très utilisée dans l embarqué) dietlibc (encore plus petite que µlibc destinée à la compilation statique) bionic (Android) Sysmic - J. Pouiller Formation à Linux Embarqué 108 / 241 Compiler la toolchain Crosstool-NG Crosstool-NG : Système automatisant toute la procédure et intégrant les patch connu pour rendre compatible certains systèmes Principalement maintenu par Yann Morin (cocoricco) Il n existe pas de paquet, nous devons donc le compiler nous même : host% apt-get install automake libtool texinfo flex bison gawk... host$ wget http://crosstool-ng.org/download/ crosstool-ng/crosstool-ng-1.13.4.tar.bz2 host$ tar xvzf crosstool-ng-1.13.4.tar.bz2 host$ cd crosstool-ng-1.13.4 5 host$./configure && make host% make install Sysmic - J. Pouiller Formation à Linux Embarqué 109 / 241

Compiler la toolchain Crosstool-NG Préparation du répertoire de build $ mkdir ct-build ct-dl $ cd ct-build $ ct-ng help Partons de l exemple le plus proche de notre configuration $ ct-ng list-samples $ ct-ng arm-unknown-linux-uclibcgnueabi Vérifions que le l exemple compile $ ct-ng build Sysmic - J. Pouiller Formation à Linux Embarqué 110 / 241 Compiler la toolchain Crosstool-NG Configurons notre chaine de compilation finale $ ct-ng clean $ ct-ng menuconfig Dans la configuration... Prefix directory: /opt/${ct_target}... Remove documentation... Build Static Toolchain # Documentation du CPU + man gcc + wikipedia ( http://en.wikipedia.org/wiki/ ARM_architecture)... Architecture level: armv5te # Page de man de gcc + documentation du CPU :... Emit assembly for CPU: arm926ej-s 8... Tuple s vendor string : sysmic... Threading implementation to use: (nptl)... Add support for locales Sysmic - J. Pouiller Formation à Linux Embarqué 111 / 241

Compiler la toolchain Crosstool-NG Compilons $ chmod 777 /opt $ ct-ng build $ ct-ng tarball Testons en statique host$ /opt/arm-sysmic-linux-uclibcgnueabi/bin/arm-sysmic-linuxuclibcgnueabi-gcc -static -Wall hello.c -o hello-mygcc-static target$./hello-mygcc-static Testons en dynamique host$ /opt/arm-sysmic-linux-uclibcgnueabi/bin/arm-sysmic-linuxuclibcgnueabi-gcc -Wall hello.c -o hello-mygcc target$./hello-mygcc Sysmic - J. Pouiller Formation à Linux Embarqué 112 / 241 Compiler la toolchain Crosstool-NG Il possible (probable) que les bibliothèque et le format de binaire ne soient pas compatible avec la toolchain existante. Il est alors nécessaire de recopier les bibliothèque provenant de toolchain et de recompiler TOUTES les binaires du système Ajoutons quelques lien symboliques bien pensés host$ cd /opt/arm-unknown-linux-uclibcgnueabi/bin host$ for i in arm-unknown-linux-uclibcgnueabi-*; do > ln -s $i arm-linux-${i#arm-unknown-linux-uclibcgnueabi-}; > done N espérez pas compiler du premier coup. Mais autrefois, c était pire! Sysmic - J. Pouiller Formation à Linux Embarqué 113 / 241

Création du rootfs Pour créer une image jffs2, vous devez au minimum spécifier le répertoire de source, l image de destination, l endianness et le padding : target% cat /proc/mtd host% apt-get install mtd-utils host$ mkfs.jffs2 -l -p -r nfs-root -o rootfs.jffs2 Afin de rendre notre image plus performante, ajustons la taille des pages, supprimons les cleanmarkers (on pourrait aussi utiliser -c 0) et changeons le propriétaires des fichier en root : host$ mkfs.jffs2 -l -p -q -n -s 2048 -e 128 -r nfsroot -o rootfs.jffs2 Sysmic - J. Pouiller Formation à Linux Embarqué 114 / 241 Recopier le système sur la flash Le plus générique pour recopier la flash sur la cible est de démarrer Linux par un autre moyen (NFS ou partition de rescue) et d utiliser les outils Linux. Toujours commencer par effacer le contenu précédent (on risque sinon des corruptions sur le filesystem) target% flash_eraseall /dev/mtd1 target% cd /tmp Il existe des fichiers devices mtd* et mtdblock* : Les fichiers block ne sont la que pour la compatibilité avec certains outils. Ils ne gèrent pas les badblock et les clean markers. Il est préférable de passer le plus possible par les fichiers mtd* Les flashs doivent être écrite en prenant certaines precautions (padding sur les pages, etc...). Il est préférable de systématiquement écrire en utilisant les outils spécialisés Sysmic - J. Pouiller Formation à Linux Embarqué 115 / 241

Qemu et Scratchbox Recopier le système sur la flash La cross-compilation est transparente qemu$ gcc hello.c -static -o hello-sb2-static qemu$ file hello-sb2-static qemu$./hello-sb2-static qemu$ gcc hello.c -o hello-sb2 qemu$ file hello-sb2 Comme sur la cible, nous avons besoin que les bibliothèques soit bien configurées dans notre environement qemu$ cp -a /opt/arm-unknown-linuxuclibcgnueabi/arm-unknown-linuxuclibcgnueabi/sysroot/lib. qemu$./hello-sb2 Téléchargeons le rootfs sur notre cible. Nous pouvons avoir des problèmes de place pour stoker cette image. Il est dans ce cas préférable de travailler sur NFS (mais ca n est pas toujours possible). target% tftp -g -r rootfs.jffs2 target% nandwrite -p /dev/mtd1 rootfs.jffs2 ou bien host$ serve_image 0.0.0.0 1234 rootfs.jffs2 128 target% recv_image host 1234 /dev/mtd1 Test target% mkdir /tmp/mtd1 target% mount -t jffs2 /dev/mtdblock1 /tmp/mtd1 Sysmic - J. Pouiller Formation à Linux Embarqué 130 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 116 / 241 Recopier le système sur la flash Il est possible d effectuer cette opération à partir de U-Boot. Nous allons utiliser TFTP sans démarrer dessous. Désactivons l autostart uboot> set autostart no Toujours effacer la flash avant de flasher uboot> nand erase clean 1000000 8800000 On place l image en mémoire afin de la flasher uboot> tftp 21000000 rootfs.arm.jffs2 uboot> nand write 21000000 1000000 5A0000 Sysmic - J. Pouiller Formation à Linux Embarqué 117 / 241

Recopier le noyau sur la flash L opération est similaire au filesystem. Dans la plupart des cas, on place le noyau à part sur une autre partition de la flash. Nous n avons alors pas besoin de filesystem : Sous Linux target% flash_erase /dev/mtd0 0x400000 0 target% cd /tmp target% tftp -g -r uimage target% nandwrite -s 0x400000 -p /dev/mtd0 uimage Sous U-boot uboot> tftp 21000000 uimage uboot> nand erase clean 400000 200000 uboot> nand write 21000000 400000 200000 Automatisation Strachbox but : créer une distribution type Debian Utilisé par Meego (Nokia, intel, Renault, etc..) et Android (en cours) packagé : apt-get install scratchbox2 Coquille vide On peut installer l environement de Maemo ou de Android Basé sur un fonctionnement hybrid avec qemu On compile avec le cross-compiler mais le reste est executé avec qemu ou en ssh sur la cible S utilie comme un environement de compilation normal Rend la cross-compilation transparente Fonctionne pour ARM and x86 targets (PowerPC, MIPS and CRIS targets are experimental) Permet de conpiler certains packets ne peuvent pas etre cross-compilé (Notablement Python) Depend du bon fonctionnement de qemu Sysmic - J. Pouiller Formation à Linux Embarqué 118 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 128 / 241 Automatisation Qemu et Scratchbox Les options non utilisées par le noyau sont passée au script d initialisation. Ajoutons une option permettant de flasher automatiquement notre cible : if [ $1 == FLASH ] flash_eraseall /dev/mtd0 flash_eraseall /dev/mtd1 cd /tmp nandwrite -p /dev/mtd0 uimage nandwrite -p /dev/mtd1 rootfs.jffs2 7 fi Installation host% apt-get install scratchbox2 host$ mkdir scratchbox host$ cd scratchbox Initialisation de l environement. Nous utilisons qemu-arm pour lancer nos binaire cibles et arm-linux-gcc comme compilateur host$ sb2-init -c qemu-arm -n A926 arm-linuxgcc Démarrage de l environement host$ sb2 Sysmic - J. Pouiller Formation à Linux Embarqué 119 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 129 / 241

Automatisation Buildroot Récupération des sources host$ wget http://buildroot.uclibc.org/ downloads/buildroot-2010.11.tar.bz2 host$ tar xvf buildroot-2010.11.tar.bz2 host$ cd buildroot-2010.11 Utilisation d une configuraiton pré-établie comme base de configuration host$ make usb-a9260_defconfig host$ make menuconfig host$ make linux26-menuconfig host$ make uclibc-menuconfig host$ make busybox-menuconfig host$ make all Monter le rootfs sur l hôte L hôte ne possèdant pas de flash, nous devons la simuler pour pouvoir monter le rootfs : Chargeons le module permettant l émulation d une flash et copions notre image sur la flash virtuelle host% modprobe mtdram total_size=65536 erase_size=256 host% nandwrite -p /dev/mtd0 rootfs.jffs2 Alternativement, il est possible de directement mapper un fichier sur une flash avec block2mtd host% losetup /dev/loop0 rootfs.jffs2 host% modprobe block2mtd block2mtd=/dev/loop0 Documentation : http://buildroot.uclibc.org/buildroot.html Sysmic - J. Pouiller Formation à Linux Embarqué 126 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 120 / 241 Automatisation OpenEmbedded et Yocto Monter le rootfs sur l hôte But : créer une distribution type Debian Gère un système de paquets Assez lourd à la configuration Tres lourd de créer un nouveau type de cible... mais relativement simple de gérér des dizaines de cibles Beaucoup de paquets sont deja préparés ( 1800)... Principalement, toute la suite Gtk Opie Yocto remplace peu à peu OpenEmbedded dans les nouveau projet Il est poussé pour la Linux Foundation Chargeons la couche d emulation par block et le filesystem host% modprobe mtdblock host% modprobe jffs2 Copie de notre image host% mkdir jffs2-mount host% mount -t jffs2 /dev/mtdblock0 jffs2-mount Sysmic - J. Pouiller Formation à Linux Embarqué 127 / 241 Sysmic - J. Pouiller Formation à Linux Embarqué 121 / 241