Table des matières

Compilations et modifications des sources de GeeXboX

Sujet : Compilations et modifications des sources de GeeXboX
Niveau : Intermédiaire
Auteur : [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.