Création et installation d’une toolchain native pour processeur Arm

Publié par cpb
Juil 01 2011

Certains projets posent des problèmes difficiles à surmonter lorsqu’il s’agit de les cross-compiler pour une plate-forme différente du poste de compilation. Citons par exemple Apache ou PHP que nous avons laborieusement réussi à cross-compiler dans les quatrième et cinquième articles de notre série « Construire son système personnel sur Pandaboard« . Il peut être utile de disposer sur la cible embarquée d’une chaîne de compilation native c’est-à-dire capable de produire du code exécutable pour le processeur sur lequel la compilation a eu lieu.

Nous allons mettre ceci en oeuvre sur une carte à processeur Arm à l’aide de Buildroot.

Je vous propose de procéder en deux étapes : génération de la chaîne de compilation croisée classique, puis une fois celle-ci prête, construction de la chaîne de compilation native. Comme toujours, il faudra intervenir un peu manuellement pour réussir toute la compilation…

Tout d’abord téléchargeons et décompressons les sources de Buildroot :

[~]$ mkdir Projets/Arm/
[~]$ cd Projets/Arm/
[Arm]$ wget http://buildroot.uclibc.org/downloads/buildroot-2011.05.tar.bz2
--2011-06-30 23:22:45--  http://buildroot.uclibc.org/downloads/buildroot-2011.05.tar.bz2
[...]
2011-06-30 23:22:50 (522 KB/s) - «buildroot-2011.05.tar.bz2» sauvegardé [1834679/1834679]
[Arm]$ tar -xjf buildroot-2011.05.tar.bz2
[Arm]$ cd buildroot-2011.05
[buildroot-2011.05]$

Je vous propose de télécharger ce fichier de configuration qui va générer la chaîne de compilation croisée et installer dans les répertoires destinés à la cible les fichiers d’entête de la bibliothèque C (option Development files in target filesystem du menu Build Options ci-dessous).

[buildroot-2011.05]$ cp ~/config-buildroot-2011-05-pass-1 ./.config
[buildroot-2011.05]$ make menuconfig
[...]

Vérifiez en particulier les chemins mentionnés dans le menu « Build Options », pour qu’il soient en accord avec votre système. Le répertoire « Host Dir » doit être un chemin absolu (il contiendra donc probablement votre nom d’utilisateur plutôt que le mien !). Quittez le menu et lancez la compilation :

[buildroot-2011.05]$ make
[...]

Pendant la compilation, make nous pose une dizaines de questions (probablement de nouvelles options qui ne sont pas enregistrées dans le fichier .config), auxquelles nous pouvons répondre en utilisant le choix par défaut, c’est-à-dire en pressant simplement Entrée.

[...]
		grep -qx $lang /home/cpb/Projets/Arm/buildroot-2011.05/output/build/locales.nopurge || rm -rf $dir/$lang; 
	done; 
done
rm -f /home/cpb/Projets/Arm/buildroot-2011.05/output/build/.fakeroot*
[buildroot-2011.05]$

La première étape est terminée nous avons une chaîne de compilation croisée, contenant GCC, accessible ainsi :

[buildroot-2011.05]$ ~/Projets/Arm/Target/usr/bin/arm-linux-gcc -v
Utilisation des specs internes.
Target: arm-unknown-linux-uclibcgnueabi
Configuré avec: /home/cpb/Projets/Arm/buildroot-2011.05/output/toolchain/gcc-4.3.5/configure --prefix=/home/cpb/Projets/Arm/Target/usr --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++ --with-sysroot=/home/cpb/Projets/Arm/Target/usr/arm-unknown-linux-uclibcgnueabi/sysroot --with-build-time-tools=/home/cpb/Projets/Arm/Target/usr/arm-unknown-linux-uclibcgnueabi/bin --disable-__cxa_atexit --enable-target-optspace --disable-libgomp --with-gnu-ld --disable-libssp --disable-multilib --disable-tls --enable-shared --with-gmp=/home/cpb/Projets/Arm/Target/usr --with-mpfr=/home/cpb/Projets/Arm/Target/usr --enable-threads --disable-decimal-float --with-abi=aapcs-linux --with-pkgversion='Buildroot 2011.05' --with-bugurl=http://bugs.buildroot.net/
Modèle de thread: posix
gcc version 4.3.5 (Buildroot 2011.05)
[buildroot-2011.05]$

Passons à la seconde phase, la compilation d’un environnement de développement natif pour notre système embarqué en utilisant ce fichier de configuration.

[buildroot-2011.05]$ cp ../config-buildroot-2011-05-pass-2 ./.config
[buildroot-2011.05]$ make menuconfig

Vous pourrez remarquer que nous avons inséré plusieurs outils de développement comme Bison, Flex, Make, Gcc, et même l’interpréteur Microperl, qui comme son nom l’indique implémente un sous-ensemble (assez conséquent) du langage Perl.

[buildroot-2011.05]$ make 
[...]
-DDEPENDS_ON_LIBINTL=1 -DEXEEXT="" -Os -pipe -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c csharpcomp.c -o csharpcomp.o >/dev/null 2>&1
make[5] : on quitte le répertoire « /home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1/gettext-tools/gnulib-lib »
make[4]: *** [all] Erreur 2
make[4] : on quitte le répertoire « /home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1/gettext-tools/gnulib-lib »
make[3]: *** [all-recursive] Erreur 1
make[3] : on quitte le répertoire « /home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1/gettext-tools »
make[2]: *** [all] Erreur 2
make[2] : on quitte le répertoire « /home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1/gettext-tools »
make[1]: *** [all-recursive] Erreur 1
make[1] : on quitte le répertoire « /home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1 »
make: *** [/home/cpb/Projets/Arm/buildroot-2011.05/output/build/gettext-0.16.1/gettext-runtime/src/gettext] Erreur 2
[buildroot-2011.05]$

