6. Busybox

Busybox, c'est quoi? Busybox, c'est le couteau suisse du Linux Embarqué, tel que le site web de Busybox le prétend. Et en plus, c'est vrai! En quoi est-ce un couteau suisse? Tout simplement parce que c'est un seul binaire qui fait tout, le shell, les outils de base de gestion de fichiers comme ls, cp, mv, rm, find..., et d'autres outils encore. Le tout tient dans quelques octets! Bon, 191812 chez moi, mais franchement, c'est loin d'être énorme, surtout que cela sera compressé sur la disquette.

Décompressez Busybox là ou vous le voulez, puis éditez le fichier Config.h. Ce fichier contient une liste énorme de #define qui indique tout ce que le binaire busybox sera capable de faire. Plus vous en mettez, plus le binaire sera gros, mais on ne parle bien souvent qu'en octets lorsqu'on vous dit que telle fonctionnalité augmente la taille de busybox. Pour simplifier la lecture de l'article, j'ai préféré faire un minimum de changements que je vais vous citer. A vous d'adapter le fichier à vos besoins. En fait, j'ai seulement ajouté #define BB_IFCONFIG, #define BB_ROUTE et #define BB_FEATURE_INSTALLER: cette fonctionnalité permet de créer en live et automatiquement des liens pointant vers busybox et portant les noms des binaires à émuler. Je vous conseille d'étudier vos besoins plutôt que de me suivre ici, surtout que pour la disquette que je me suis faite hors du cadre de cet article, j'ai apporté d'autres modifications moi aussi!

Pour compiler, le fichier INSTALL dit de simplement taper make. Si nous faisons cela, busybox sera lié à la glibc. Or il doit être lié à µClibc. Donc nous devons faire make CC=/ghlmf/usr/bin/i386-uclibc-gcc. C'est aussi simple que cela! Et lorsque la compilation est terminée, voyons si busybox est bien lié à la bonne libc. L'outil listant les bibliothèques nécessaires à un binaire pour sa bonne exécution est ldd. Si vous faites ldd busybox Attendez-vous à avoir aussi bien un résultat escompté qu'un résultat surprenant. En fait, il ne faut pas utiliser le ldd du chemin d'exécution, mais /ghlmf/bin/ldd. Chez moi, cela donne:

$ /ghlmf/bin/ldd busybox
	libc.so.0 => /ghlmf/lib/libc.so.0
	/ghlmf/lib/ld-uClibc.so.0 => /ghlmf/lib/ld-uClibc.so.0

Tout va donc très bien.

Le fichier INSTALL vous indique de faire make install ensuite. Si vous le faites, vous allez créer de nombreux liens vers busybox. Cela est strictement inutile dans le cadre de la construction de notre disquette. L'important, c'est de ne pas oublier de mettre busybox sur la disquette ensuite.

Amusons nous un peu avec busybox. Faites: busybox ls -l. Avez-vous la liste des fichiers? Et avec busybox date, avez-vous l'heure? Si vous lancez busybox sans argument, vous obtenez la liste de ce qu'est capable d'exécuter busybox.

Busybox se lance avec comme premier argument le nom du programme à émuler, suivi des options habituelles du programme. Mais si vous faites un lien symbolique vers busybox, par exemple ln -s busybox ls, vous pouvez utiliser le lien en oubliant qu'il pointe sur busybox. Dans notre cas, busybox ls -l et ./ls -l auront le même effet!

création est mise à disposition sous un contrat Creative Commons