Après avoir réalisé une chaîne de compilation en C pour le Rasberry Pi sous ArchLinux il y a deux semaines, je vous invite à explorer la cross-compilation C++ sous Debian avec un IDE dédié. Cela me permettra de créer et compiler des programmes directement sur le Raspberry Pi.
On verra également comment on peut déboguer le programme à distance sur le Raspberry Pi. Nous aurons ainsi un environnement de développement dédié à la configuration et à la création de programme sur notre système embarqué 🙂
Cette seconde partie traitera de l’installation des libraires partagées et de l’IDE Eclipse et de la création et de la configuration d’un projet embarqué sous Eclipse pour Raspberry Pi.
Table des matières
Prérequis
Toutes les étapes précédent ce tuto ont été effectués dans la première partie du tuto :
– Réaliser son environnement de développement C++ pour Raspberry Pi [PARTIE 1/3]
4. Installation des librairies et de l’IDE Eclipse
On retourne sur notre machine de développement. On commence par installer libicu-dev. J’ai installé la version de base pour l’architecture locale, puis la version armhf.
Note : libicu-dev est un ensemble de librairies C/C++ pour les composants de programmes Unicode.
sudo apt-get install libicu-dev
sudo apt-get install libicu-dev :armhf
Ensuite, on va installer une dépendance de Qemu. Qemu est un logiciel propre au monde linux qui permet d’émuler d’autres architectures. C’est d’ailleurs avec Qemu que l’on peut construire ses propres distributions, quel que soit l’architecture processeur de la machine cible. Ici, ces dépendances vont nous servir à exécuter des programmes armhf sur notre PC de développement en amd64.
sudo apt-get install qemu-user-static
Afin de tester, on peut même relancer notre HelloWorld armhf.
./hello
Pratique ! Faudra juste pas se tromper entre programmes armhf et amd64 dorénavant !
Passons maintenant à l’installation d’Eclipse. Eclipse est un IDE (Integrated Development Environment) qui a le chic d’être rarement à jour sur les dépôts officiels. On n’est jamais mieux servi que par soi-même ! Direction Eclipse.org ! https://eclipse.org/downloads/eclipse-packages/
On va dans les téléchargements et on extrait le tar.gz avec la commande tar –xvf. On déplace ensuite le dossier eclipse à la racine du dossier /home. (on va rester propre :-P).
Et on déplace le dossier crée à la racine de notre dossier personnel :
mv eclipse ~/
Je vais dans le dossier, je lance Eclipse (.\eclipse) et… impossible de le lancer ! Manque ce satané Java ! (Que je ne porte pas trop en mon cœur…).
Pour installer la dernière version, suivez les instructions sur cette page (Sous partie « Process » uniquement) : https://wiki.debian.org/JavaPackage
On peut enfin lancer Eclipse ! On avance ! \o/
Eclipse est fin prêt pour créer mes futurs projets embarqués ! Reste plus qu’à créer et configurer un projet ! 🙂
5. Configuration d’un projet embarqué sous Eclipse
On peut maintenant créer notre projet embarqué. Create => New Project !
On prend comme projet de démarrage un « Hello World C++ Project » avec Cross GCC, afin d’utiliser un compilateur d’une architecture différente.
Voilà la partie la plus importante de l’assistant de création de projet. Ici on entre le préfixe de note compilateur, à savoir arm-linux-gnueabihf- ainsi que son emplacement sur le disque : /usr/bin.
Notre projet est prêt. On peut lancer la compilation avec « Build » (icône en forme de marteau) et lancer avec « Run » (bouton play). Comme on a Qemu d’installé, l’ordinateur peut interpréter le code ARM ainsi crée dans la console.
On pourrait s’arrêter ici et copier notre programme à la main comme fait plus tôt. Mais je préfère automatiser un peu se processus de déploiement et avoir un accès direct à mon Raspberry depuis Eclipse. Pour se faire j’installe un paquet supplémentaire dans Eclipse, une sorte de plugin. Help => Install Software…
Je sélectionne le gestionnaire de paquets pour Eclipse Neon, et je me rends dans la section « General Purpose Tools ». On repère les lignes « Remote Command Shell Console » et « Remote System Explorer User Actions » et on les coche. Ces deux addons nous permettrons d’accéder au Raspberry via Eclipse. Que ce soit un accès à l’arborescence système du RPi ou à l’invite aux commandes via le protocole SSH.
Eclipse se relance, affichons nos nouvelles fonctionnalités : Window => Show View…
Puis sélectionner « Remote Systems ». Un nouvel onglet s’affiche dans le dock du bas. Pour ma part, je le déplace sur le dock de gauche avec « Project Explorer ». Je trouve ça beaucoup plus simple et lisible.
Dans cet onglet nouvellement crée, on ajoute une nouvelle connexion.
Pour le reste de la configuration, utiliser les paramètres suivants :
Ensuite on peut se connecter au Raspberry grâce aux identifiants de la source (pi/raspberry).
On est maintenant connecté ! On peut voir notre programme du chapitre 2 traîner dans le dossier /home/pi/ du Raspberry Pi. #Nostalgie
Je le supprime, afin de rester centrer sur nos nouveaux programmes.
On peut également accéder directement à la console du Raspberry en ajoutant un nouveau « SSH Shell ».
On peut d’ores et déjà copier notre nouveau programme TestRPi et le tester en copiant le binaire de « Project Explorer » au dossier « My Home » dans « Remote Systems ».
Lorsque j’essaie de lancer TestRPi avec la commande ./TestRPi, le Raspberry me rétorque qu’il n’a pas les permissions de le lancer. Pour remédier à cela, clic-droit sur le binaire, Properties.
Dans l’onglet Permissions, il faut veiller à bien donner les droits d’exécution au programme.
En retentant de lancer le programme, cela fonctionnera :-).
Afin d’automatiser la copie du binaire ainsi que l’attribution des permissions, j’installe une clé de cryptage SSH sur le PC de développement et je la copie sur le Raspberry Pi. Ainsi, je n’aurai plus besoin de m’identifier à chaque fois, ni dans le Terminal, ni dans Eclipse.
Pour se faire, il faut rentrer les commandes suivantes :
ssh-keygen
Pour le nom du fichier, je ne met rien (par défaut). Pour la passphrase, on peut en mettre une, ce que je décide de ne pas faire par simplification (sinon, la passphrase pourra toujours être renseignée une fois dans les paramètres d’Eclipse).
Une fois la clé crée, on la copie sur le Raspberry Pi :
ssh-copy-id pi@IP_RASPBERRY
Et voilà ! On peut tester de s’y connecter en ssh. SI tout fonctionne, le mot de passe ne sera plus demandé ! 🙂
Retournons maintenant sur Eclipse pour automatiser notre copie de programme lors du Build : Project Properties => C/C++ Build => Settings => Build Steps.
Dans la partie commande après Build, on rentre notre commande de copie vers le Raspberry Pi :
scp Nom_Programme pi@IP_RASPBERRY:/home/pi/Nom_Programme_sur_RPi
Je valide avec OK et je relance un build (icône du marteau).
Le programme est compilé puis copié directement sur la cible ! Reste plus qu’à le lancer dans le « Remote Shell ». On peut même s’amuser à changer le programme pour vérifier que le programme se met bien à jour à chaque build.
Ça fonctionne ! : -)
On a maintenant tout ce qu’il nous faut pour compiler directement un programme en C++ sur le Raspberry Pi avec une machine distante ! : -)
La dernière partie de ce tuto concernera le débogage à distance du programme tournant sur le Raspberry Pi ! Restez connectés ! 🙂
Ressources :
HackADay – Code Craft : Cross Compiling for the Raspberry Pi
BenTeK.
0 commentaires