Page suivantePage pr�c�denteTable des mati�res

9. Comment configurer un compilateur crois� ?

9.1 Binaires existant

La chose la plus simple pour configurer un compilateur crois� est de t�l�charger les binaires. Pour les machines Linux/i386 et les cibles "big endian", les paquetages n�cessaires sont :

 binutils-mips-linux-2.8.1-1.i386.rpm
 egcs-c++-mips-linux-1.0.3a-1.i386.rpm
 egcs-g77-mips-linux-1.0.3a-1.i386.rpm
 egcs-libstdc++-mips-linux-2.8.0-1.i386.rpm
 egcs-mips-linux-1.0.3a-1.i386.rpm
 egcs-objc-mips-linux-1.0.3a-1.i386.rpm
Et voici la liste des paquetages pour les cibles "little endian" :

 binutils-mipsel-linux-2.8.1-1.i386.rpm
 egcs-c++-mipsel-linux-1.0.3a-1.i386.rpm
 egcs-g77-mipsel-linux-1.0.3a-1.i386.rpm
 egcs-libstdc++-mipsel-linux-2.8.0-1.i386.rpm
 egcs-mipsel-linux-1.0.3a-1.i386.rpm
 egcs-objc-mipsel-linux-1.0.3a-1.i386.rpm
Il n'est pas n�cessaire de tous les installer ; la plupart des personnes peuvent oublier les compilateurs C++, Objective C et Fortran 77. Les binaires pour Intel ont �t� link� avec la GNU libc 2.1, donc vous devez l'installer aussi pour une mise � jour.

9.2 Construire votre propre compilateur crois�

Avant toute chose, t�l�chargez les paquetages des sources et les patches :

Ce sont les versions actuellement recommand�es. Des versions plus anciennes peuvent marcher comme elles ne peuvent pas marcher. Si vous essayez d'utiliser des versions plus anciennes, ne nous envoyez pas de rapport de bug s'il vous pla�t ; nous n'y pr�terons pas attention. Lors de l'installation, veuillez proc�der dans l'ordre binutils, egcs, puis glibc. A moins que vous ayez des versions plus anciennes d�j� install�es, le fait de changer l'ordre fera �chouer l'installation. La description de l'installation suivante mentionne un certain nombre de patches que vous pouvez r�cup�rer � partir des paquetages SRPM respectifs sur oss.sgi.com. Cependant, puisque ces paquetages SRPM sont cens�s �tre compil�s dans la bonne architecture, il n'est pas possible de simplement les recompiler.

9.3 Espace disque n�cessaire

Vous devez choisir un r�pertoire pour l'installation. Je ferais r�f�rence � ce r�pertoire par <prefix>. Pour �viter certain probl�me, il vaut mieux utiliser la m�me valeur pour <prefix> que pour le gcc natif. Par exemple, si votre gcc est install� dans /usr/bin/gcc alors choisissez /usr pour <prefix>. Vous devez utiliser la m�me valeur de <prefix> pour tous les paquetages que vous allez installer.

Pendant l'installation, il vous faudra environ 31 Mo d'espace disque pour binutils ; pour l'installation il vous faudra 7 Mo d'espace disque sur la partition contenant <prefix>. La compilation d'egcs n�cesite 71 Mo et 14 Mo pour l'installation. GNU libc n�cessite 149 Mo d'espace disque pendant la compilation et 33 Mo pour l'installation. Notez que ces quantit�s ne sont que des indications et peuvent varier significativement pour diff�rentes architectures de processeurs et de syst�mes d'exploitation.

9.4 Ordre des octets

Une des fonctionnalit�s particuli�res des architectures MIPS est que tous les processeurs sauf le R8000 peuvent �tre configur� pour tourner en mode gros ou petit boutien (big ou little endian). L'ordre des octets indique la mani�re dont le processeur stocke en m�moire les nombres sur plusieurs octets. Les machines gros boutiens stockent l'octet de poids le plus fort � l'adresse la plus basse alors que les machines petits boutiens les stockent � l'adresse la plus haute. Pensez � cela lors de l'�criture de nombres sur plusieurs octets de gauche � droite ou vice-versa.

