====== Compilations et modifications des sources de GeeXboX ====== >**Sujet** : Compilations et modifications des sources de GeeXboX >**Niveau** : Intermédiaire >**Auteur** : [[utilisateurs:[GO]Skywalker13]] (18 janvier 2005), révisé le 16 septembre 2006 ===== Récupération des sources ===== Pour compiler votre [[.:..:GeeXboX]] vous aurez tout d'abord besoin des sources. Celles-ci sont disponibles ici : http://www.geexbox.org/fr/downloads.html ===== Les dépendances ===== La compilation de la [[.:..:GeeXboX]] demande quelques logiciels indispensables. Les binaires nécessaires selon le site de la [[.:..:GeeXboX]] : ''gcc, make, patch, wget, nasm, dosfstools, mkzftree, cdrecord'' (voir : http://www.geexbox.org/fr/requirements.html) NB : ''wget'' n'est utile que dans le cas où vous utilisez le paquetage de compilation allégé. Si un paquetage reste manquant, il sera impossible de compiler la [[.:..:GeeXboX]] sans l'apparition d'un message d'erreur, explicite, indiquant exactement quel logiciel fait défaut. ===== Les sources ===== Les sources de la [[.:..:GeeXboX]] sont très bien structurées et les modifications sont assez simples. Un dossier ''config'' contient les fichiers de configuration, dont le fichier ''options'' qui nous intéresse particulièrement. Surtout les toutes premières lignes qui indiquent une architecture ainsi qu'un type de processeur. # Target system we want to cross compile for (i386/ppc) TARGET_ARCH=i386 # The TARGET_CPU variable controls which processor should be targeted for # generated code. case $TARGET_ARCH in i386) # (AMD CPUs) opteron athlon64 athlon-fx athlon-mp athlon-xp athlon-4 # athlon-tbird athlon k8 k6-3 k6-2 k6 # (Intel CPUs) nocona prescott pentium4[m] pentium3[m] pentium-m # pentium2 pentiumpro pentium-mmx pentium # i686 i586 i486 i386 TARGET_CPU=pentium3 ;; ppc) # 401 403 405 405fp 440 440fp 505 601 602 603 603e ec603e 604 604e # 620 630 740 7400 7450 750 801 821 823 860 970 rios rios1 rios2 rsc rs64a # common G3 G4 G5 power power2 power3 power4 power5 powerpc powerpc64 TARGET_CPU=G3 ;; esac Afin d'optimiser la distribution, ''TARGET_CPU'' peut être remplacé par le CPU de l'ordinateur cible. La liste des CPU est disponible en commentaire, mais n'oubliez pas que cela peut varier en fonction de la version de GCC que vous utilisez. Choisissez alors ''ppc'' si vous utilisez un micro-ordinateur compatible PowerPC. Il est également possible, dans ce fichier, de désactiver par exemple la prise en charge des ''DXR3'', le ''WIFI'' et la ''BTTV et (ou) RADIO''. Ainsi que de forcer la langue ''fr'' par défaut à la place de ''en''. Si vous utilisez une télécommande infra-rouge ou radio, vous pouvez spécifier le modèle pour ''REMOTE & RECEIVER''. Je vous conseil d'activer ''EXTRACODECS'' afin de bénédicier des décodages de fichiers RealVideo et WMV. ==== MPlayer ==== Un autre dossier intéressant est le dossier ''packages''. Parce qu'il contient la configuration de chaque application, lors de sa compilation. Cela va nous permettre, d'indiquer à MPlayer qu'il soit compilé pour une architecture et un processeur spécifique. dossier : ''packages/MPlayer/'' Editez alors le fichier ''build''. Intéressons-nous au fond de ce fichier. L'option ''--enable-runtime-cpudetection'' doit être modifiée en ''disable'' afin que l'on puisse indiquer explicitement les unités de calcul disponibles dans notre CPU. Ce qui va rendre MPlayer spécifique à un seul type de processeur; ainsi il sera mieux optimisé. Par exemple, pour un Pentium III : --disable-runtime-cpudetection \ --enable-mmx \ --enable-mmxext \ --disable-3dnow \ --disable-3dnowext \ --enable-sse \ --disable-sse2 \ --disable-ssse3 \ Le Pentium III ayant deux unités MMX et une SSE. Le SSE2 est disponible sur les P4, le SSSE3 sur les Core 2 et le 3DNow sur les processeurs AMD (en fonction de leur génération). Afin de bénéficier d'un rendu MPEG2 légèrement plus rapide, la librairie ''libmpeg2'' peut être activée en remplaçant ''--disable-libmpeg2'' par ''--enable-libmpeg2''. Sinon, c'est le FFMpeg qui aurait fait office de décodeur MPEG2. Si GeeXboX n'intègre pas la libmpeg2 par défaut, c'est afin de bénéficier d'une distribution la plus légère possible. ==== Kernel Linux ==== Le kernel et le uClibc contiennent un éditeur pour leur configuration. Ce qui rend le procédé très simple. Il est juste nécessaire de connaître quelques scripts qui sont contenus dans le dossier ''scripts''. Pour décompresser proprement les sources du noyau, à la racine des sources de la [[.:..:GeeXboX]], il faut exécuter ce script : ./scripts/unpack linux Celui-ci va décompresser le kernel dans le dossier ''build.i386 ou .ppc''. Pour les exemples, l'architecture i386 sera utilisée, à vous d'adapter selon votre système. Après avoir atteint le dossier des sources du noyau : cd build.i386/linux-2.6.12.3 Exécuter : make menuconfig Ce qui va provoquer la compilation du menu de configuration du kernel, puis celui-ci sera exécuté automatiquement. Processor type and features (ENTER) Processor family (Pentium-II/Celeron(pre-Coppermine)) (ENTER) Choisir le processeur (Pentium-III par exemple) et confirmer par la barre d'espace. Il peut être intéressant de décocher le ''Generic-x86'' (rend le système moins portable) et de cocher le kernel comme kernel ''pre-emptible'' (améliore la réactivité du système dans notre cas). Ainsi que décocher l'option ''Compilation for size'' afin d'améliorer l'optimisation au détriment d'un noyau légèrement plus gros. **Support RTC** : selon ce site : http://freshmeat.net/articles/view/747/ il est possible de rajouter le support du RTC qui permet à MPlayer d'être plus fluide pour la lecture des fichiers vidéo. Cherchez le paramètre ''RTC stores time in GMT'' et activez-le. Pour augmenter la vitesse de chargement du noyau, les divers périphériques audio et vidéo peuvent être décochés, afin de garder uniquement le matériel utilisé. Dans le cas d'un ordinateur sans support du Firewire, celui-ci peut être désactivé sans soucis dans la configuration du noyau. Pour finir, quittez le configurateur et sauvegardez les modifications. Le nouveau fichier de config, doit alors être recopié dans le dossier contenant la configuration par défaut du noyau de la [[.:..:GeeXboX]] : cp .config ../../packages/linux/config/linux.i386.conf ce qui va remplacer l'ancienne configuration par la nouvelle optimisée. Revenir ensuite à la racine des sources (cd ../..) puis faire : ./scripts/clean linux Afin de vider le dossier ''build'' proprement. ==== uClibc ==== Pour le uClibc c'est quasiment la même chose : ./scripts/unpack uClibc cd build.i386/uClibc make menuconfig Target Architecture Features and Options Target x86 Processor Family (Celeron/Pentium-II) Pentium-III (par exemple) Quitter et sauvegarder cp .config ../../packages/uClibc/config/uClibc.i386.conf ./scripts/clean uClibc Pour compiler uClibc avec l'optimisation ''-O2'' et non ''-Os'' il peut être nécessaire de modifier un fichier nommé ''rules.mak'' dans le paquetage et changer # use '-Os' optimization if available, else use -O2, allow Config to override OPTIMIZATION+=$(call check_gcc,-Os,-O2) par # use '-Os' optimization if available, else use -O2, allow Config to override OPTIMIZATION+=$(call check_gcc,-O2,-Os) ==== Busybox ==== Pour l'ajout de commandes dans la [[.:..:GeeXboX]], c'est la source ''busybox'' qu'il faut décompresser, et utiliser le ''make menuconfig''. Très utile pour rajouter par exemple des commandes comme vi pour l'édition des fichiers depuis le mode "debug" ou l'accès telnet. Mais n'oubliez pas qu'il existe un paramètre ''DEVTOOLS'' dans le fichier d'option de compilation cité plus haut, qui vous permet de rajouter quelques outils pratiques de Busybox. Vous trouvez la configuration dans ce fichier : ''packages/busybox/config/busybox.devtools.conf'' ==== Optimisation for size ==== Nous avons précédemment désactivé cette option dans le noyau. Il est également intéressant de changer la méthode de compilation de tous les logiciels de la [[.:..:GeeXboX]], qui sont par défaut, compilés avec une optimisation par la taille. Les variables ''XXXXX_CFLAGS'' contenues dans le fichier ''config/path'', permettent de changer la compilation ''-Os'' en ''-O2'' (optimisation de 2ème niveau) pour toutes les sources. TARGET_CFLAGS="-O2 -Wall -pipe" ... HOST_CFLAGS="-O2 -Wall -pipe" **Attention**, bien que vous pouvez spécifier une optimisation de 3ème niveau, préférez le 2ème. J'ai constaté une grande instabilité en ''-O3'' avec les logiciels de partitionnement et de formatage (utile pour l'installateur). ===== Compilation ===== Pour lancer la compilation, il faut se trouver à la racine des sources puis faire ''make'' pour générer directement l'image ISO ou ''make generator'' pour le générateur d'ISO. La compilation peut prendre de 30 minutes à 2 heures en fonction du PC. Un fichier iso ou tar.gz sera créé au final. Après décompression de l'archive du générateur, le binaire ''linux-i386-generator'' permet de générer l'image iso. Si une compilation n'aboutit pas, il est nécessaire de nettoyer les sources avec la commande ''make clean''. Vous trouverez des explications plus détaillées sur les différentes manière de lancer une compilation avec [[.:..:GeeXboX]] dans le fichier d'aide ''DOCS/README_fr.txt''.