RSS: Blog | Wiki | Forum

Notes sur la compilation

Un article de Easyneuf.

Sommaire

[modifier] Notes sur le processus de compilation

[modifier] buildroot

Le système utilisé pour créer l'os se base sur buildroot. Il a l'avantage d'être conçu pour les systèmes embarqués nécessitant peu de ressources, et supporte de multiples architectures.

Il utilise pour la cross-compilation un toolchain. C'est à dire un ensemble d'outil qui permet de compiler d'une architecture (par exemple x86) vers une autre (ex: powerpc).

Ainsi, il a été possible de générer le système de l'easygate sur un powerpc.

[modifier] Etapes de compilation

La compilation de l'ensemble de l'EasyOS se divise en 2 parties

  • compilation du crosstool

Cette étape génère le toolchain, basé sur les scripts crosstool. Ce toolchain s'appuie sur la glibc. Il a été choisi car la uclibc supportait mal les threads et le c++ au début du projet. Il pourrait être intéressant de revenir à la uclibc afin de gagner de la place. A l'origine, la compilation du toolchain avec la uclibc fait partie intégrante du buildroot.

  • compilation du buildroot

Une fois le crosstool généré (et archivé pour éviter de le recompiler pour une prochaine reconstruction de l'image), on lance la compilation du buildroot proprement dit. C'est un ensemble de makefile qui va générer au final un système de fichier.
Le système de configuration s'appuie sur kconfig.

[modifier] Arborescence

buildroot ne contient pas le toolchain utilisé pour l'esaygate. Celui-ci se nomme crosstool et se trouve dans un dépôt mercurial à part.

Voici le contenu de buildroot :

Provenant de buildroot :

  • crosstool

Les makefiles nécessaires pour construire le toolchain à base de uclibc Quelques modifications mineures ont été ajoutées pour supporter la glibc

  • docs

docs de buildroot, non touchées, non mises à jour.

  • package

Contient les makefile des applications à installer sur le système Largement modifié par rapport à l'upstream de buildroot.

  • target

makefile concernant la génération des images pour les cibles.

  • toolchain

makefile générant des outils éxécutable sur la machine de compilation, nécessaires pour compiler l'ensemble du projet.

Issue de la compilation pour l'easygate :

  • toolchain_build_i686

Résultat du répertoire toolchain

  • build_i686-unknown-linux-gnu

Résultat de la compilation de chaque application + un répertoire root qui représente le système de fichier de l'os généré

Ajouté par l'équipe d'easyneuf :

  • check

Quelques scripts pour faire des vérifications d'usage sur l'ensemble de l'image

  • build

Script pour simplifier la génération de l'os

[modifier] Performances

La génération d'un toolchain est très long. Il faut en effet compiler les binutils pour l'architecture cible, puis le compilateur, et enfin la glibc.
Pour éviter de refaire toutes ces étapes à chaque fois, nous archivons le crosstool dans crosstool.tar.bz.

Le buildroot est aussi très long à faire car il nécessite de compiler tous les paquets pour faire une image propre. Bien sûr, il est possible de recompiler les paquets individuellement et lancer la cible qui créé l'image ensuite.

Make peut lancer plusieurs processus en même temps, ce qui est un avantage certain sur les machines multi-processeurs. Cette option -j se retrouve dans la section Build options sous le titre Number of jobs to run simultaneously.