Pour configurer correctement votre compilateur crois�, vous devez conna�tre l'ordre des octets du compilateur crois� cible. Si vous ne le savez pas d�j�, consultez la section Hardware Platforms pour l'ordre des octets des machines.

9.5 Les noms de configuration

La plupart des paquetages bas�s sur autoconf supportent plusieurs architectures et syst�mes d'exploitation diff�rents. Pour diff�rencier chaque configuration, les noms sont construits selon les sch�mas <cpu>-<entreprise>-<SE> voire m�me <cpu>-<entreprise>-<noyau>-<SE>. Selon ces sch�mas, les noms de configuration de Linux/MIPS sont mips-unknown-linux-gnu pour les gros boutiens ou mipsel-unknown-linux-gnu pour les petits boutiens. Ces noms sont un peu long et il est permis de les abr�ger en mips-linux ou mipsel-linux. Vous devez utiliser les m�mes noms de configuration pour tous les paquetages qui comprennent votre environnement de compilateur crois�. Ainsi, bien que les autres noms comme mips-sni-linux ou mipsel-sni-linux sont les noms de configuration l�gaux, utilisez linux-mips ou mipsel-linux � la place ; ce sont les noms de configuration connu par les autres paquetages comme les sources du noyau Linux, autrement il devra �tre modifi� pour les compilations crois�es.

Je ferais maintenant r�f�rence au nom de configuration cible par <target>.

9.6 Installation de GNU binutils

Ceci est la premi�re partie et la plus simple - du moins si vous essayez de faire l'installation sur un quelconque UNIX sain. Entrez simplement dans un r�pertoire avec suffisamment d'espace disque et faites ce qui suit :

 gzip -cd binutils-<version>.tar.gz | tar xf -
 cd binutils-<version> patch -p1 < ../binutils-<version>-mips.patch
 ./configure --prefix=<prefix> --target=<target> make CFLAGS=-O2
 make install
Cela fonctionne tr�s bien habituellement. Sur certaines machines qui utilise GCC 2.7.x comme compilateur, on raporte des dump core. C'est un bug connu de GCC et peut �tre r�solu en mettant GCC � niveau � la version 2.8.1 ou en mettant � niveau egcs.

9.7 Assert.h

Des personnes poss�dent un vieux fichier d'en-t�te assert.h install�, probablement des restes d'une ancienne installation d'un compilateur crois�. Ce fichier a pour cons�quence de faire �chouer silencieuement les scripts autoconf ; il n'est jamais n�cessaire et il a �t� uniquement install� � cause d'un bug dans des versions plus anciennes de GCC. V�rifiez si le fichier <prefix>/<target>/include/assert.h existe dans votre installation. Si c'est le cas, effacez-le : il n'aurait jamais d� �tre install� pour une quelconque version du compilateur crois� et causera des perturbations.

9.8 Installation des sources du noyau

L'installation des sources du noyau est simple. Placez-les simplement dans un r�pertoire de votre choix et configurez-les. Leur configuration est n�cessaire pour que les fichiers qui sont g�n�r�s par la proc�dure soient install�s. Assurez-vous que vous ayez activ� CONFIG_CROSSCOMPILE vers la fin du processus de configuration. L'unique probl�me que vous pourriez rencontrer est d'avoir besoin d'installer des programmes GNU n�cessaires comme bash ou devoir �craser les versions de programmes fournies par le constructeur en pla�ant les versions GNU plus t�t dans la variables PATH.

Maintenant, allez dans le r�pertoire <prefix>/<target>/include et cr�ez deux liens symboliques nomm�s asm et linux pointant respectivement sur include/asm et include/linux dans vos sources du noyau qui viennent juste d'�tre install�s et configur�s. Ils sont n�cessaires pour que les fichiers d'en-t�tes n�cessaires soient trouv�s pendant l'�tape suivante.

9.9 Premi�re installation d'egcs