Comment ? Une erreur de compilation ? Quelle surprise !

La cause apparait un peu plus haut dans les traces :

 /home/cpb/Projets/Arm/Target/usr/bin/arm-unknown-linux-uclibcgnueabi-gcc -DHAVE_CONFIG_H -DEXEEXT="" -DEXEEXT="" -I. -I.. -I../intl -I../intl -I../intl -I.. -I.. -DDEPENDS_ON_LIBICONV=1 -DDEPENDS_ON_LIBINTL=1 -DEXEEXT="" -Os -pipe -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c copy-file.c  -fPIC -DPIC -o .libs/copy-file.o
copy-file.c:35:25: error: sys/utime.h: No such file or directory
make[5]: *** [copy-file.lo] Erreur 1

Un fichier utime.h ne se trouve pas dans le bon répertoire. Classique. Cherchons-le.

[buildroot-2011.05]$ find . -name 'utime.h'
./output/toolchain/uClibc-0.9.31/include/utime.h
./output/toolchain/uClibc_dev/usr/include/linux/utime.h
./output/toolchain/linux/include/linux/utime.h
./output/toolchain/linux-2.6.38.7/include/linux/utime.h
[buildroot-2011.05]$

Nous ne prendrons pas les deux dernières instances, elles sont réservées à la compilation de modules du noyau, mais plutôt la première. A présent nous voyons que le compilateur cherche ce fichier dans un sous-répertoire sys/ or il n’y en a pas dans les répertoires de recherches des fichiers d’entête lors de la compilation de copy-file.c.
Nous allons devoir faire une petite opération manuelle avant de relancer la compilation.

[buildroot-2011.05]$ mkdir -p output/build/gettext-0.16.1/gettext-tools/gnulib-lib/sys
[buildroot-2011.05]$ cp output/toolchain/uClibc-0.9.31/include/utime.h output/build/gettext-0.16.1/gettext-tools/gnulib-lib/sys/
[buildroot-2011.05]$ make

A vrai dire, la commande make s’est à nouveau interrompue en erreur sur mon système. Toutefois, soupçonnant une erreur due à la compilation en parallèle (8 jobs), j’ai relancé simplement make qui a fonctionné.

[...]
do 
		grep -qx $lang /home/cpb/Projets/Arm/buildroot-2011.05/output/build/locales.nopurge || rm -rf $dir/$lang; 
	done; 
done
rm -f /home/cpb/Projets/Arm/buildroot-2011.05/output/build/.fakeroot*
[buildroot-2011.05]$ ls output/target/usr/bin/
addr2line  as     c++  c++filt  elfedit  g++  gccbug  gprof  ld      ldd   microperl  objcopy  perl    readelf  strings  yacc
ar         bison  cc   cpp      flex     gcc  gcov    iconv  ld.bfd  make  nm         objdump  ranlib  size     strip
[buildroot-2011.05]$ file output/target/usr/bin/gcc
output/target/usr/bin/gcc: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
[buildroot-2011.05]$

Pour tester notre toolchain native, nous allons l’installer sur un système Pandaboard, contenant simplement un noyau Linux et une Busybox intrégrant une connexion à distante par telnet. Après avoir inséré la carte micro-SD sur mon PC, je vais copier le contenu du répertoire ~/Projets/Arm/buildroot-2011.05/output/target/usr/ sur la cible :

