BusyBox : utilitaire regroupant beaucoup d'exécutables Unix pour systèmes embarqués à contrainte mémoire forte

Fiche PLUME
  • Création ou MAJ importante : 16/07/2013
  • Correction mineure : 19/06/2014
  • Auteur : Denis Coupvent-Desgraviers - Laboratoire de Physique de la Matière Condensée (CNRS, Ecole Polytechnique)
  • Responsable thématique : Dirk Hoffmann (Centre de Physique des Particules de Marseille (CPPM-IN2P3))
  • Relecteur 1 : Alain Prignet
  • Relecteur 2 : Fabien Wernli
  • Relecteur 3 : Jean-Marc Petit
Mots clés
Description
Fonctionnalités générales

Le projet BusyBox, souvent appelé le "couteau suisse des GNU/Linux", combine un grand nombre d'utilitaires systèmes Unix/Linux en les réunissant en un seul exécutable portant le même nom que le projet. BusyBox intègre entre autres un shell (ash), un serveur HTTP, un serveur FTP, un serveur TFTP, un serveur DHCP, et bien d'autres.

BusyBox permet de réduire considérablement l'empreinte mémoire des utilitaires systèmes et des programmes : de 4 Ko à 1 Mo suivant le mode de compilation (bibliothèques statiques ou dynamiques) et le nombre d'utilitaires. Les systèmes embarqués sous GNU/Linux, aux ressources matérielles limitées, utilisent en très grande majorité BusyBox. Ce dernier est installé dans la plupart des "boxes" fournies par les fournisseurs d'accès à Internet, dans les logiciels embarqués pilotant les routeurs, dans les distributions dites "lives" (exécution du système d'exploitation sans installation) sur CD/DVD ou sur clé USB comme Knoppix.

C'est un outil incontournable dans le monde de l'embarqué. Par défaut, tous les utilitaires systèmes Unix/Linux les plus utilisés (bzip2, cp, date, echo, sed, ls, tar, which, ...) ainsi que beaucoup de logiciels serveurs (HTTP, FTP, TFTP, DHCP, ...) sont proposés à la compilation. Toutefois, il est possible de les choisir un à un à l'aide d'un menu intuitif pour qu'ils soient ou non inclus dans l'exécutable final.

Autres fonctionnalités
  • C'est un exécutable unique qui utilise son propre nom ($0) afin de déterminer quel utilitaire exécuter (fonctionne aussi avec les liens matériels ou symboliques)
  • Il peut remplacer jusqu'à 200 utilitaires standards de la "Single Unix Specification"
  • Peut remplacer "init" et "udev"
Interopérabilité

BusyBox entre dans le cadre de la conception d'un système embarqué. C'est un élément du système d'exploitation. C'est pourquoi il est indispensable d'avoir un chargeur de démarrage, un noyau Linux et un système de fichiers fonctionnels pour utiliser BusyBox. Cependant, ce dernier peut être testé en "chrootant" le répertoire contenant l'ensemble des bibliothèques et l'exécutable BusyBox. En général BusyBox est cross-compilé sur un processeur x86 pour une architecture ARM ou MIPS.

Contexte d'utilisation dans mon laboratoire/service

Le Laboratoire de Physique de la Matière Condensée utilise une carte électronique embarquée pour piloter à distance un oscilloscope numérique sur une expérience scientifique de type RMN (Résonance Magnétique Nucléaire). Le chargeur de démarrage, le noyau Linux et l'ensemble du système de fichiers de la carte électronique ont été complètement ré-installés et personnalisés pour l'expérience scientifique. BusyBox est pleinement fonctionnel sur cette carte embarquée.