Maintenant la partie la moins rigolote commence : il existe un soit-disant probl�me d'amor�age. Dans notre cas, cela signifie que le processus d'installation d'egcs n�cessite une glibc pr�c�demment install�e, mais nous ne pouvons pas compiler glibc parce que nous ne poss�dons pas encore de compilateur crois�. Heureusement, vous devrez uniquement passer par l� lorsque vous installerez un compilateur crois� pour la premi�re fois. Plus tard, lorsque vous aurez d�j� install� la glibc les choses seront plus ais�es. Mais pour l'instant faites :

 gzip -cd egcs-1.0.3a.tar.gz | tar xf -
 cd egcs-<version> patch -p1 < ../egcs-1.0.3a-mips.patch
 ./configure --prefix=<prefix> --with-newlib --target=<target> make SUBDIRS="libiberty texinfo gcc" ALL_TARGET_MODULES= \
 CONFIGURE_TARGET_MODULES= INSTALL_TARGET_MODULES= LANGUAGES="c"
Notez que nous n'avons pas d�lib�rement compil� gcov, protoize, unprotoize et les biblioth�ques. Gcov n'a pas de sens dans un environnement de compilateur crois� et protoize et unprotoize �craserait carr�ment vos programmes natifs - c'est un bug dans les makefiles de gcc. Enfin, nous ne pouvons compiler les biblioth�ques parce que nous n'avons pas encore install� la glibc. Si tout ce passe avec succ�s, lancez l'installation avec :

 make SUBDIRS="libiberty texinfo gcc" INSTALL_TARGET_MODULES= \
 LANGUAGES="c" install
Si vous d�sirez le compilateur crois� pour compiler le noyau, vous avez finis. La compilation crois�e de la libc est maintenant n�cessaire pour pouvoir compiler les applications utilisateurs.

9.10 Tester ce que vous avez fait jusqu'ici

Simplement pour s'assurer que ce que vous avez fait jusqu'ici fonctionne, vous devriez maintenant essayer de compiler le noyau. Entrez dans les sources du noyau MIPS et tapez "make clean; make dep; make". Si tout se d�roule bien, faites un "make clean" une fois de plus pour nettoyer les sources.

9.11 L'installation de la GNU libc

Faites :

 gzip -cd glibc-2.0.6.tar.gz | tar xf -
 cd glibc-2.0.6
 gzip -cd glibc-crypt-2.0.6.tar.gz | tar xf -
 gzip -cd glibc-localedata-2.0.6.tar.gz | tar xf -
 gzip -cd glibc-linuxthreads-2.0.6.tar.gz | tar xf -
 patch -p1 < ../glibc-2.0.6-mips.patch
 mkdir build
 cd build
 CC=<target>-gcc BUILD_CC=gcc AR=<target>-ar RANLIB=<target>-ranlib \
 ../configure --prefix=/usr --host=<target> \
 --enable-add-ons=crypt,linuxthreads,localedata --enable-profile
 make
Vous avez maintenant une GNU libc compil�e qui doit encore �tre install�e. Ne faites pas un simple make install. Cela �craserait vos fichiers syst�me de votre machine par les fichiers sp�cifiques de Linux/MIPS avec des effets d�sastreux. A la place, installez la GNU libc dans un autre r�pertoire choisie arbitrairement <somedir> � partir du quel nous d�placerons dans le r�pertoire cible actuel les parties que nous avons besoin pour la compilation crois�e :

 make install_root=<somedir> install
Maintenant p�n�trez dans <somedir> et installez finalement la GNU libc manuellement

 cd usr/include
 find . -print | cpio -pumd <prefix>/<target>/include
 cd ../../lib
 find . -print | cpio -pumd <prefix>/<target>/lib
 cd ../usr/lib
 find . -print | cpio -pumd <prefix>/<target>/lib
La GNU libc contient aussi une vaste documentation en ligne. Votre syst�me doit d�j� poss�der une version de cette documentation, donc si vous ne d�sirez pas installer les pages infos ce qui vous sauvera un peu moins d'un mega octets, ou si vous les avez d�j� install�s, sautez la prochaine �tape :

 cd ../info
 gzip -9 *.info*
 find . -name \*.info\* -print | cpio -pumd <prefix>/info
