Configurer une chaîne de compilation croisée pour le Raspberry Pi avec ArchLinux
  J’ai eu l’envie soudaine de me lancer dans l’aventure ArchLinux. Une distribution Linux un peu particulière où beaucoup de choses sont à installer et à configurer. L’avantage : un gestionnaire de paquets validés par des « trusted users » ainsi que communauté très active. L’inconvénient : ArchLinux ne fait pas parti des distributions Linux les plus populaires du […]
Compilation croisée avec ArchLinux

 

2016-11-21-miniature

J’ai eu l’envie soudaine de me lancer dans l’aventure ArchLinux. Une distribution Linux un peu particulière où beaucoup de choses sont à installer et à configurer. L’avantage : un gestionnaire de paquets validés par des « trusted users » ainsi que communauté très active. L’inconvénient : ArchLinux ne fait pas parti des distributions Linux les plus populaires du net (Debian, Ubuntu, Mint, etc…).

Voici donc un petit tuto concernant mon installation de ArchLinux sur PC et sur la réalisation d’une compilation croisée sur Raspberry Pi 2 !

 

0. Compilation croisée ? Késako denouveau ?

Pour tout vous expliquer, je vous renvoie vers la page wikipédia suivante :

https://en.wikipedia.org/wiki/Cross_compiler

Un compilateur est un programme informatique qui transforme un code source écrit dans un langage de programmation (le langage source) en un autre langage informatique (le langage cible). Pour qu’il puisse être exploité par la machine, le compilateur traduit le code source, écrit dans un langage de haut niveau d’abstraction, facilement compréhensible par l’humain, vers un langage de plus bas niveau, un langage d’assemblage ou langage machine. Les outils de compilation croisée permettent de compiler des programmes d’un système d’exploitation à un autre (Microsoft Windows vers systèmes Unix ou inversement) et/ou d’une architecture processeur à l’autre (x64/x86 vers ARM ou inversement).

Dans notre cas, on veut compiler d’un système PC (Windows ou Linux, x64 ou x86) vers un environnement embarqué (Raspberry Pi, sous linux, processeur ARM).

Pour ce faire, il existe des logiciels de compilations croisée sur Windows, parfois sous forme de plugins additionnels à Visual Studio et très souvent payants.

Pour ce qui est du monde gratuit et libre, nous devons obligatoirement passer par une distribution linux pour réaliser une compilation croisée (ou cross-compiler pour les anglophones :-P) entre deux architectures processeurs uniquement. C’est dans ce tuto que j’explique mon expérience avec ArchLinux, une distribution que je trouve pour ma part, un peu à l’écart de tout ce qui se trouve sur le net.

1. Installation de ArchLinux

Pour ma première fois avec ArchLinux, j’ai suivi à la lettre le tutoriel de Frederic Bezies que vous trouvez ici :

http://frederic.bezies.free.fr/blog/?p=14837

J’ai rencontré quelques difficultés lors de l’installation concernant les pilotes de clavier et souris pour l’environnement graphique. Pour pallier à ce problème, j’ai du décommenter toute la liste de serveurs dans /etc/pacman.d/mirrorlist, car les serveurs français ne proposaient plus les paquets demandés par le tuto.

J’ai également rencontré une difficulté lors de la connexion au réseau au moment d’installer les premiers paquets. En effet, en suivant le tuto, je n’avais jamais connecté mon pc au réseau. Par conséquence, je n’ai pas eu d’attribution DHCP à ma carte réseau, et donc pas d’internet. J’ai corrigé le problème en démarrant le service DHCP sur le PC après sa connexion au réseau grâce à la commande :

systemctl start dhcpcd

 

Sinon, mis à part cela, l’installation s’est bien déroulé, avec un joli bureau Gnome3 à la clé :-).

2. Compilation croisée PC ArchLinux vers Raspberry Pi ArchLinux

