ARM cross compiler gnueabi, gnueabihf et configuration de l'installation, test helloworld

Si nous avons besoin de compiler un programme helloworld fonctionnant sur l'architecture X86, il suffit d'exécuter
gcc helloworld.c -o helloworld sous le système Linux

Si vous souhaitez compiler un programme s'exécutant sur un système ARM sur un hôte X86, vous devez utiliser un compilateur croisé.

1. Règles de dénomination du compilateur:

La règle de dénomination de la chaîne d'outils de compilation croisée est: arch [-vendor] [-os] [- (gnu) eabi]

arch-architecture, tels que ARM, les
fournisseurs de chaîne d'outils MIPS verdor, tels que Freescale fournit des outils appelés
système d'exploitation fs os-target, tels que l'
interface binaire d'application embarquée linux eabi, l'interface binaire d'application intégrée (EABI)
selon le Que le système d'exploitation soit pris en charge ou non, ARM GCC peut être divisé en systèmes d'exploitation pris en charge et non pris en charge, tels que

arm-none-eabi: Cela n'a pas de système d'exploitation, et il est naturellement impossible de prendre en charge des fonctions étroitement liées au système d'exploitation, comme fork (2). Il utilise newlib, une bibliothèque C dédiée aux systèmes embarqués.

arm-none-linux-eabi: pour Linux, utilisez Glibc

2. Exemple:

1 、 arm-none-eabi-gcc
(Architecture ARM , pas de fournisseur , ne cible pas un système d'exploitation , est conforme à ARM EABI)

Utilisé pour compiler des systèmes bare metal basés sur ARM (y compris le démarrage et le noyau d'ARM Linux, ne convient pas à la compilation d'applications Linux),

Généralement adapté aux puces centrales ARM7, Cortex-M et Cortex-R, il ne prend donc pas en charge les fonctions étroitement liées au système d'exploitation.

Par exemple, fork (2), il utilise newlib, une bibliothèque C dédiée aux systèmes embarqués.

2 、 arm-none-linux-gnueabi-gcc
(architecture ARM, pas de fournisseur, crée des binaires qui s'exécutent sur le système d'exploitation Linux et utilise GNU EABI)

Il est principalement utilisé pour les systèmes Linux basés sur l'architecture ARM, et peut être utilisé pour compiler u-boot, le noyau Linux, les applications Linux de l'architecture ARM, etc.

arm-none-linux-gnueabi est basé sur GCC, utilise la bibliothèque Glibc et est un compilateur optimisé par Codesourcery.

Les calculs en virgule flottante des outils de compilation croisée arm-none-linux-gnueabi-xxx sont excellents. Généralement, les noyaux ARM9, ARM11, Cortex-A et le système d'exploitation Linux les utiliseront.

3.
compilateur ARM Android arm-eabi-gcc .

4.
L'outil de compilation lancé par armcc ARM a des fonctions similaires à arm-none-eabi et peut compiler des programmes bare metal (u-boot, kernel),

Mais vous ne pouvez pas compiler des applications Linux. Armcc fonctionne généralement avec les outils de développement ARM Les compilateurs de Keil MDK, ADS, RVDS et DS-5 sont tous armcc, et la plupart des compilateurs armcc sont chargés.

5 、 bras-aucun-uclinuxeabi-gcc 和 bras-aucun-symbianelf-gcc

arm-none-uclinuxeabi est utilisé pour uCLinux, en utilisant Glibc.

arm-none-symbianelf est utilisé pour symbian.

3. Somme ABI EABI:

ABI: Application Binary Interface (ABI) pour l'architecture ARM. Dans l'ordinateur, l'interface binaire de l'application décrit l'application (ou une autre classe

Type) et l'interface de bas niveau entre le système d'exploitation ou d'autres applications.

EABI: ABI intégré. L'interface binaire de l'application intégrée spécifie le format de fichier, le type de données, l'utilisation du registre, l'optimisation de l'organisation de la pile et les conventions standard des paramètres dans un logiciel intégré. Développement

Les utilisateurs utilisant leur propre langage d'assemblage peuvent également utiliser EABI comme interface avec le langage d'assemblage généré par un compilateur compatible.

La principale différence entre les deux est que ABI est sur l'ordinateur et EABI est sur la plate-forme intégrée (telle que ARM, MIPS, etc.).

arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc:

