Logiciels Libres et Systèmes Embarqués


3.3. Les fichiers d'en-tête

3.3.1. Fichier d'en-tête du noyau Linux

Les fichiers d'en-tête du noyau Linux sont nécessaires pour compiler les Binutils. On peut récupérer les sources du noyau grâce à BitKeeper, en tapant les commandes suivantes :

bash# bk clone -rv2.4.23_linuxppc_2_4 bk://ppc.bkbits.net/linuxppc_2_4
bash# cd linuxppc_2_4
bash# bk -r edit

Le noyau doit maintenant être configuré :

bash# cd linuxppc_2_4
bash# make ARCH=ppc menuconfig
bash# make dep

Pour le moment, il est inutile de s'attarder sur la configuration, seul le type du processeur est nécessaire. Il faut donc choisir "40x" dans le champ "Processor Type" du menu "Platform support", puis quitter en sauvant la configuration. Il ne reste alors plus qu'à copier les fichiers d'en-tête dans l'arborescence de ce système :

bash# cp -r include/linux $SYSROOT/usr/include
bash# cp -r include/asm-ppc $SYSROOT/usr/include/asm
bash# cp -r include/asm-generic $SYSROOT/usr/include/
bash# cd ..

3.3.2. Fichier d'en-tête de la GlibC

Etant la plus standard, j'ai choisi GlibC comme bibliothèque C. De plus GCC dépend fortement de cette dernière. J'ai aussi choisi d'utiliser la bibliothèque "Linux Threads" (pthreads) pour la gestion des processus légers[11]. Pour le moment, seul les fichiers d'en-tête sont nécessaires pour compiler GCC, donc la commande suivante suffit :

bash# tar -xvjf glibc-2.3.5.tar.bz2
bash# cd glibc-2.3.5
bash# tar -xvjf ../glibc-linuxthreads-2.3.5.tar.bz2
bash# mkdir -p build-glibc-headers; cd build-glibc-headers
bash# libc_cv_ppc_machine=yes              \
      ../configure --host=$TARGET          \
                   --prefix=/usr           \
                   --disable-sanity-checks \
                   --with-headers=$SYSROOT/usr/include

libc_cv_ppc_machine=yes

est une astuce. Cela permet d'éviter l'erreur : « a version of binutils that supports .machine 'altivec' is needed », car le PowerPC 405 n'a pas d'Altivec (co-processeur vectoriel).

--host

est l'hôte où sera installé la GlibC, donc dans notre cas c'est le powerpc-405-linux-gnu.

--prefix=/usr

est encore une astuce. La GlibC s'installe par défaut dans le répertoire /usr/local, mais grâce à cette option la GlibC installe les bibliothèques indispensables dans le répertoire /lib et les autres dans le répertoire /usr/lib (relativement à $SYSROOT).

--disable-sanity-checks

permet de ne pas inclure le support de la bibliothèque pthreads car cela n'est pas nécessaire pour la compilation de GCC.

--with-headers

précise où sont stockés les fichiers d'en-tête du noyau.

Il ne reste alors plus qu'à compiler :

bash# libc_cv_ppc_machine=yes                    \
      make cross-compiling=yes                   \
           install_root=$SYSROOT install-headers

cross-compiling=yes

précise que l'on met en place un système de développement croisé. Cela permet surtout de ne pas compiler et d'exécuter les programmes de tests qui, bien évidemment, ne fonctionneront pas sur notre ordinateur.

install_root

précise la racine du système GNU/Linux pour PowerPC 405.

install-headers

indique que l'on souhaite copier les fichiers d'en-tête.

Il manque deux fichiers dans l'installation des fichiers d'en-tête, nous devons donc les copier nous-même :

bash# cp ../include/gnu/stubs.h $SYSROOT/usr/include/gnu
bash# cp bits/stdio_lim.h $SYSROOT/usr/include/bits
bash# cd ../..



[11] processus partageant le même espace d'adressage.