Dans le cas où vous avez installé ArchLinux sur votre Raspberry Pi, cross-compiler un simple programme devient très simple. En effet, ArchLinux sur ARM et sur x86 ou x64 partagerons exactement les mêmes libraires, donc pour développer un simple service ou un serveur de base, la compilation croisée s’effectue très simplement !

Pour commencer, nous allons récupérer le compilateur GCC ainsi que tous les outils associés sur les archives AUR (Arch User Repository) avec la commande suivante (mode root pour toutes les opérations à suivre) :

yaourt –S arm-linux-gnueabi-gcc

 

L’opération est très longue, s’en suit de multiples téléchargements, compilations et installations.

A la fin de l’opération, le compilateur C pour architecture ARM se trouvera sous : /usr/bin/arm-linux-gnueabi-gcc-4.9.0

Le compilateur est un programme fonctionnant sur une architecture x86 64 bits pour produire des exécutables ARM au format 32 bits.

Testons les outils dès à présent !

Créons un petit fichier en C : nano hello.c

#include <stdio.h>
Int main(void)
{
Printf (« Bonjour ! Bienvenue dans le monde de la cross-compilation !\n »);
Return 0;
}

 

Ensuite, on cross-compile !

arm-linux-gnueabi-gcc –o hello hello.c

 

Notre fichier compilé étant prévu pour le Raspberry Pi, il sera impossible de le lancer sur le PC (essayez, vous verrez :-P).

Je téléverse le programme sur le Raspberry Pi (ce dernier étant sous ArchLinux) :

Scp hello pi@192.168.0.61:temp

 

Ensuite, on se rends sur le RPi via SSH ou directement dessus et on lance notre programme :

pi@raspberrypi ~/temp $ .hello
Bonjour ! Bienvenue dans le monde de la cross-compilation !

 

Et nous voilà avec un simple programme en C cross compilé de ArchLinux PC vers un ArchLinux sur Raspberry Pi !

3. Compilation croisée PC ArchLinux vers Raspberry Pi avec Raspbian

Pour pouvoir cross-compiler d’un PC ArchLinux vers Raspbian, nous allons utiliser le compilateur GCC Linaro. « Linaro est une association internationale à but non lucratif travaillant à la consolidation et à l’optimisation des logiciels libres à base Linux pour les processeurs d’architecture ARM ».

Pour se faire, afin d’avoir tous les paquets nécessaires (que l’on soit sur système base 32 bits ou 64 bits), nous allons ajouter le dépôt multilib à Pacman sur le PC source. Pour se faire on édite le fichier /etc/pacman.conf et on y ajoute les lignes suivantes :

[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

 

On peut ensuite installer les outils nécessaires à l’aide de Pacman :

sudo pacman –S multilib/lib32-gcc-libs multilib/lib32-zlib

 

Si vous n’avez pas git, installez git :

sudo pacman –S git

 

Ensuite on récupère l’ensemble des outils sur le dépôt GitHub :

git clone git://github.com/raspberrypi/tools.git –depth 1

 

On peut ensuite compiler pour plateforme ARM en 32 bits ou en 64 bits :

../tools/arm-bcm2706/gcc-linaro-arm-linux-gnuebihf-raspbian/bin/arm-linux-gnueabihf-gcc –o hello32 hello.c

../tools/arm-bcm2706/gcc-linaro-arm-linux-gnuebihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc –o hello32 hello.c

 

On pourra ensuite téléverser les 2 versions et les tester sur le Raspberry Pi comme dans le chapitre 1 :-).

 

Nous savons maintenant comment compiler une application de base simple pour le Raspberry Pi avec une base sous ArchLinux.

Cela peut être utile pour le développement de drivers ou de librairies nécessitants l’utilisation de noyau temps-réel :-).

Dans le prochain tuto, je vous présenterai comment réaliser une compilation croisée de Debian vers Raspbian avec Eclipse ! Cela nous permettras de réaliser nos premières briques pour le programme qui tournera sur le PiRobot !

 

Sources :

 

BenTek.

 

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Pin It on Pinterest

Shares
Share This