2016-12-05-miniatureAprè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.

 

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

 

Installation de libicu-dev

Installation de libicu-dev

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 !

Installation de Qemu !

Installation de Qemu !

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/

Au jour où j'écris cette article, il s'agit de la version Neon.1

Au jour où j’écris cette article, il s’agit de la version Neon.1. On télécharge “Eclipse IDE for C/C++ Developers”.

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).

4-4-eclipse_tar

Extraction !

Et on déplace le dossier crée à la racine de notre dossier personnel :

mv eclipse ~/

 

Les personnes qui ont lu cet article ont aussi lu :  5 minutes pour créer son hotspot Wifi sur Raspberry Pi !

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…).

Aïe.. Aïe.. Aïe.. Faut que j'installe ce foutu Java !

Aïe.. Aïe.. Aïe.. Faut que j’installe ce foutu Java !

Pour installer la dernière version, suivez les instructions sur cette page (Sous partie « Process » uniquement) : https://wiki.debian.org/JavaPackage

Téléchargement de Java pour Linux x64

Téléchargement de Java pour Linux x64

On peut enfin lancer Eclipse ! On avance ! \o/

4-7-eclipse_launch

Lacement d’Eclipse !

Définition du WorkSpace !

Définition du WorkSpace !

Page d'accueil d'Eclipse ! Eclipse is ready !

Page d’accueil d’Eclipse ! Eclipse is ready !

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 crée bien évidemment un projet C++ ! :-)

On crée bien évidemment un projet C++ ! 🙂

Et bien sûr on fait du Cross-GCC !

Et bien sûr on fait du Cross-GCC !

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.

On remplit les quelques infos du projet et notre message Hello World :-)

On remplit les quelques infos du projet et notre message Hello World 🙂

Ici, rien à faire, laisser coché les configurations Debug et Release.

Ici, rien à faire, laisser coché les configurations Debug et Release.

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.

Très important !!!

Très important !!!

Waaaaouhh !

Waaaaouhh !

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.

2016-12-05-chapitre_5-7

Pratique cet outil.. Ça me rappelle un peu Visual Studio tout ça…

Ensuite on redémarre Eclipse ! Et non, c'est pas une arnaque !

Ensuite on redémarre Eclipse ! Et non, c’est pas une arnaque !

Eclipse se relance, affichons nos nouvelles fonctionnalités : Window => Show View…

Toutes les vues cachée sur Eclipse... The dark side !

Toutes les vues cachée sur Eclipse… The dark side of Eclipse !

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.

Les personnes qui ont lu cet article ont aussi lu :  Le Raspberry Pi 3 annoncé !

Dans cet onglet nouvellement crée, on ajoute une nouvelle connexion.

2016-12-05-chapitre_5-10

Sérieux, j’aurai pu zoomer +

On clique sur le pinguin, ça sera notre nouvelle connexion Linux !

On clique sur le pingouin, ça sera notre nouvelle connexion Linux !

Pour le reste de la configuration, utiliser les paramètres suivants :

Là, tu rentres l'IP de TON Raspberry, qui n'est pas forcément l'IP de mon Raspberry, compris ?!

Là, tu rentres l’IP de TON Raspberry, qui n’est pas forcément l’IP de mon Raspberry, compris ?!

Et tout le reste à installer, sélectionnons les bons protocoles !

Et tout le reste à installer, sélectionnons les bons protocoles !

Ensuite on peut se connecter au Raspberry grâce aux identifiants de la source (pi/raspberry).

Plus sympa que le console pour se connecter !

Plus sympa que le console pour se connecter !

Connectés nous sommes !

Connectés nous sommes ! On a accès au terminal du Raspberry Pi en créant un Ssh Shell.

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 ».

Copie, colle, exécute !

Copie, colle, exécute ! Eh bah… non 🙁

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.

2016-12-05-chapitre_5-17

Ah bah oui, avec des permissions en exécution ça va mieux !

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é ! 🙂

Une image en tant que clé, c'est joli ! (je l'ai changée depuis !)

Une image en tant que clé, c’est joli ! (je l’ai changée depuis !)

Retournons maintenant sur Eclipse pour automatiser notre copie de programme lors du Build : Project Properties => C/C++ Build => Settings => Build Steps.

Ici, on peut paramétrer des commandes qui s'exécuterons avant ou après la compilation !

Ici, on peut paramétrer des commandes qui s’exécuteront avant ou après la compilation !

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).

Compile, copie, colle et exécute ! :-)

Compile, copie, colle et exécute ! 🙂

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.

Eheheh... La mise à jour de notre programme fonctionne ! Le tout en un clic !

Eheheh… La mise à jour de notre programme fonctionne ! Le tout en un clic !

Ç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

Debian Wiki – CrossToolchains

MS-Cheminformatics

 

 

BenTeK.

Pin It on Pinterest

Shares
Share This