Les deux compilateurs croisés sont applicables à deux architectures différentes d'armel et armhf respectivement. Les deux architectures d'armel et armhf adoptent des stratégies différentes pour les opérations en virgule flottante.

(Armer avec fpu peut prendre en charge ces deux stratégies d'opérations en virgule flottante).

En fait, ces deux compilateurs croisés ne sont que des valeurs par défaut différentes de l'option gcc -mfloat-abi. L'option gcc -mfloat-abi a trois valeurs soft, softfp, hard (les deux dernières sont requises

Il y a une unité à virgule flottante fpu dans arm, soft est compatible avec les deux derniers, mais les deux modes de softfp et hard ne sont pas compatibles entre eux):

soft: n'utilisez pas fpu pour les calculs en virgule flottante, même s'il existe une unité arithmétique à virgule flottante FPU, le mode logiciel est utilisé à la place.

softfp: La valeur par défaut adoptée par l'architecture armel (le compilateur correspondant est arm-linux-gnueabi-gcc) est calculée par fpu, mais les paramètres sont passés par des registres ordinaires, de sorte qu'en cas d'interruption, seuls les registres ordinaires doivent être sauvegardés et la charge d'interruption est faible. Mais les paramètres doivent être convertis en virgule flottante puis calculés.

hard: architecture armhf par défaut (compilateur correspondant arm-linux-gnueabihf-gcc) utilisée, le calcul fpu, les paramètres de transmission sont utilisés dans le registre à virgule flottante fpu pass, éliminant le besoin de conversion, les meilleures performances
sont bonnes, mais la charge d'interruption haute.

4. Installation et configuration

Tout d'abord, prenez la configuration du compilateur de la plate-forme i.MX6Q de NXP comme exemple. Le
fonctionnaire fournit généralement le package compressé suivant
gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz. Connectez-vous d'
abord au système Ubuntu et exécutez sudu su pour entrer Droits d'administrateur, vous pouvez alors créer un dossier vous-même, ou vous pouvez installer le chemin officiel recommandé pour créer un fichier plus.

mkdir  -p /opt/freescale/usr/local

Ensuite, décompressez la boîte à outils

tar  zxvf  gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz  -C  /opt/freescale/usr/local

Ensuite, configurez la variable d'environnement PATH, le but est d'utiliser le compilateur croisé dans n'importe quel chemin.
La première consiste à modifier le fichier de profil

vim  /etc/profile

Ajouter à la fin du fichier ouvert

export ARCH=arm  

export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- 

export PATH=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH 

Appuyez ensuite sur Echap pour accéder au mode de commande, entrez deux points et entrez wq après les deux points pour enregistrer et quitter.

Une autre méthode de configuration est

PATH=$PATH:/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin

Entrez echo $ PATH pour vérifier si la variable PATH a été ajoutée avec succès.

Nous pouvons le vérifier en compilant helloworld.c.

Sous la ligne de commande linux, exécutez vim helloworld.c et entrez le code suivant.

#include"stdio.h" 

int main() 
	{
    
    
		 printf("HelloLinux!\n");
		 return 0; 
	}

Si vous exécutez
arm-none-linux-gnueabi-gcc helloworld.c -o helloworld_arm
, il n'y a pas de message d'invite. Après avoir exécuté la commande ls, vous pouvez voir un fichier helloworld_arm supplémentaire. Après avoir téléchargé sur la carte ARM,
exécutez chmod 777 helloworld_arm
puis ./helloword_arm
nous pouvons voir qu'une ligne de Hellolinux est imprimée! Succès!

Pour la plate-forme NXP LS1021A, car il s'agit d'une architecture cortex A7, le compilateur en a besoin d'une autre.
Cette fois, nous utilisons le téléchargement réseau pour y parvenir.

sudo apt-get install gcc-arm-linux-gnueabifh

Après dix minutes, exécutez

arm-linux-gnueabihf-gcc -v

Une longue liste d'informations sera imprimée, indiquant que l'installation a réussi.

continuer

arm-linux-gnueabihf-gcc hello.c -o hello1021

Téléchargez hello1021 sur la carte cible de LS1021A,
exécutez chmod 777 hello1021
puis ./hello1021
nous pouvons voir qu'une ligne de Hellolinux est imprimée! Succès!

Je suppose que tu aimes

Origine blog.csdn.net/malcolm_110/article/details/108252425
conseillé
Classement