Limitations, difficultés, fonctionnalités importantes non couvertes
  • Ne fonctionne que sous GNU/Linux (il existe un projet OpenSolaris)
  • Tous les exécutables Unix/Linux ne sont pas inclus dans BusyBox.
  • Une fois compilé, pour tester le bon fonctionnement de BusyBox, il faut "chrooter" le répertoire (ce qui n'est pas toujours sans erreur).
  • Certains exécutables n'ont pas autant d'options que les versions classiques (Exemple: find)
Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

L'écrasante majorité des cartes pilotées par GNU/Linux et vendues dans le commerce contiennent BusyBox. Il est possible de concevoir sa propre carte embarquée et d'y inclure un chargeur de démarrage (bootloader), un noyau Linux, un système de fichiers minimaliste (les répertoires /etc et /dev) et BusyBox (à la suite de sa compilation sont créés automatiquement l'exécutable et les répertoires /bin, /lib, /sbin et /usr).
En outre, la quasi totalité des distributions GNU/Linux fournissent les binaires, ainsi que les sources de BusyBox.
BusyBox existe aussi pour le système Android (dans le "market" de Google).

Plates-formes

GNU/Linux, Android, et toutes les plateformes matérielles supportées par gcc

Logiciels connexes
  • gcc, linux, init, udev
  • Dropbear = Client et serveur SSH "all in one" qui tient en environ 100k.
  • SSMTP = Agent de Transport de Mail extrêmement simple.
  • ntpclient = Client NTP minuscule. A partir de la version 1.16.x, BusyBox a aussi un applet ntpd.
  • Lua = Langage de script Brésilien, léger, complet et populaire.
  • forth = Langage bien connu pour écrire des programmes petits et rapides, vieux de plusieurs décennies, très utilisé de OpenBIOS au séquencement des moteurs contrôlés par ordinateur.
Autres logiciels aux fonctionnalités équivalentes
Environnement de développement
Type de structure associée au développement

L'auteur initial du projet est Bruce Perens (développeur et avocat). Les développeurs actifs sont Erik Andersen, Rob Landley, Denys Vlasenko et beaucoup d'autres.

Eléments de pérennité

Utilisé dans l'écrasante majorité de systèmes embarqués tournant sous GNU/Linux.

Références d'utilisateurs institutionnels

Quelques exemples connus par l'auteur et les relecteurs de la fiche.

  • CENBG
    • Projet ALEA (Acquisition Linux Embarquée & Autonome), également utilisé en industrie via la valorisation CNRS
  • LAAS
    • Dans quadcopter industriel, adapté au labo
    • Dans des routeurs utilisant OpenWRT pour différents types de passerelles wifi/filaire/3G pour robots d'extérieur
    • Sur un développement maison : capteur autonome d'efforts (genre bâton de relais de course à pied) avec cartes CPU Gumstix
  • CC-IN2P3
    • Sur matériel Director 48000 de la société Brocade (connexion de dérouleurs de bandes des Storagetek aux serveurs) équipé avec FabricOS
    • Cartes de prise en main à distance (DRAC) pour l'accès à distance à un millier de serveurs environ
  • Utilisation (personnelle) dans un téléphone/agenda
  • La distribution "linux minimisé" plopLinux, utilise BusyBox.

Visiteurs de la fiche, si vous connaissez le produit et voulez bien partager votre expérience, utilisez les commentaires en bas de page pour ajouter une description de votre projet.

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur

Voici le lien contenant une définition de l'ensemble des commandes principales contenues dans BusyBox : http://www.busybox.net/downloads/BusyBox.html

Il existe également une Foire Aux Questions (F.A.Q.) : http://www.busybox.net/FAQ.html

Un bref résumé "Busybox in a nutshell" a été rédigé par Pierre Ficheux, un des leaders francophones en programmation Linux embarqué : http://pficheux.free.fr/articles/lmf/hs24/busybox/bb_nutshell.pdf

Divers (astuces, actualités, sécurité)

L'URL suivant vous dirige vers un émulateur où vous pourrez tester BusyBox dans sa version 1.20.0 :
http://www.busybox.net/live_bbox/live_bbox.html

Tapez ensuite la commande : busybox | more

Vous verrez alors la version de BusyBox et l'ensemble des utilitaires compilés pour l'émulateur.

Tapez ensuite la commande ls -l /bin/ls

Vous verrez alors que cet exécutable est en vérité un lien symbolique vers busybox.

Contributions

La procédure pour contribuer au projet est expliquée à la page : http://www.busybox.net/developer.html