Question

Je suis en train de compilation croisée linux pour une architecture ARM.

L'hôte est une machine exécutant ubuntu-X86 jaunty. J'ai téléchargé un toolchain cross-compilation pour ARM de http: //ftp.arm .linux.org.uk / pub / armlinux / toolchain / . J'ai téléchargé la version 2.95.3 du toolchain.

Le problème que j'ai que GCC passe dans certains drapeaux par défaut en lui-même qui est à l'origine du CCG à l'erreur de sortie:

  

/usr/local/arm/2.95.3/bin/arm-linux-gcc -specs = / home / Feroze / wnr834m / marvell_WNR834M / gcc_specs -D__KERNEL__ -I / home / Feroze / wnr834m / marvell_WNR834M / linux-88fxx81 -1_1_3_gtk / include -Wall -Wstrict-prototypes -Wno-trigraphes -Os -fno-strict-aliasing -fno-commun -DLED_DUAL_COLOR -DFOR_ROUTER -I / home / Feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk / arch / bras / mach-mv88fxx81 / Soc / gpp / -Uarm -fno-common -mapcs-32 -pipe -D__LINUX_ARM_ARCH __ = 5 -march = armv5 -mtune = arm9tdmi -mshort-charge-octets -msoft-float -Uarm -march = Strongarm - DKBUILD_BASENAME = principal -c -o init / main.o init / main.c   CC1: mauvaise valeur (Strongarm) pour -march = commutateur   faire [1]: *** [init / main.o] Erreur 1   faire [1]: Quitter le répertoire `/ home / Feroze / wnr834m / marvell_WNR834M / linux-88fxx81-1_1_3_gtk '

J'ai vérifié l'ensemble makefile, et ne pouvait pas trouver un endroit où LINUX_ARM_ARCH_5 et -march = armv5 sont définis. Je suis en train de définir -march = Strongarm dans le makefile, mais il obtient par Theh définit apposé ARMv5.

Alors, je créé un fichier defs de gcc, il a modifié uniquement des options pour ARMv4, puis utilisé en spécifiant l'-specs = option. Toutefois, cela ne marche pas toujours résoudre le problème.

Peut somemone aide? Comment puis-je résoudre ce problème?

Merci!

Feroze

Était-ce utile?

La solution

Le drapeau -march est situé dans arc / ARM / Makefile et dépend de la machine que vous avez sélectionné dans votre fichier de configuration. Si vous ne voulez pas le drapeau armv5, assurez-vous de sélectionner l'architecture correcte dans le fichier de configuration.

Vous devez supposer que le noyau CFLAGS en annexe sont à droite (à condition que votre config est ok) et si votre toolchain ne supporte pas l'un d'entre eux, alors vous avez pas d'autre choix que de franchir compiler une toolchain par vous-même, en utilisant le script crosstol d'origine qui devrait fonctionner avec 2.95.3

Edit: réponse originale
Qu'est-ce que vous essayez de construire? un 2.95.3 toolchain est assez ancienne. Vous devriez essayer une toolchain plus récente. Vous pouvez trouver un précompilé un Choisissez celui EABI pour commencer.

Ce n'est pas une réponse directe à votre problème, mais si vous construisez le noyau linux, vous ne devriez pas avoir besoin de jouer avec les Makefile. Vous obtiendrez plus d'aide si vous pouvez obtenir une plus toolchain « standard ».

Autres conseils

Ce ne sera pas strictement vous aider à ELIMINER la question, mais vous pouvez faire gcc -dM -E <empty_file.c> ou gcc -dM -E -x c /dev/null d'imprimer une liste de tous les #defines prédéfinies pour gcc. Associez -dM avec un autre drapeau comme votre -march et vous pourriez être en mesure de traquer ce qui cause votre problème de #define.

Assurez-vous de vérifier vos variables d'environnement, car ils peuvent persuader faire de faire des choses inattendues.

Si le Makefile inclut un autre fichier, il pourrait être modifier CFLAGS avant CC est appelée. Pouvez-vous imprimer le contenu de CFLAGS juste avant l'appel CC?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top