MI03 TP Objectifs du TP 1ère séance Construction d'un système linux embarqué complet 2ème séance Mise en place d'un environnement de développement croisé Intégration de l'extension temps réél Xenomai La validation a lieu sur une carte ARM émulée
Préparation
Étapes Configuration réseau Mise en réseau de l'hôte et la cible Mise en place du service nfs La cible monte son système de fichier depuis un répertoire de la machine hôte Mise en place du service dhcp/bootp La cible acquiert automatiquement son adresse IP et les informations relatives au montage NFS
Étapes Codage et débogage d'un helloworld Installation de Xenomai Patch du noyau linux pour l'installation de la couche de virtualisation Adeos Compilation des librairies et programmes de l'espace utilisateur
Configuration réseau
schema Windows VirtualBox (ubuntu) ARM integrator eth0 172.x.x.x LAN UTC VirtualBox filter eth0 10.0.2.x qemu-tap0 192.168.0.1 eth0 192.168.0.32
Interfaces L'interface eth0 d'ubuntu reçoit son adresse par un serveur dhcp intégré à virtual box Adresse en 10.0.2.x L'interface tap qemu-tap0 est une pseudo interface réseau établissant un lien avec une application (ici qemu) Cette interface est créé et utilisée par qemu à son lancement (man qemu, options -net nic et -net tap)
interfaces qemu avec l'option -net tap utilise les scripts /etc/qemu-ifup au démarrage test Doit au minimum activer l'interface tap ifconfig $1 $TAPIP up /etc/qemu-ifdown à la fermeture Démarrage du noyau en passant statiquement le paramètre noyau ip=192.168.0.32 Le passage de paramètre se fait via l'option append de qemu La cible doit pouvoir pinguer l'hôte
Configuration du serveur dhcp dhcp-server Installer le paquetage dhcp3-server Configurer le service dans /etc/dhcp3/dhcpd.conf Voir transparent suivant /etc/init.d/dhcpd start
Configuration du serveur dhcp Paramètres allow bootp; ddns-update-style none; subnet 192.168.0.0 netmask 255.255.255.0 { group { host myboard { hardware ethernet ##:##:##:##:##:##; fixed-address 192.168.0.32; Indiquée au démarrage Nom du fichier noyau demandé au serveur tftp filename "zimage.integrator"; option root-path "/tftpboot/rootfs-integrator"; } } } Emplacement du répertoire root lorsque monté par NFS
Configuration du serveur dhcp Problème Le démarrage du service avec /etc/init.d/dhcp3- server start échoue Solution Pourquoi? Il est possible d'activer un périphérique tun/tap dès le démarrage et de l'associer ensuite à qemu
Configuration du serveur dhcp Activation d'un périphérique tun/tap Éditer /etc/network/interfaces Ajouter auto qemu tap0 iface qemu tap0 inet static address 192.168.0.1 Crée un périphérique tun/tap de nom qemu-tap0 avant de l'activer netmask 255.255.255.0 pre up tunctl t qemu tap0 Supprime le périphérique une fois l'interface désactivée post down tunctl d qemu tap0
Configuration du serveur dhcp Redémarrer le service networking Dans quel répertoire se trouve t-il? L'outil tunctl se trouve dans le paquetage uml-utilities Association à qemu Lancer l'émulateur avec les paramètres -net nic -net tap,ifname=qemutap0,script=no Redémarrer le serveur dhcp
Configuration du serveur dhcp Test Démarrage du noyau en passant le paramètre noyau ip=bootp Le noyau demande son adresse au serveur dhcp La cible doit pouvoir pinguer l'hôte
Configuration de nfs Paquetage nfs-kernel-server Network File System Configuration dans /etc/exports /etc/init.d/nfs (re)start Configuration /tftpboot 192.168.0.32(rw,no_root_squash)
Configuration du serveur nfs Test Copier le système de fichier à utiliser dans /tftpboot/rootfs-integrator Pourquoi ce nom de répertoire exactement? Pour cela monter l'image ext2 mount o loop rootfs.ext2 /point/de/montage Copie du contenu (cp -a) umount /point/de/montage
Configuration du serveur nfs Test La cible doit booter sur le serveur nfs si les bons paramètres lui sont donnés boot=/dev/nfs Voir le fichier Documentation/filesystems/nfsroot.txt Il faut supprimer l'option «initrd=» de qemu Lorsque le noyau trouve un initrd il l'utilise par défaut, même si une option root= lui est passé
Modification du système racine Suppression de l'erreur configfs Analyser la procédure de démarrage dans /etc/inittab Ssh depuis l'hôte Permet d'ouvrir plusieurs terminaux sur la cible Utile pour tuer un programme planté Voir /etc/sshd_config sur la cible (ou dans le montage nfs sur la machine de développement) Autoriser root Autoriser l'absence de mot de passe
Modification du système racine Le système racine est maintenant monté (par nfs) en lecture/écriture Nous pouvons le personnaliser Utilisation du clavier français Recompiler busybox pour l'hôte (pas en croisé) Utiliser la commande dumpkmap sur le pc Utiliser la commande loadkmap sur la cible
Compilation/débogage Utiliser le compilateur croisé CC=arm-linux-gcc (--sysroot=/chemin/vers/chaine) Sur la cible gdbserver :10000 /chemin/du/programme Charge le programme et attend sur le port 10000 Sur la machine de développement gdb /chemin/local/du/programme target remote <ip de la cible>:10000 L'éxecutable doit contenir les symboles de debug Compilez et débuguez un petit programme helloworld
Xenomai
Patch du noyau Linux (1/2) Trouver les noyaux linux compatibles avec la version de xenomai utilisée cd xenomai-<version> ls ksrc/arch/<arch>/patches Les patchs ont des noms de la forme adeos-ipipe- <version du noyau>-<arch>-<version du patch>.patch Exemple adeos-ipipe-2.6.28-arm-1.12-00.patch Le noyau a patcher est linux-2.6.28
Patch du noyau Linux (2/2) Préparer les sources d'un noyau linux compatible Téléchargement et décompression mv linux-<version> linux-<version>-ipipe Appliquer le patch cd xenomai-<version>./scripts/prepare-kernel.sh --linux=../linux-<version du noyau>-ipipe --adeos=ksrc/arch/arm/patches/adeos-ipipe-<version du noyau>-arm-<version du patch>-*.patch
Compilation du noyau Modifier la configuration make ARCH=<arm> menuconfig Les options pour le temps réél sont regroupées dans la partie Real-time Sub-system Certaines options standard sont incompatibles avec Xenomai CPU frequency scaling Power management Compiler le noyau
Compilation du mode utilisateur Option de configuration disponibles./configure --help Liste les plateformes supportées Exemple./configure --host=arm-linux --enable-armmach=integrator --enable-arm-arch=5 L'ARM 926 implémente le jeu d'instruction ARMv5
Installation du mode utilisateur Installation make DESTDIR=<répertoire de travail> install Répertoire de travail Le répertoire de travail est le répertoire qui contient le système de fichier de la cible en cours de conception Peut correspondre au répertoire /tftpboot/rootfsmyboard
Test de xenomai /usr/xenomai/bin/latency À lancer sur la cible Affiche la latence courante sur timer Pour charger le système on peut utiliser dd if=/dev/zero of=/dev/null