Question

Je suis intéressé par la compilation croisée d'un noyau Linux pour une cible ARM sur un hôte x86. Y a-t-il des bonnes pratiques que vous recommandez? Quelle est la meilleure suite de compilation croisée à votre avis? Avez-vous mis en place un environnement de compilation croisée personnalisé? Si oui, quels conseils avez-vous? Est-ce une bonne idée?

Était-ce utile?

La solution

J'ai utilisé deux approches pour les outils ARM / Linux. Le plus simple est de télécharger directement une chaîne d’outils pré-construite.
Pro : ça fonctionne et vous pouvez continuer avec la partie intéressante de votre projet
Con : vous ne pouvez utiliser que la version de gcc / binutils / libc choisie

.

Si les dernières questions vous intéressent, consultez crosstool-ng . Ce projet est un outil de configuration similaire à l'application de configuration du noyau Linux. Définissez les versions de gcc, binutils, libc (GNU ou uCLibc), thread et le noyau Linux à construire et crosstool-ng effectuant le reste (c.-à-d. Télécharge les balles tar, configure les outils et les construit).
Pro : vous obtenez exactement ce que vous avez sélectionné lors de la configuration
Con : vous obtenez exactement ce que vous avez sélectionné lors de la configuration

signifie que vous assumez l'entière responsabilité du choix du compilateur / binutil / libc et de leurs fonctionnalités / carences / bugs associés. En outre, comme mentionné dans les commentaires, il existe des & "; Douleur &"; impliqué dans la sélection des versions de binutils, de la bibliothèque C, etc., car toutes les combinaisons ne fonctionnent pas nécessairement ensemble ou ne sont pas construites.

Une approche hybride pourrait consister à commencer par les outils préconfigurés et à les remplacer ultérieurement par une solution personnalisée via crosstool-ng si nécessaire.

Mise à jour : la réponse utilisait à l'origine les outils CodeSourcery pour un exemple d'une chaîne d'outils pré-construite. Les outils CodeSourcery pour ARM étaient libres de télécharger Mentor Graphics , mais ils portent désormais le nom de Sourcery CodeBench et doivent être achetés auprès de Mentor Graphics. D’autres options incluent désormais Linaro , ainsi que des outils de distribution spécifiques à Android, Ubuntu et autres.

Autres conseils

J'utilise la chaîne d'outils emdebian pour la compilation de choses pour mes machines ARM qui ne sont pas heureuses d'être compilées de manière native dans les petites ressources disponibles (/ moi jette un regard noir au noyau). Le paquet principal est gcc-4.X-arm-linux-gnueabi (X = 1, 2, 3) et fournit les commandes gcc / cpp / ld / etc suffixées. J'ajoute ceci à mon sources.list:

deb http://www.emdebian.org/debian/ unstable main

Bien sûr, si vous n'utilisez pas Debian, ce n'est probablement pas si utile, mais par gomme , cela fonctionne bien pour moi.

J'ai utilisé scratchbox lors de la création d'applications pour maemo (Nokia N810), qui utilise un bras processeur. Soi-disant, scratchbox ne se limite pas au développement maemo.

J'ai utilisé Crosstool sur plusieurs cibles. C'est génial tant que vous voulez construire votre chaîne d'outils à partir de zéro. Bien sûr, il existe plusieurs chaînes d’outils prédéfinies pour les armes, il suffit de les rechercher sur Google - trop pour les mentionner ici.

1) À mon avis, la création de votre propre chaîne d’outils fonctionne le mieux. Vous finissez par avoir un contrôle strict sur tout. De plus, si vous débutez avec linux intégré, vous vivrez une expérience d'apprentissage exceptionnelle.

2) Ne partez pas avec une chaîne d’outils commerciale. Même si vous ne voulez pas prendre le temps de créer le vôtre, il existe des alternatives gratuites.

Si votre entreprise dépensera de l'argent, demandez-lui de vous acheter un débogueur Jtag.
Cela vous fera gagner beaucoup de temps et vous permettra d’apprendre et de suivre facilement les étapes de démarrage du noyau, etc. Je recommande fortement d'utiliser les produits Lauterbach ... Ils fonctionnent avec une tonne de cibles et le logiciel est multi-plateforme. Leur soutien est également excellent.

Si vous ne parvenez pas à obtenir un débogueur jtag et que vous travaillez dans le noyau, utilisez un ordinateur virtuel pour le faire, utilisez le mode linux, vmware..etc .. votre code sera débogué sous x86 .. en le portant sur votre La cible du bras sera une autre histoire, mais c’est un moyen moins coûteux d’éliminer certains bugs.

Si vous portez un chargeur de démarrage, utilisez uboot. Bien sûr, si vous utilisez une plate-forme de référence, vous ferez probablement mieux d'utiliser ce qu'ils fournissent avec le BSP.

J'espère que cela aide.

Buildroot est un outil avec lequel j'ai eu assez de chance pour créer une chaîne d'outils personnalisée basée sur uClibc à partir de rayure. Il est très personnalisable et n’explique pas trop la distribution sur laquelle vous vous trouvez.

De plus, bon nombre de ses utilisateurs existants (c'est-à-dire les distributions de routeur intégrées) ciblent également ARM.

Si vous utilisez Gentoo, obtenir un ensemble d'outils de compilation croisée est aussi simple que

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

ARCH est arm ou armeb, VENDOR est unknown ou softfloat, OS est linux et LIBC est gnu ou uclibc.

Si tout ce que vous voulez, c'est un compilateur (et un éditeur de liens) pour le noyau, la partie -s1 n'a aucune pertinence et vous pouvez utiliser --stage1 / crossdev pour informer binutils que vous avez uniquement besoin de gcc et <=>.

C’est ce qu’Eurotech utilise pour son compte Debian ARM. la distribution. Vous remarquerez qu'ils ne recommandent pas d'utiliser un compilateur croisé si vous pouvez l'éviter. Compiler sur la cible elle-même a tendance à être un moyen plus fiable d'obtenir des sorties que vous savez être exécutées.

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