/*-------------------------------------------------------------------------- File: README crosscompilation pour PowerPC MPC555 Author: SAR Project: MPC555 Creation date: 23-Jun-2008 Copyright INRIA ---------------------------------------------------------------------------- Attached documents: ---------------------------------------------------------------------------- Modifications: (WHO/date/description) ---------------------------------------------------------------------------*/ ATTENTION : verifier que vous disposez d'un compilo gcc installe sur la machine de travail qui soit release par GNU et pas par REDHAT ou autre ! Les infos de ce fichier README se basent sur le chapitre 4 du livre "Building Embedded Linux Systems" de Karim Yaghmout, editions O'REILLY. 0. Softs a recuperer: * binutils-2.16.1 * gcc-2.95.3 * glibc-2.2.5 * glibc-linuxthreads-2.2.5 (qui aille avec la version de la glibc choisie) * gdb-5.2.1 Sous : http://www.kernel.org/ et sous http://www.ibiblio.org/pub/gnu/binutils/ http://www.ibiblio.org/pub/gnu/gcc/ http://www.ibiblio.org/pub/gnu/glibc/ http://www.ibiblio.org/pub/gnu/gdb * Sites a consulter : * http://sources.redhat.com/ml/crossgcc/ * http://www.embeddedtux.org/gnu-tools.html notamment pour la table de: "Known functional package version combinations" 1. Variables a Positionner: a. Repertoire de Travail: export CROSS_PRJ=${HOME}/CrossCompil/MPC555 b. Type de la cible de crosscompilation: export TARGET=powerpc-linux c. Repertoire ou vont etre installes les softs a utilser pour la chaine de crosscompilation: export PREFIX=${CROSS_PRJ}/tools #$ROBOTIQUE/Target/MPC555/host/powerpc d. Repertoire ou vont etre installes les utilitaires propres a la cible: export TARGET_PREFIX=${PREFIX}/${TARGET} e. Mettre a jour la variable PATH pour export PATH=${PREFIX}/bin:${PATH} f. se connecter sur la machine chouffe : car c'est sur cette machine que toute la distribution originelle pour les outils de crosscompilation pour la carte PowerPC ont ete installees. 2. Installation des packages: * Preparation des rep de travail ou la chaine de cross compilation va etre construite : ~> cd ${CROSS_PRJ} ${CROSS_PRJ}> mkdir buid-tools ${CROSS_PRJ}> mkdir build-tools/build-binutils ${CROSS_PRJ}> mkdir build-tools/build-boot-gcc ${CROSS_PRJ}> mkdir build-tools/build-glibc ${CROSS_PRJ}> mkdir build-tools/build-gcc ${CROSS_PRJ}> mkdir build-tools/build-gdb * Package binutils Ce package comprend les utilitaires necessaires pour manipuler les fichiers objet binaires, et en particulier as (assembleur GNU) et ld (l'editeur de lien GNU). ${CROSS_PRJ}> cd ${CROSS_PRJ}/build-tools ${CROSS_PRJ}/build-tools> tar xvfz binutils-2.16.1.tar.gz ${CROSS_PRJ}/build-tools> cd build-binutils ${CROSS_PRJ}/build-tools/build-binutils> ../binutils-2.16.1/configure --target=${TARGET} --prefix=${PREFIX} ${CROSS_PRJ}/build-tools/build-binutils> make ${CROSS_PRJ}/build-tools/build-binutils> make install * Package gcc Ce package comprend le compilateur GNU + les runtime librairies associees. Dans un premier temps, il suffit de construire le compilateur supportant uniquement le langage C. Ce n'est qu'une fois la librairie C construite que l'on construira le compilateur avec le support complet incluant C++. Au niveau de la configuration: * l'option --without-headers indique que l'on n'a pas encore les fichiers headers du systeme pour la cible (car pas encore de glibc de construite) * l'option --with-newlib indique de ne pas utiliser la glibc pour les librairies car glibc n'a pas encore ete construite et n'est pas necessaire pour le compilateur * l'option --enable-languages=c indique que l'on veut construire un compilateur ne supportant que le langage C ${CROSS_PRJ}/build-tools> tar xvfz gcc-2.95.3.tar.gz ${CROSS_PRJ}/build-tools> cd build-boot-gcc/ ${CROSS_PRJ}/build-tools/build-boot-gcc>../gcc-2.95.3/configure --target=${TARGET} --prefix=${PREFIX} --without-headers --with-newlib --enable-languages=c ${CROSS_PRJ}/build-tools/build-boot-gcc> make all-gcc ${CROSS_PRJ}/build-tools/build-boot-gcc> make install-gcc * Package GlibC la librairie C Ce package comprend un grand nombre de librairies dont en particulier la librairie necessaire pour le langage C mais pas seulement. Ce package est tres important et est tres sensible car c'est des librairies qui vont etre generees dont vont dependre les applications produites pour l'architecture cible. 1. Construction et installation de la librairie pour la cible ${CROSS_PRJ}/build-tools> tar xvfz glibc-2.2.5.tar.gz ${CROSS_PRJ}/build-tools> tar xvfz glibc-linuxthreads-2.2.5.tar.gz --directory=glibc-2.2.5 ${CROSS_PRJ}/build-tools> cd build-glibc ${CROSS_PRJ}/build-tools/build-glibc> CC=powerpc-linux-gcc ../glibc-2.2.5/configure --host=${TARGET} --prefix="/usr" --enable-add-ons=linuxthreads --with-headers=/opt/ecrin/crossdev/host/powerpc/powerpc-linux/include ${CROSS_PRJ}/build-tools/build-glibc> make ${CROSS_PRJ}/build-tools/build-glibc> make install_root=${TARGET_PREFIX} prefix="" install 2. Configuration du fichier libc.so: Ce fichier est utilise pendant l'edition de lien des applications a la librairie C. Ce fichier contient les references aux differentes librairies necessaires pour l'edition de lien effective. L'installation de la glibc suppose que la librairie a ete installee sur la racine du systeme de fichiers : or ce n'est pas le cas, etant donne l'installation dans un repertoire non standard (ie pas /lib). Donc il faut modifier le chemin d'acces : ${CROSS_PRJ}/build-tools/build-glibc> cd ${TARGET_PREFIX}/lib ${TARGET_PREFIX}/lib> cp ./libc.so ./libc.so.orig ${TARGET_PREFIX}/lib> vi ./libc.so Modifier la ligne commencant par GROUP comme suit: GROUP ( libc.so.6 libc_nonshared.a ) * Package Gcc Maintenant que la librairie GlibC est construite, on peut elaborer le cross-compilateur complet pour la cible. ${CROSS_PRJ}/build-tools> cd build-gcc ${CROSS_PRJ}/build-tools/build-gcc> ../gcc-2.95.3/configure --target=${TARGET} --prefix=${PREFIX} --with-headers=/opt/ecrin/crossdev/host/powerpc/powerpc-linux/include --enable-languages=c,c++ ${CROSS_PRJ}/build-tools/build-gcc> make all ${CROSS_PRJ}/build-tools/build-gcc> make install * Fin de l'installation ${CROSS_PRJ}/build-tools/build-gcc> cd ${PREFIX}/${TARGET}/bin ${PREFIX}/${TARGET}/bin> file as ar gcc ld nm ranlib strip ${PREFIX}/${TARGET}/bin> powerpc-linux-gcc -print-search-dirs ${PREFIX}/${TARGET}/bin> mv ar as gcc ld nm ranlib strip ${PREFIX}/lib/gcc-lib/powerpc-linux/2.95.3 ${PREFIX}/${TARGET}/bin> for file in as ar gcc ld nm ranlib strip \ do \ ln -s ${PREFIX}/lib/gcc-lib/powerpc-linux/2.95.3/$file . \ done * Package GDB Ce package comprend le debogueur symbolique de GNU. ${CROSS_PRJ}> cd ${CROSS_PRJ}/build-tools ${CROSS_PRJ}/build-tools> tar xvfz gdb-5.2.1.tar.gz ${CROSS_PRJ}/build-tools> cd build-gdb ${CROSS_PRJ}/build-tools/build-gdb> ../gdb-5.2.1/configure --target=${TARGET} --prefix=${PREFIX} ${CROSS_PRJ}/build-tools/build-gdb> make ${CROSS_PRJ}/build-tools/build-gdb> make install Parce que le binaire gdb est trop gros pour etre utilise comme cela sur la cible un gbd server doit etre installe et utilise a la place. Ce gdb serveur doit etre cross-compile pour l'architecture cible : ${CROSS_PRJ}/build-tools> mkdir build-gdbserver ${CROSS_PRJ}/build-tools> cd build-gdbserver ${CROSS_PRJ}/build-tools/build-gdbserver> chmod +x ../gdb-5.2.1/gdb/gdbserver/configure ${CROSS_PRJ}/build-tools/build-gdbserver> CC=powerpc-linux-gcc ../gdb-5.2.1/gdb/gdbserver/configure --host=${TARGET} --prefix=${TARGET_PREFIX} ${CROSS_PRJ}/build-tools/build-gdbserver> make ${CROSS_PRJ}/build-tools/build-gdbserver> make install 3. Tests Pour chaque, lancer la commande suivante $> powerpc-elf-gcc -v pour verifier si au moins le compilo donne les infos sur la version !