Sujet : Compilations et modifications des sources de GeeXboX
Niveau : Intermédiaire
Auteur : [GO]Skywalker13 (18 janvier 2005), révisé le 16 septembre 2006
Pour compiler votre GeeXboX vous aurez tout d'abord besoin des sources. Celles-ci sont disponibles ici : http://www.geexbox.org/fr/downloads.html
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 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.
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.
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.
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)
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
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).
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
.