[buildroot-2011.05]$ cp -R output/target/usr/* /media/root/usr/
[buildroot-2011.05]$ umount /media/root/
[buildroot-2011.05]$

Après avoir inséré la micro-SD dans la carte Pandaboard, laissons-la booter, puis connectons-nous dessus via le réseau.

[buildroot-2011.05]$ telnet 192.168.3.152
Trying 192.168.3.152...
Connected to 192.168.3.152.
(none) login: root
Password:
BusyBox v1.18.4 (2011-06-22 12:27:46 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
[PANDABOARD]$  vi /root/hello.c

A l’aide du petit éditeur vi intégré dans Busybox, nous saissons un petit programme de test

#include <stdio.h>

int main(void)
{
        fprintf(stdout, "Hello from the native Panda Compiler !n");
        return 0;
}

Que nous compilons ainsi :

[PANDABOARD]$ gcc /root/hello.c -o /root/hello
[PANDABOARD]$ /root/hello
Hello from the native Panda Compiler !
[PANDABOARD]$

Voilà ! notre compilateur natif est prêt. Il manque encore quelques utilitaires pour se lancer dans une compilation de plus grande envergure (le noyau Linux par exemple), nous les verrons la semaine prochaine.

PS : Cet article est plus court que d’habitude, mais cette période est très chargée pour moi : plusieurs développements importants arrivant à leurs termes, un déménagement, et quelques nouveaux projets traitant de robotique et de micro-contrôleurs (que je développerai prochainement)…

17 Réponses

  1. David dit :

    Hello,

    Merci pour ces supers tutos, pourriez-vous corriger car les liens de fichiers de configs ne pointent nul part !

    Merci encore et au plaisir de vous lire !
    Salutations.

    David

    • cpb dit :

      Voila qui est fait.
      J’avais nommé par inadvertance les fichiers config-buildroot-2010-XXX au lieu de config-buildroot-2011-XXX.
      Merci de m’avoir signalé cette erreur.

  2. johann dit :

    Bonjour,
    je viens juste d’acquerir une pandaboard et je tente de construire dans un premier temps une toolchain adaptée.
    Je suit votre démarche mais je me trouve confronté à l’erreur suivante:
    « make: *** No rule to make target `host-gettext’, needed by `host-binutils-depends’. Stop. »
    La description n’est pas documenté et lorsque je trouve quelque chose cela ne résout pas le problème.
    J’utilise un disque dur externe pour le developpement, j’ai écrit une régle ‘udev’ qui me permet de monter le hdd avec un nom prédéfinit en utilisant son ‘UUID’. J’ai donc adpaté les chemins vers l’endroit où se trouve ma version de BR (2011.11).
    Que faudrait-il modifier ou adapter pour résoudre se problème. En cherchant sur le site de BR j’ai trouvé dans le très mince FAQ un rapport à la gestion de ‘LOCALE’ et j’ai donc activé 2 autres règles en conséquence mais le résultat reste similaire!
    Des idées.

    Merci d’avance.

    • cpb dit :

      A priori il manque sur votre système de développement le package « gettext ».

      Essayez de l’installer avec apt-get (pour Debian/Ubuntu/…) ou yum (pour Fedora/RedHat/CentOs/…)

  3. johann dit :

    Après quelques soucis avec mon disque dur! (fct économie d’énergie réduit grandement la durée de vie). J’ai tenté de reproduire les memes conditions tout en re-installant « gettext » mais j’ai obtenu des erreurs jusqu’a obtenir une combinaison entre les différentes versions:
    2.6.3 Kernel Headers
    0.9.32 uClibc
    2.20 Binutils
    4.5 gcc
    Dans le cas contraire les « locales » sont intégrés et générent une erreur de compil.
    Une fois cette TC basique obtenue je ré-active le support de l’i18n et lance un
    > make V=1
    qui me permet d’obtenir une TC avec les « locales » intégrés cette fois-ci.
    Il semble que le problème vienne de la combinaisons des versions.

  4. Niolak dit :

    Bonjour,

    J’ai un petit souci avec ma Pandaboard : tout se passe bien jusqu’au moment où je copie output/target/usr/* sur la carte SD. Je n’ai pas d’erreur, mais lorsque je démarre la Pandaboard, elle ne connait pas gcc…

    Si je fais ls -l /usr/bin/ , il y a bien gcc (et les autres), avec les mêmes droits que les scripts shell que j’ai fait à la main et qui marchent, et pourtant si je fais /usr/bin/gcc, j’obtiens « -sh: /usr/bin/gcc: not found ». Je ne vois vraiment pas d’où ça peut venir… Une idée ?

    Merci d’avance !

    • cpb dit :

      Je pense qu’il faut juste configurer le PATH dans /etc/profile pour qu’il contienne le répertoire /usr/bin.

      /etc/profile:
      PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
      
      • Niolak dit :

        Merci pour cette réponse rapide, mais ça ne vient pas de là, /etc/profile contient déjà ce qu’il faut.

        Par contre, bien que j’obtienne ce qu’il faut quand je fais « file output/target/usr/bin/gcc » (à savoir ELF 32bits executable), il me dit « not an ELF file » quand je lance la commande host/usr/bin/ldd dessus. J’avoue que je suis un peu perdu du coup.

        • cpb dit :

          Peut-être est-ce dû à un problème de bibliothèques.

          J’ai déjà remarqué que arm-linux-ldd ne marche pas bien si la cible est 32 bits et l’hôte 64 bits (est-ce le cas ?).
          On peut obtenir la liste des bibliothèques dynamiques en utilisant arm-linux-readelf -d (arm-linux-readelf est dans la cross-toolchain). Elles sont indiquées en haut du contenu de la section dynamique.

          Les bibliothèques nécéssaires sont-elles bien présentes ?

          • Niolak dit :

            Oui, j’ai pensé aussi à un problème de bibliothèques, c’est pour ça que j’ai tenté de lancer ldd et que j’ai découvert qu’il ne fonctionnait pas. Et effectivement je suis en 64 bits.

            J’ai donc continué à chercher, j’ai lancé arm-linux-readelf -d et j’ai découvert qu’effectivement il manquait une bibliothèque nécessaire : libc.so.0 . Le problème, c’est que du coup je l’ai copié, j’ai rebooté la Panda, et le problème persiste… Rien n’a changé au niveau du comportement de la bête. Donc c’est sans doute quand même mieux avec la bibliothèque libc.so mais ça ne se voit pas :S .

          • cpb dit :

            Je suis en train de me re-créer la même configuration pour vérifier.
            Libc.so.0 est normalement un lien symbolique vers libuClibc-xxx.so. Pas de souci de ce côté là ?

          • Niolak dit :

            Merci de prendre autant de temps pour moi, au final je viens de trouver une solution qui résout le problème :
            il suffisait de copier output/target/lib/* en plus de output/target/usr/*

            Par contre, maintenant que gcc se lance, il ne trouve pas . Je l’ai cherché avec find et il est présent dans le dossier /usr/include/c++/tr1/. Je suppose que c’est le bon, mais comment lui dire d’aller le chercher là-bas ?

          • cpb dit :

            J’ai fait un essai qui fonctionne (avec Buildroot-2012-05 au lieu de 2011-05) sur une carte RaspberryPi au lieu de la Pandaboard.
            A la fin de la compilation j’ai copié tout le contenu de output/target/usr sur la cible. J’y trouve donc les fichiers suivants

            # cd /
            # ls -lr usr/
            usr/:
            total 28
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 arm-unknown-linux-uclibcgnueabi
            drwxrwxr-x    2 rpi      rpi           4096 Jan  1 00:01 bin
            drwxr-xr-x   25 root     root          4096 Jan  1 00:01 include
            drwxrwxr-x    4 rpi      rpi           4096 Jan  1 00:01 lib
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 libexec
            drwxrwxr-x    2 rpi      rpi           4096 Aug 23  2012 sbin
            drwxr-xr-x    5 root     root          4096 Jan  1 00:01 share
            
            usr/arm-unknown-linux-uclibcgnueabi:
            total 4
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 bin
            
            usr/arm-unknown-linux-uclibcgnueabi/bin:
            total 1952
            -rwxr-xr-x    2 root     root         41768 Aug 23  2012 ar
            -rwxr-xr-x    2 root     root        433928 Aug 23  2012 as
            -rwxr-xr-x    4 root     root        437120 Aug 23  2012 ld
            -rwxr-xr-x    4 root     root        437120 Aug 23  2012 ld.bfd
            -rwxr-xr-x    2 root     root         31100 Aug 23  2012 nm
            -rwxr-xr-x    2 root     root        160808 Aug 23  2012 objcopy
            -rwxr-xr-x    2 root     root        212688 Aug 23  2012 objdump
            -rwxr-xr-x    2 root     root         41776 Aug 23  2012 ranlib
            -rwxr-xr-x    2 root     root        160812 Aug 23  2012 strip
            
            usr/bin:
            total 6372
            -rwxr-xr-x    1 root     root         21004 Aug 23  2012 addr2line
            -rwxr-xr-x    2 root     root         41768 Aug 23  2012 ar
            -rwxr-xr-x    2 root     root        433928 Aug 23  2012 as
            -rwxr-xr-x    2 root     root        202784 Aug 23  2012 c++
            -rwxr-xr-x    1 root     root         19440 Aug 23  2012 c++filt
            lrwxrwxrwx    1 root     root             3 Jan  1 00:01 cc -> gcc
            -rwxr-xr-x    1 root     root        201368 Aug 23  2012 cpp
            -rwxr-xr-x    1 root     root         18564 Aug 23  2012 elfedit
            -rwxr-xr-x    2 root     root        202784 Aug 23  2012 g++
            -rwxr-xr-x    1 root     root        200232 Aug 23  2012 gcc
            -rwxr-xr-x    1 root     root         16391 Aug 23  2012 gccbug
            -rwxr-xr-x    1 root     root         26128 Aug 23  2012 gcov
            -rwxr-xr-x    1 root     root       2824748 Aug 23  2012 gdb
            -rwxr-xr-x    1 root     root        178056 Aug 23  2012 gdbserver
            -rwxr-xr-x    1 root     root         15376 Aug 23  2012 getconf
            -rwxr-xr-x    1 root     root         76248 Aug 23  2012 gprof
            -rwxr-xr-x    1 root     root          5020 Aug 23  2012 iconv
            -rwxr-xr-x    4 root     root        437120 Aug 23  2012 ld
            -rwxr-xr-x    4 root     root        437120 Aug 23  2012 ld.bfd
            -rwxr-xr-x    1 root     root          7516 Aug 23  2012 ldd
            -rwxr-xr-x    1 root     root        130444 Aug 23  2012 make
            -rwxr-xr-x    2 root     root         31100 Aug 23  2012 nm
            -rwxr-xr-x    2 root     root        160808 Aug 23  2012 objcopy
            -rwxr-xr-x    2 root     root        212688 Aug 23  2012 objdump
            -rwxr-xr-x    2 root     root         41776 Aug 23  2012 ranlib
            -rwxr-xr-x    1 root     root        258284 Aug 23  2012 readelf
            -rwxr-xr-x    1 root     root         22476 Aug 23  2012 size
            -rwxr-xr-x    1 root     root         22480 Aug 23  2012 strings
            -rwxr-xr-x    2 root     root        160812 Aug 23  2012 strip
            
            usr/include:
            total 1688
            [ des centaines de fichiers d'en-tête avec l'extension .h ou non, dans des dizaines de sous-répertoires ... ]
            
            usr/lib:
            total 17488
            -rw-r--r--    1 root     root          1036 Aug 23  2012 Scrt1.o
            -rw-r--r--    1 root     root           964 Aug 23  2012 crt1.o
            -rw-r--r--    1 root     root           983 Aug 23  2012 crti.o
            -rw-r--r--    1 root     root           967 Aug 23  2012 crtn.o
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 gcc
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 ldscripts
            -rwxr-xr-x    1 root     root        550808 Aug 23  2012 libbfd-2.21.1.so
            -rw-r--r--    1 root     root        641940 Aug 23  2012 libbfd.a
            -rwxr-xr-x    1 root     root          1100 Aug 23  2012 libbfd.la
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libbfd.so -> libbfd-2.21.1.so
            -rw-r--r--    1 root     root       1442060 Aug 23  2012 libc.a
            lrwxrwxrwx    1 root     root             6 Jan  1 00:01 libc_pic.a -> libc.a
            -rw-r--r--    1 root     root         11598 Aug 23  2012 libcrypt.a
            lrwxrwxrwx    1 root     root            10 Jan  1 00:01 libcrypt_pic.a -> libcrypt.a
            lrwxrwxrwx    1 root     root            12 Jan  1 00:01 libcurses.a -> libncurses.a
            -rw-r--r--    1 root     root         21500 Aug 23  2012 libdl.a
            lrwxrwxrwx    1 root     root             7 Jan  1 00:01 libdl_pic.a -> libdl.a
            -rw-r--r--    1 root     root         83602 Aug 23  2012 libform.a
            -rwxr-xr-x    1 root     root        108948 Aug 23  2012 libgettextlib-0.16.1.so
            -rw-r--r--    1 root     root        184862 Aug 23  2012 libgettextlib.a
            -rwxr-xr-x    1 root     root          1127 Aug 23  2012 libgettextlib.la
            lrwxrwxrwx    1 root     root            23 Jan  1 00:01 libgettextlib.so -> libgettextlib-0.16.1.so
            -rw-r--r--    1 root     root        314776 Aug 23  2012 libgettextpo.a
            -rwxr-xr-x    1 root     root          1109 Aug 23  2012 libgettextpo.la
            lrwxrwxrwx    1 root     root            21 Jan  1 00:01 libgettextpo.so -> libgettextpo.so.0.3.0
            lrwxrwxrwx    1 root     root            21 Jan  1 00:01 libgettextpo.so.0 -> libgettextpo.so.0.3.0
            -rwxr-xr-x    1 root     root        194576 Aug 23  2012 libgettextpo.so.0.3.0
            -rwxr-xr-x    1 root     root        171768 Aug 23  2012 libgettextsrc-0.16.1.so
            -rw-r--r--    1 root     root        269020 Aug 23  2012 libgettextsrc.a
            -rwxr-xr-x    1 root     root          1287 Aug 23  2012 libgettextsrc.la
            lrwxrwxrwx    1 root     root            23 Jan  1 00:01 libgettextsrc.so -> libgettextsrc-0.16.1.so
            -rw-r--r--    1 root     root        808388 Aug 23  2012 libgmp.a
            -rwxr-xr-x    1 root     root          1168 Aug 23  2012 libgmp.la
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libgmp.so -> libgmp.so.10.0.4
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libgmp.so.10 -> libgmp.so.10.0.4
            -rwxr-xr-x    1 root     root        324448 Aug 23  2012 libgmp.so.10.0.4
            -rw-r--r--    1 root     root        239916 Aug 23  2012 libiberty.a
            -rw-r--r--    1 root     root         57428 Aug 23  2012 libintl.a
            -rw-r--r--    1 root     root           920 Aug 23  2012 libintl.la
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libintl.so -> libintl.so.8.0.1
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libintl.so.8 -> libintl.so.8.0.1
            -rw-r--r--    1 root     root         28076 Aug 23  2012 libintl.so.8.0.1
            -rw-r--r--    1 root     root        182082 Aug 23  2012 libm.a
            lrwxrwxrwx    1 root     root             6 Jan  1 00:01 libm_pic.a -> libm.a
            -rw-r--r--    1 root     root         47084 Aug 23  2012 libmenu.a
            -rw-r--r--    1 root     root        138052 Aug 23  2012 libmpc.a
            -rwxr-xr-x    1 root     root          1048 Aug 23  2012 libmpc.la
            lrwxrwxrwx    1 root     root            15 Jan  1 00:01 libmpc.so -> libmpc.so.2.0.0
            lrwxrwxrwx    1 root     root            15 Jan  1 00:01 libmpc.so.2 -> libmpc.so.2.0.0
            -rwxr-xr-x    1 root     root         60684 Aug 23  2012 libmpc.so.2.0.0
            -rw-r--r--    1 root     root        607964 Aug 23  2012 libmpfr.a
            -rwxr-xr-x    1 root     root          1123 Aug 23  2012 libmpfr.la
            lrwxrwxrwx    1 root     root            16 Jan  1 00:01 libmpfr.so -> libmpfr.so.4.1.0
            -rwxr-xr-x    1 root     root        303628 Aug 23  2012 libmpfr.so.4.1.0
            -rw-r--r--    1 root     root        356466 Aug 23  2012 libmudflap.a
            -rwxr-xr-x    1 root     root           956 Aug 23  2012 libmudflap.la
            lrwxrwxrwx    1 root     root            19 Jan  1 00:01 libmudflap.so -> libmudflap.so.0.0.0
            lrwxrwxrwx    1 root     root            19 Jan  1 00:01 libmudflap.so.0 -> libmudflap.so.0.0.0
            -rwxr-xr-x    1 root     root         98600 Aug 23  2012 libmudflap.so.0.0.0
            -rw-r--r--    1 root     root        289112 Aug 23  2012 libmudflapth.a
            -rwxr-xr-x    1 root     root           970 Aug 23  2012 libmudflapth.la
            lrwxrwxrwx    1 root     root            21 Jan  1 00:01 libmudflapth.so -> libmudflapth.so.0.0.0
            lrwxrwxrwx    1 root     root            21 Jan  1 00:01 libmudflapth.so.0 -> libmudflapth.so.0.0.0
            -rwxr-xr-x    1 root     root        105336 Aug 23  2012 libmudflapth.so.0.0.0
            -rw-r--r--    1 root     root        313624 Aug 23  2012 libncurses.a
            lrwxrwxrwx    1 root     root            17 Jan  1 00:01 libncurses.so -> libncurses.so.5.7
            lrwxrwxrwx    1 root     root            17 Jan  1 00:01 libncurses.so.5 -> libncurses.so.5.7
            -rwxr-xr-x    1 root     root        150924 Aug 23  2012 libncurses.so.5.7
            -rw-r--r--    1 root     root           960 Aug 23  2012 libnsl.a
            lrwxrwxrwx    1 root     root             8 Jan  1 00:01 libnsl_pic.a -> libnsl.a
            -rwxr-xr-x    1 root     root        102860 Aug 23  2012 libopcodes-2.21.1.so
            -rw-r--r--    1 root     root         98168 Aug 23  2012 libopcodes.a
            -rwxr-xr-x    1 root     root          1067 Aug 23  2012 libopcodes.la
            lrwxrwxrwx    1 root     root            20 Jan  1 00:01 libopcodes.so -> libopcodes-2.21.1.so
            -rw-r--r--    1 root     root         19520 Aug 23  2012 libpanel.a
            -rw-r--r--    1 root     root        226314 Aug 23  2012 libpthread.a
            -rw-r--r--    1 root     root          1188 Aug 23  2012 libpthread_nonshared.a
            lrwxrwxrwx    1 root     root            22 Jan  1 00:01 libpthread_nonshared_pic.a -> libpthread_nonshared.a
            lrwxrwxrwx    1 root     root            12 Jan  1 00:01 libpthread_pic.a -> libpthread.a
            -rw-r--r--    1 root     root           966 Aug 23  2012 libresolv.a
            lrwxrwxrwx    1 root     root            11 Jan  1 00:01 libresolv_pic.a -> libresolv.a
            -rw-r--r--    1 root     root         29352 Aug 23  2012 librt.a
            lrwxrwxrwx    1 root     root             7 Jan  1 00:01 librt_pic.a -> librt.a
            -rw-r--r--    1 root     root       7685398 Aug 23  2012 libstdc++.a
            -rwxr-xr-x    1 root     root           946 Aug 23  2012 libstdc++.la
            lrwxrwxrwx    1 root     root            19 Jan  1 00:01 libstdc++.so -> libstdc++.so.6.0.14
            lrwxrwxrwx    1 root     root            19 Jan  1 00:01 libstdc++.so.6 -> libstdc++.so.6.0.14
            -rwxr-xr-x    1 root     root        646004 Aug 23  2012 libstdc++.so.6.0.14
            -rw-r--r--    1 root     root          2284 Aug 23  2012 libstdc++.so.6.0.14-gdb.py
            -rw-r--r--    1 root     root        612758 Aug 23  2012 libsupc++.a
            -rwxr-xr-x    1 root     root           884 Aug 23  2012 libsupc++.la
            lrwxrwxrwx    1 root     root            12 Jan  1 00:01 libtermcap.a -> libncurses.a
            -rw-r--r--    1 root     root         52834 Aug 23  2012 libthread_db.a
            lrwxrwxrwx    1 root     root            14 Jan  1 00:01 libthread_db_pic.a -> libthread_db.a
            -rw-r--r--    1 root     root          7764 Aug 23  2012 libutil.a
            lrwxrwxrwx    1 root     root             9 Jan  1 00:01 libutil_pic.a -> libutil.a
            lrwxrwxrwx    1 root     root            19 Jan  1 00:01 terminfo -> /usr/share/terminfo
            -rw-r--r--    1 root     root          7854 Aug 23  2012 uclibc_nonshared.a
            
            usr/lib/gcc:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 arm-unknown-linux-uclibcgnueabi
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi:
            total 4
            drwxr-xr-x    6 root     root          4096 Jan  1 00:01 4.5.3
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3:
            total 660
            -rw-r--r--    1 root     root          1980 Aug 23  2012 crtbegin.o
            -rw-r--r--    1 root     root          2300 Aug 23  2012 crtbeginS.o
            -rw-r--r--    1 root     root          1980 Aug 23  2012 crtbeginT.o
            -rw-r--r--    1 root     root           985 Aug 23  2012 crtend.o
            -rw-r--r--    1 root     root           985 Aug 23  2012 crtendS.o
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 include
            drwxr-xr-x    4 root     root          4096 Jan  1 00:01 include-fixed
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 install-tools
            -rw-r--r--    1 root     root        413624 Aug 23  2012 libgcc.a
            -rw-r--r--    1 root     root         66048 Aug 23  2012 libgcc_eh.a
            -rw-r--r--    1 root     root        141204 Aug 23  2012 libgcov.a
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 plugin
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/include:
            total 524
            -rw-r--r--    1 root     root        401603 Aug 23  2012 arm_neon.h
            -rw-r--r--    1 root     root          7847 Aug 23  2012 float.h
            -rw-r--r--    1 root     root          1279 Aug 23  2012 iso646.h
            -rw-r--r--    1 root     root         10170 Aug 23  2012 mf-runtime.h
            -rw-r--r--    1 root     root         36487 Aug 23  2012 mmintrin.h
            -rw-r--r--    1 root     root          4203 Aug 23  2012 stdarg.h
            -rw-r--r--    1 root     root          1451 Aug 23  2012 stdbool.h
            -rw-r--r--    1 root     root         12542 Aug 23  2012 stddef.h
            -rw-r--r--    1 root     root          6001 Aug 23  2012 stdfix.h
            -rw-r--r--    1 root     root          6895 Aug 23  2012 stdint-gcc.h
            -rw-r--r--    1 root     root           145 Aug 23  2012 stdint.h
            -rw-r--r--    1 root     root          9127 Aug 23  2012 unwind.h
            -rw-r--r--    1 root     root           139 Aug 23  2012 varargs.h
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/include-fixed:
            total 24
            -rw-r--r--    1 root     root           750 Aug 23  2012 README
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 X11
            -rw-r--r--    1 root     root          5447 Aug 23  2012 limits.h
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 linux
            -rw-r--r--    1 root     root           330 Aug 23  2012 syslimits.h
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/include-fixed/X11:
            total 4
            -rw-r--r--    1 root     root          2140 Aug 23  2012 Xw32defs.h
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/include-fixed/linux:
            total 8
            -rw-r--r--    1 root     root          7548 Aug 23  2012 a.out.h
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/install-tools:
            total 20
            -rw-r--r--    1 root     root             2 Aug 23  2012 fixinc_list
            -rw-r--r--    1 root     root           330 Aug 23  2012 gsyslimits.h
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 include
            -rw-r--r--    1 root     root            11 Aug 23  2012 macro_list
            -rw-r--r--    1 root     root            85 Aug 23  2012 mkheaders.conf
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/install-tools/include:
            total 12
            -rw-r--r--    1 root     root           750 Aug 23  2012 README
            -rw-r--r--    1 root     root          5447 Aug 23  2012 limits.h
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/plugin:
            total 4
            drwxr-xr-x    7 root     root          4096 Jan  1 00:01 include
            
            usr/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/plugin/include:
            [... encore des fichiers d'en-tête dans de nombreux sous-répertoires... ]
            
            usr/lib/ldscripts:
            total 272
            -rw-r--r--    1 root     root          8576 Aug 23  2012 armelf_linux_eabi.x
            -rw-r--r--    1 root     root          8360 Aug 23  2012 armelf_linux_eabi.xbn
            -rw-r--r--    1 root     root          8280 Aug 23  2012 armelf_linux_eabi.xc
            -rw-r--r--    1 root     root          8504 Aug 23  2012 armelf_linux_eabi.xd
            -rw-r--r--    1 root     root          8225 Aug 23  2012 armelf_linux_eabi.xdc
            -rw-r--r--    1 root     root          8241 Aug 23  2012 armelf_linux_eabi.xdw
            -rw-r--r--    1 root     root          8576 Aug 23  2012 armelf_linux_eabi.xn
            -rw-r--r--    1 root     root          5120 Aug 23  2012 armelf_linux_eabi.xr
            -rw-r--r--    1 root     root          8008 Aug 23  2012 armelf_linux_eabi.xs
            -rw-r--r--    1 root     root          7551 Aug 23  2012 armelf_linux_eabi.xsc
            -rw-r--r--    1 root     root          7567 Aug 23  2012 armelf_linux_eabi.xsw
            -rw-r--r--    1 root     root          5166 Aug 23  2012 armelf_linux_eabi.xu
            -rw-r--r--    1 root     root          8296 Aug 23  2012 armelf_linux_eabi.xw
            -rw-r--r--    1 root     root          8573 Aug 23  2012 armelfb_linux_eabi.x
            -rw-r--r--    1 root     root          8357 Aug 23  2012 armelfb_linux_eabi.xbn
            -rw-r--r--    1 root     root          8277 Aug 23  2012 armelfb_linux_eabi.xc
            -rw-r--r--    1 root     root          8501 Aug 23  2012 armelfb_linux_eabi.xd
            -rw-r--r--    1 root     root          8222 Aug 23  2012 armelfb_linux_eabi.xdc
            -rw-r--r--    1 root     root          8238 Aug 23  2012 armelfb_linux_eabi.xdw
            -rw-r--r--    1 root     root          8573 Aug 23  2012 armelfb_linux_eabi.xn
            -rw-r--r--    1 root     root          5117 Aug 23  2012 armelfb_linux_eabi.xr
            -rw-r--r--    1 root     root          8005 Aug 23  2012 armelfb_linux_eabi.xs
            -rw-r--r--    1 root     root          7548 Aug 23  2012 armelfb_linux_eabi.xsc
            -rw-r--r--    1 root     root          7564 Aug 23  2012 armelfb_linux_eabi.xsw
            -rw-r--r--    1 root     root          5163 Aug 23  2012 armelfb_linux_eabi.xu
            -rw-r--r--    1 root     root          8293 Aug 23  2012 armelfb_linux_eabi.xw
            
            usr/libexec:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 gcc
            
            usr/libexec/gcc:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 arm-unknown-linux-uclibcgnueabi
            
            usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 4.5.3
            
            usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3:
            total 16260
            -rwxr-xr-x    1 root     root       7930832 Aug 23  2012 cc1
            -rwxr-xr-x    1 root     root       8557384 Aug 23  2012 cc1plus
            -rwxr-xr-x    1 root     root         92812 Aug 23  2012 collect2
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 install-tools
            -rwxr-xr-x    1 root     root         22296 Aug 23  2012 lto-wrapper
            
            usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/install-tools:
            total 132
            -rwxr-xr-x    1 root     root         13524 Aug 23  2012 fixinc.sh
            -rwxr-xr-x    1 root     root        105936 Aug 23  2012 fixincl
            -rwxr-xr-x    1 root     root          3186 Aug 23  2012 mkheaders
            -rwxr-xr-x    1 root     root          3538 Aug 23  2012 mkinstalldirs
            
            usr/sbin:
            total 0
            
            usr/share:
            total 12
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 gcc-4.5.3
            drwxr-xr-x   33 root     root          4096 Jan  1 00:01 locale
            drwxr-xr-x    7 root     root          4096 Jan  1 00:01 terminfo
            
            usr/share/gcc-4.5.3:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 python
            
            usr/share/gcc-4.5.3/python:
            total 4
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 libstdcxx
            
            usr/share/gcc-4.5.3/python/libstdcxx:
            total 8
            -rw-r--r--    1 root     root             1 Aug 23  2012 __init__.py
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 v6
            
            usr/share/gcc-4.5.3/python/libstdcxx/v6:
            total 36
            -rw-r--r--    1 root     root             1 Aug 23  2012 __init__.py
            -rw-r--r--    1 root     root         31298 Aug 23  2012 printers.py
            
            usr/share/locale:
            total 124
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 be
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 bg
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ca
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 da
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 de
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 el
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 es
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 fi
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 fr
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ga
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 gl
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 he
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 hr
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 id
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ja
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ko
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ms
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 nl
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 pl
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 pt_BR
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ro
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 ru
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 rw
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 sk
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 sr
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 sv
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 tr
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 uk
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 vi
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 zh_CN
            drwxr-xr-x    3 root     root          4096 Jan  1 00:01 zh_TW
            
            usr/share/locale/be:
            total 4
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 LC_MESSAGES
            
            usr/share/locale/be/LC_MESSAGES:
            total 32
            -rw-r--r--    1 root     root           990 Aug 23  2012 cpplib.mo
            -rw-r--r--    1 root     root         10368 Aug 23  2012 gcc.mo
            -rw-r--r--    1 root     root         13014 Aug 23  2012 make.mo
            
            usr/share/locale/bg:
            total 4
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 LC_MESSAGES
            
            usr/share/locale/bg/LC_MESSAGES:
            total 140
            -rw-r--r--    1 root     root         45189 Aug 23  2012 binutils.mo
            -rw-r--r--    1 root     root         12677 Aug 23  2012 gprof.mo
            -rw-r--r--    1 root     root         71843 Aug 23  2012 ld.mo
            [... des fichiers de localisation dans des sous-répertoires de différentes langues ...]
            
            usr/share/locale/zh_TW/LC_MESSAGES:
            total 616
            -rw-r--r--    1 root     root        121475 Aug 23  2012 binutils.mo
            -rw-r--r--    1 root     root         17336 Aug 23  2012 cpplib.mo
            -rw-r--r--    1 root     root        432656 Aug 23  2012 gcc.mo
            -rw-r--r--    1 root     root         44839 Aug 23  2012 ld.mo
            
            usr/share/terminfo:
            total 20
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 a
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 l
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 s
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 v
            drwxr-xr-x    2 root     root          4096 Jan  1 00:01 x
            
            usr/share/terminfo/a:
            total 4
            -rw-r--r--    1 root     root          1481 Aug 23  2012 ansi
            
            usr/share/terminfo/l:
            total 4
            -rw-r--r--    1 root     root          1740 Aug 23  2012 linux
            
            usr/share/terminfo/s:
            total 4
            -rw-r--r--    1 root     root          1550 Aug 23  2012 screen
            
            usr/share/terminfo/v:
            total 16
            -rw-r--r--    1 root     root          1194 Aug 23  2012 vt100
            -rw-r--r--    1 root     root          1188 Aug 23  2012 vt102
            -rw-r--r--    1 root     root          1279 Aug 23  2012 vt200
            -rw-r--r--    1 root     root          1279 Aug 23  2012 vt220
            
            usr/share/terminfo/x:
            total 12
            -rw-r--r--    1 root     root          3258 Aug 23  2012 xterm
            -rw-r--r--    1 root     root          1551 Aug 23  2012 xterm-color
            -rw-r--r--    1 root     root          2235 Aug 23  2012 xterm-xfree86
          • Niolak dit :

            Waouh, merci pour ce travail ^^.

            Globalement, j’ai la même chose. Et je ne vois pas non plus de libc.so dans /usr/. Pourquoi j’ai eu besoin de copier de /output/target/lib/* ?

            Enfin, comme je le disais dans mon dernier commentaire (mais je viens de remarquer qu’apparemment les chevrons ne sont pas passés), gcc arrive maintenant à se lancer, mais il ne trouve pas stdio.h.

            Ce fichier existe bien, mais sans doute pas dans le bon dossier (il est uniquement dans /usr/include/c++/tr1/). Je pourrais le copier dans /usr/include directement, mais est-ce la bonne solution ? Comment faire en sorte qu’il aille le chercher où il faut ? Et pourquoi moi ça ne marche pas par défaut ?

            J’ai dû rater une étape quelque part… Mais laquelle ?

          • cpb dit :

            Je confirme que stdio.h (et quelques dizaines d’autres fichiers d’en-tête) doivent se trouver dans /usr/include/ (je les vois dans output/target/usr/include/ de Buildroot).

            Tous les fichiers de /lib auraient dû être installés précédemment (voir cet article).

          • Niolak dit :

            N’ayant pas toujours utilisé les mêmes versions des différentes composantes du système, je n’avais pas exactement les mêmes lib, mais c’est réglé. Quant aux headers, je ne les ai pas dans target/output/usr/include/ mais je vais voir ce que je peux faire pour résoudre le problème.

            En tout cas encore merci pour tout !

          • cpb dit :

            Pour les headers, il ne faut pas oublier d’activer la case « development files in target filesystem » dans le menu « Build options » de Buildroot.

            Bon courage

URL de trackback pour cette page