Si vous n'avez pas de programme d'amorce, votre installation n'est pas finis

9.12 Recompilation d'egcs

La premi�re tentative de compilation d'egcs a �t� stopp�e par l'absence de la GNU libc. Puisque nous avons maintenant la libc d'install�e, nous pouvons reconstruire egcs mais cette fois de fa�on aussi compl�te que l'installation d'un compilateur crois� puisse l'�tre :

 gzip -cd egcs-<version>.tar.gz | tar xf -
 cd egcs-<version> patch -p1 < ../egcs-1.0.3a-mips.patch
 ./configure --prefix=<prefix> --target=<target> make LANGUAGES="c c++ objective-c f77"
Comme vous pouvez le constater, la proc�dure est identique que la premi�re fois sauf que nous avons laiss� tomb� l'option --with-newlib. Cette option �tait n�cessaire pour enlever l'arr�t de la compilation de libgcc � cause de l'absence de la libc. Maintenant lancez l'installation avec :

 make LANGUAGES="c c++ objective-c f77" install
Vous avez presque termin�. Si vous pensez ne pas avoir besoin des compilateurs Objective C ou F77, vous pouvez les enlever des commandes ci-dessus ; chacune vous sauvera environ 3 Mo. Ne compilez pas gcov, protoize ou unprotoize.

9.13 Dois-je compiler les compilateurs C++, Objective C ou F77 ? La r�ponse � cette question d�pend largement de l'utilisation que vous ferez de votre environnement de compilateur crois�. Si vous avez pour unique but de recompiler le noyau Linux alors vous n'avez pas besoin d'une configuration pleine � craquer et vous pouvez ommettre en toute s�curit� les compilateurs Objective C et F77. Vous devez, cependant, compiler le compilateur C++, parce que la compilation des biblioth�ques inclues avec la distribution d'egcs n�cessite C++.

9.14 Probl�me connu lors de compilation crois�e

Plantage d'IRIX

Origin 200 tournant sous IRIX 6.5.1 peut se planter lors d'un "make depend" dans les sources de noyau Linux. IRIX 6.5 sur un Indy et IRIX 6.5.4 sur un Origin 200 sont connus pour fonctionner correctement. Tout rapports pour aider � isoler le probl�me de configuration est la bienvenue.

Ressources limit�es sur les machines bas�es sur le standard System V

Les Unix bas�s sur le standard System V comme IRIX ou Solaris ont des valeurs limites maximum sur les nombres d'argument pouvant �tre pass�s � un processus enfant qui peuvent �tre d�pass�s lors de la compilation crois�e de logiciels comme le noyau Linux ou la GNU libc. Pour les syst�mes IRIX, la taille maximum de la liste d'arguments vaut par d�faut 20 Ko alors la valeur par d�faut pour Linux est d'au moins 128 Ko. Cette taille peut �tre modifi� par la commande "systune ncargs 131072" sous root.

9.15 GDB

La compilation de GDB comme debugeur crois� a uniquement d'int�r�t pour les d�veloppeurs du noyau ; leur GDB peut leur sauver la vie. Une telle configuration de debugage distant est compos�e de deux parties : le debugeur GDB distant fonctionnant sur une machine et la machine cible faisant tourner le noyau Linux/MIPS qui doit �tre d�bugu�. Les machines sont habituellement inter-connect�es par une ligne s�rie. Le noyau de la machine cible doit �tre �quip� d'un "embryon de d�bugage" qui communique avec le GDB de la machine h�te en utilisant le protocole s�rie distant.

Suivant l'architecture cible, il vous faudra impl�menter l'embryon de d�bugage vous-m�me. En g�n�ral, vous devrez uniquement �crire des routines s�ries tr�s simple. La t�che est, de plus, simplifi�e par le fait que la plupart des machines utilisent des p�riph�riques s�ries semblables, en g�n�ral bas� sur le 8250, le 16450 ou des d�riv�s.


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:31