Les pré-requis pour la compilation

Pour récuperer les sources il faut un client git:

yum install git

Il faut ensuite les paquets classiques pour compiler:

yum install gcc-c++ flex bison gawk gperf autoconf automake m4 \
cvs libtool texinfo gettext libxslt expat zlib-devel ncurses-devel zip

La commande pour récupérer les sources est la suivante:

git clone git://github.com/OpenELEC/OpenELEC.tv.git

Avant de compiler il faut se placer dans la repertoire des sources:

cd OpenELEC.tv

Pour mettre à jour de temps en temps les sources, il suffira de faire un git pull.

La compilation

Les sources d'OpenElec peuvent couvrir plusieurs projets, celui qui nous interesse ici est le projet "RPi". L'architecture pour la compilation sera "arm". La commande pour la compilation (spécifique à OpenElec) est la suivante:

PROJECT=RPi ARCH=arm make

La compilation peut être assez longue. Si tout ce passe bien, la compilation se termine par la création de l'image système au format SquashFS. Ce qui nous intéresse maintenant se découpe en 3 parties:

  • Une partie qui gère le boot
  • le kernel
  • le système incluant xbmc

Ces 3 parties vont être copiées dans la partition "System" qui peut être vu comme une partition /boot en gros.

Préparation de la carte SD

Pour fonctionner, il faut une carte SD partitionnée (avec fdisk par exemple) comme suit:

  • une partition vfat de 128Mo, flaguée bootable
  • une partition ext4 utilisant le reste de la carte SD

La partition en vfat de 128Mo devra être labelisée en tant que "System", l'autre partition en ext4 en tant que "Storage".

Pour formater en vfat avec le label "System":

mkfs.vfat -n System /dev/<carte SD partition 1>

Pour formater en ext4 avec le label "Storage":

mkfs.ext4 -L Storage /dev/<carte SD partition 2>

L'installation sur la carte SD

Le bootloader

La première partie à copier sur la carte SD gère le boot, elle se décompose en 3 fichiers:

  • arm128_start.elf
  • bootcode.bin
  • loader.bin

Ces 3 fichiers sont à copiés sur la carte SD dans la partition System, par exemple montée dans /media/System. Le arm128_start.elf est à renommer en start.elf. Les commandes de copies sont les suivantes:

cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/arm128_start.elf /media/System/start.elf
cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/bootcode.bin /media/System/
cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/loader.bin /media/System/

Le répertoire bcm2835-bootloader-* contient dans son nom un numero de release qui varie en fonction des sources récupérées, d'où le "*". Si un "make clean" est exécuté avant chaque compilation, il n'y aura qu'un seul répertoire bcm2835-bootloader-<release>, dans le cas contraire, et si les sources concernant le bootloader ont été mises à jours, il pourrait y en avoir plusieurs.

Le kernel

Le kernel sous format de fichier image, se trouve dans le répertoire target. Son nom de fichier contient un numero de release et peut donc varier en fonction des sources utilisées. Il est à copier sur la carte SD dans la partition System, en le renommant en kernel.img. La commande est la suivante:

cp target/OpenELEC-RPi.arm-devel-*.kernel /media/System/kernel.img

Le système

Le système est dans un fichier image au format SquashFS. Cette image est créée en fin de compilation et se trouve dans le repertoire target. Son nom de fichier contient lui aussi un numéro de release, qui peut donc varier en fonction des sources utilisées. Cette image du système est à copier sur la carte SD, toujours dans la partition System, renommée en SYSTEM. La commande est donc la suivante:

cp target/OpenELEC-RPi.arm-devel-*.system /media/System/SYSTEM

Conclusion

Rien de bien compliqué en soit, grâce au fichier configurant le projet "RPi" et à l'excellent travail de l'équipe OpenElec. Il ne reste plus qu'à démonter la carte SD et l'insérer dans le Raspberry Pi.

Ce billet est en gros une traduction allegée de la documentation issue du wiki officiel consultable ici.