Différences entre versions de « C devel cross »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
(Page créée avec « = Introduction = Lorsque l'on compile un programme en ''C'' on passe par tout une chaîne de logiciels que l'on appel la chaîne de compilation (''toolchain''). Si l'on pr... »)
 
Ligne 2 : Ligne 2 :
 
Lorsque l'on compile un programme en ''C'' on passe par tout une chaîne de logiciels que l'on appel la chaîne de compilation (''toolchain''). Si l'on prend le cas de la chaîne de compilation GNU (''GNU toolchain''), elle est composée de:
 
Lorsque l'on compile un programme en ''C'' on passe par tout une chaîne de logiciels que l'on appel la chaîne de compilation (''toolchain''). Si l'on prend le cas de la chaîne de compilation GNU (''GNU toolchain''), elle est composée de:
 
*binutils : utilitaires permettant la conversion du pseudo-code généré par la compilation en instructions comprises par le processeur cible (assembleur);
 
*binutils : utilitaires permettant la conversion du pseudo-code généré par la compilation en instructions comprises par le processeur cible (assembleur);
*gcc : les compilateurs C et C++ (''gcc'' et ''g++'') ;
+
*gcc : les compilateurs C et C++ (''gcc'' et ''g++'');
 
*glibc, bibliothèque pour les appels au noyau et le traitement bas-niveau (stdio.h, stdlib.h, pthread.h, etc...);
 
*glibc, bibliothèque pour les appels au noyau et le traitement bas-niveau (stdio.h, stdlib.h, pthread.h, etc...);
 
*les en-têtes du noyau requis par la bibliothèque glibc (linux-headers dans le cas du noyau Linux) ;
 
*les en-têtes du noyau requis par la bibliothèque glibc (linux-headers dans le cas du noyau Linux) ;
*gdb, déboguer pour chaîne binaire déjà compilée ;
+
*gdb, déboguer pour chaîne binaire déjà compilée;
  
 
La compilation se fait '''sur''' et '''pour''' la même architecture que la machine de développement. La compilation croisée permet de modifier l'architecture cible !
 
La compilation se fait '''sur''' et '''pour''' la même architecture que la machine de développement. La compilation croisée permet de modifier l'architecture cible !

Version du 29 avril 2020 à 14:48

Introduction

Lorsque l'on compile un programme en C on passe par tout une chaîne de logiciels que l'on appel la chaîne de compilation (toolchain). Si l'on prend le cas de la chaîne de compilation GNU (GNU toolchain), elle est composée de:

  • binutils : utilitaires permettant la conversion du pseudo-code généré par la compilation en instructions comprises par le processeur cible (assembleur);
  • gcc : les compilateurs C et C++ (gcc et g++);
  • glibc, bibliothèque pour les appels au noyau et le traitement bas-niveau (stdio.h, stdlib.h, pthread.h, etc...);
  • les en-têtes du noyau requis par la bibliothèque glibc (linux-headers dans le cas du noyau Linux) ;
  • gdb, déboguer pour chaîne binaire déjà compilée;

La compilation se fait sur et pour la même architecture que la machine de développement. La compilation croisée permet de modifier l'architecture cible !

On peut alors développer sur une architecture 64 bits Linux (ou Windows) et compiler son programme pour une architecture MIPS, PPC, ARM, AVR, etc...

Pré-requis

Tout d'abord il faut cerner l'architecture cible ! Dans cet exemple, nous allons utiliser un OrangePi Zéro:

Orange pi zero.jpg

Cette carte utilise un SoC AllWinner H2+ et d'après la documentation de AllWinner le CPU est un ARM Cortex-A7:

Allwinner h2 documentation.png

Il faudra donc récupérer la bonne chaîne de compilation pour sur le site arm.com:

Arm toolchain choice.png

Il faut maintenant déterminer quelle version de la chaîne de compilation récupérer, cela se décide en fonction du système d'exploitation présent sur la machine:

root@orangepizero:~# ll /usr/lib/gcc
total 4
drwxr-xr-x 3 root root 4096 Apr  6  2019 arm-linux-gnueabihf
root@orangepizero:~# ll /usr/lib/gcc/arm-linux-gnueabihf/
total 4
drwxr-xr-x 5 root root 4096 Feb  7 19:38 8

On apprend que la chaîne de compilation:

Sur ce système la chaîne de compilation est en version 8.3.0, nous pouvons donc choisir de déplier la section 8.3:

Arm toolchain 8.3 choice.png

Et télécharger la chaîne de compilation appropriée pour l'architecture de développement (Linux 64bits) et l'architecture cible (eabihf):

Arm toolchain linux 64 eabihf choice.png