OpenFreebox

CrossCompilation

PagePrincipale :: DerniersChangements :: LeForum :: IrC :: Vous êtes ec2-54-196-79-241.compute-1.amazonaws.com


Compiler sa propre busybox et d'autres sources pour la freebox

Or HOW TO setup up a cross compilation toolchain using buildroot and cross compiling busybox for a broadcom 6348 ?! by :: Pouët ::




Intro


Cet article tentera d'éclaircir un peu les choses sur la compilation croisée, et pour commencer j'aimerais donc rapeller quelques petites bases pour ceux que cela intéresse. Cette article est valable pour l'architecture processeur de la freebox V4 (broadcom 6348 : un MIPS big endian 32bits) mais peut être valable pour tout autre type d'architecture du moment que vous adaptiez la configuration que je présente ci- dessous. En somme l'architecture de la freebox n'étant pas de type X86 on ne peut compiler les sources comme on le ferait sur son pc.

Il faut donc sur votre PC (que l'on appel hôte ou host) que vous disposiez d'une chaine de compilation croisée. Celle-ci permettra de compiler les sources pour ce qu'on appelle l'architecture cible (la freebox dans notre cas). Il existe différente manière de faire de la compilation croisée (connecté ou non de la cible, etc...) et je ne détaillerais pas tout cela ici ou quand j'aurais du temps, en attendant reportez vous aux docs sur le net. De même pour configurer une chaine de compilation croisée on peut le faire "à la main" ou presque (voir: crosstool), mais ceci me parait dans un premier temps fastidieux. Nous utiliserons donc buildroot un utilitaire permettant par le biais d'un menu de configuration de générer la chaine de cross compilation. Il intègre de plus busybox qui rappelons le est le sujet même de cet article, c'est ti pas beau ca ?!



if (je veux en savoir plus) {

Petites définitions qui ne sont pas de moi :


- Buildroot :

Cet outil est basé sur un ensemble de Makefile qui permettent le téléchargement automatique des sources, la compilation, et la mise en place du rootfs dans le format du système de fichier retenu.
Également, plusieurs architectures peuvent être choisies pour le projet développé, et la mise en place de la chaîne compilation basée sur uClibc sera prise en charge par Buildroot.

- Busybox :

Busybox est un outil conçu par les mêmes développeurs d’uClibc et Buildroot. Ce projet permet la mise en place d’un ensemble de programmes communs à tout système Unix (coreutils) avec une occupation disque minimale. Busybox est en fait un binaire qui comprend à lui seul l’ensemble de ces commandes. Il suffit par la suite de mettre en place des liens durs ou symboliques vers Busybox pour toutes les commandes supportées. Bien que les utilitaires de Busybox comprennent généralement moins d’options que dans leur version originale, ils suffiront dans la plupart des cas à une application embarquée. Par son architecture modulaire, il est possible de choisir les programmes compilés dans l’exécutable lors de sa configuration. Busybox ne s’en tient pas non plus aux programmes les plus élémentaires : un serveur http est disponible par exemple.

}



Les outils


Au minimum :

Un ordinateur sous Linux
Une connection à internet si possible.
Quelques neurones qui traine... un peu de café ?!
Être un peu chtarbé du ciboulot (obligatoire).

Quelques connaissances sur la compilation, l'utilisation et le fonctionnement de linux est un plus non négligeable.




<!> Pour éviter quelques soucis, je vous recommande chaudement d'installer les packages suivants, si ce n'est déjà fait : subversion,gettext,bison,flex,gcc,g++,makeinfo,texinfo,autoconf,gawk,ncurses,ncurses-dev,zlib1g-dev,(zlibc,libc,glibc de dev). <!>






Étape numéro 1 : Téléchargement, configuration et compilation de buildroot



On se place dans son répertoire de travail puis on récupère buildroot par le net (en utilisateur simple) :

$ svn co svn://uclibc.org/trunk/buildroot


On se place dand le répertoire buildroot et on lance le menu de configuration

$ cd buildroot
$ make menuconfig




 screenchot_config_buildroot1

Dans target on définit MIPS car le processeur de la freebox est de type MIPS big endian.



 screenchot_config_buildroot2

Dans package selection on vérifie que busybox est sélectionné (j'ai testé avec la 1.5.0 sans soucis), on peut utilisé une version snapshot, why not ! Et au pire on peu ossi télécharger une ancienne version (voir la doc officiel de buildroot).

On quitte et sauvegarde.


Puis pour finir on compile buildroot

$ make


Des questions sont posées pendant la première compilation, choisirs MIPS (gros indien :p) puis MIPS32 et O32 (vous comprendrez). Sinon pour le reste tapez la touche "enter" avec la tête. XD



Étape numéro 2 : Configuration et compilation de buildroot


Toujous depuis le répertoire buildroot, on configure busybox avant sa compilation :

$ make busybox-menuconfig




 screenchot_config_busybox1

--------------------------------------------- Menu générale --------------------------------------------------------
Bon ben euh c'est le menu principale :D . Premierement si vous souhaitez que Busybox soit compilé statiquement (avec ses librairies) ou dynamiquement aller dans Busybox Settings -→ Build Options. Pour cocher c'est "Espace" et pour revenir "Echap". Bon ensuite depuis les différents sous menu du menu principale on choisi les paquets et fonctionnalitées de sa busybox.




 screenchot_config_busybox2

Dans la partie networking utilities on sélectionne nc (netcat) avec les options qui vont avec ;) et puis tout ce qu'on veut.




 screenchot_config_busybox3

Dans shells, on oublie pas de choisir un shell, ash par exemple et de cocher "standalone shell".

On quitte et sauvegarde par la même occasion.

Puis on recompile buildroot et par la même busybox :

$ make


On retrouve alors busybox prêt à l'emploi dans :

/buildroot/build_mips/busybox<N°version>/

<!> Il faut bien penser à faire des liens symboliques (ln -s cible nom_du_lien) des applications contenu dans busybox sur le système cible, comment dans le script de l'article suivant http://www.f-x.fr/wikini/wakka.php?wiki=PenetrationV4 .<!>




Etape annexe pour la compilation d'autres sources pour la freebox


Il est possible que vous ayez envie de compiler des programmes qui ne sont pas packagé avec buildroot. Pour faire ceci il suffit d'utiliser la chaine que l'on a généré avec buildroot.

La chaine générée par Buildroot se trouve par défaut dans build_ARCH/staging_dir/. Le moyen le plus simple est d'ajouter build_ARCH/staging_dir/bin/ dans le PATH, et ensuite utiliser arch-linux-gcc, arch-linux-objdump, arch-linux-ld, etc.

Par exemple, vous pouvez ajouter ceci au .bashrc (pour MIPS et si Buildroot est dans ~/buildroot/) :

export PATH="$PATH:~/buildroot/build_mips/staging_dir/bin/"

Puis pour compiler il suffit de faire :

mips-linux-gcc -o foo foo.c



La suite bientôt ... bonne compile à tous !!!!




Un Grand merci a pouet pour ce tuto ;)