buildroot

Publié le par duteil

Buildroot

 

Buildroot: making Embedded Linux easy

Buildroot menuconfig

 

Buildroot est un ensemble de fichiers Makefiles et deand patches that makes it easy to generate a complete embedded Linux system. Buildroot can generate any or all of a cross-compilation toolchain, a root filesystem, a kernel image and a bootloader image. Buildroot is useful mainly for people working with small or embedded systems, using various CPU architectures (x86, ARM, MIPS, PowerPC, etc.) : it automates the building process of your embedded system and eases the cross-compilation process.

 

Les caractéristiques principales de Buildroot sont:

 

Can handle everything in your embedded system development project: cross-compiling toolchain, root filesystem generation, kernel image compilation and bootloader compilation. Buildroot is also sufficiently flexible that it can also be used for only one or several of these steps.

Is very easy to set up, thanks to its menuconfig, gconfig and xconfig configuration interfaces, familiar to all embedded Linux developers. Building a basic embedded Linux system with Buildroot typically takes 15-30 minutes.

Supports several hundreds of packages for userspace applications and libraries: X.org stack, Gtk2, Qt, DirectFB, SDL, GStreamer and a large number of network-related and system-related utilities and libraries are supported.

Supports multiple filesystem types for the root filesystem image: JFFS2, UBIFS, tarballs, romfs, cramfs, squashfs and more.

Can generate an uClibc cross-compilation toolchain, or re-use your existing glibc, eglibc or uClibc cross-compilation toolchain

Has a simple structure that makes it easy to understand and extend. It relies only on the well-known Makefile language.

 

Buildroot est maintenu par Peter Korsgaard, sous une licence GNU GENERAL PUBLIC LICENSE V2 (ou plus récente). Des mises à jour stables sont fournies tous les trois mois.

 

 

 

Buildroot est une suite de scripts au format Makefile permettant de générer de manière automatisée un système embarqué. Celui-ci prend en charge la compilation du bootloader, du noyau, des commandes de base grâce à busybox ainsi que des applications tierces.
Nous allons voir ici comment ajouter ses propres applications dans ce système en décrivant un cas d’utilisation simple. Pour approfondir le sujet, reportez vous à la documentation complète en anglais de buildroot.

Tout d’abord, les applications sont stockées dans le dossier nommé package. Pour ajouter une application, il faut créer un répertoire

 $builroot> mkdir package/helloworld 

Ce répertoire devra contenir:

  • le fichier helloworld.mk : les règles de construction

  • le fichier Config.in : inclusion dans la configuration du buildroot

Nous allons ensuite écrire un fichier Config.in pour notre application. Ce fichier suit les règles des fichiers Kconfig (plus d’info) utilisés par le noyau linux. Éditez le fichier package/helloworld/Config.in :

 config BR2_PACKAGE_HELLOWORLD bool "helloworld" help Hello World package says hello world to you see http://helloworld.com for more on this software 

Maintenant, il nous faut inclure ce fichier dans le système de configuration buildroot en éditant le fichier package/Config.in et en y ajoutant les lignes en fin de fichier (mais avant la dernière ligne « endmenu ») :

 menu "Custom packages" source "package/helloworld/Config.in" endmenu 

Vous pouvez tester la bonne prise en compte des modifications en tapant :

 $buildroot> make menuconfig 

Dans la section « Package Selection for the target » puis « Custom packages » votre application « helloworld » sera présente.
La création du fichier helloworld.mk est tout aussi simple. C’est le fichier qui va donner les règles de téléchargement, décompression, configuration, compilation et installation du logiciel.

Les règles génériques de buildroot utilisent le fichier Makefile à la racine du projet pour compiler (make) puis installer (make install) le paquet.

Afin que le paquet soit cross compilé correctement, le Makefile doit utiliser les variable $(CC) et $(LD) en lieu et place des commandes ‘gcc’ et ‘ld’.

La variable $(DESTDIR) contenant le répertoire de destination du paquet installé est utilisée lors du ‘make install’.

Un exemple de Makefile serait dans notre cas :

 # # sample Makefile for helloworld # SRC=helloworld.c OBJ = helloworld.o CFLAGS = -Wall -Wextra TARGET=helloworld # rules all: $(TARGET) $(TARGET): $(OBJ) $(CC) $^ -o $@ %.o: %.c $(CC) -c $(CFLAGS) $^ -o $@ .PHONY: clean clean: rm -f $(OBJ) install: cp helloworld $(DESTDIR)/bin/helloworld 

Le fichier helloworld.mk correspondant sera alors :

 # # helloworld # basic building rules # HELLOWORLD_VERSION = 1.1 HELLOWORLD_SOURCE = helloworld-$(HELLOWORLD_VERSION).tar.gz HELLOWORLD_SITE = http://helloworld.com/dl/$(HELLOWORLD_SOURCE) HELLOWORLD_INSTALL_STAGING = YES define HELLOWORLD_BUILD_CMDS $(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all endef define HELLOWORLD_INSTALL_STAGING_CMDS $(MAKE) DESTDIR=$(STAGING_DIR) -C $(@D) install endef define HELLOWORLD_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/helloworld \ $(TARGET_DIR)/bin/helloworld endef $(eval $(call GENTARGETS,package,helloworld)) 

Le STAGING_DIR correspond au dossier contenant toutes les dépendances pouvant être utilisées pour générer les binaires. Le dossier TARGET_DIR correspond au rootfs tel qu’il sera généré. La séparation des deux dossiers permet, dans le cas des librairies par exemple, de ne pas installer les fichiers d’includes (fichier.h) sur le rootfs tout en les gardant disponibles pour compiler d’autres packages dépendant de cette librairie.

Il ne reste alors qu’à copier votre package source helloworld-1.1.tar.gz dans le répertoire dl de buildroot (sinon il sera téléchargé a l’adresse $(HELLOWORLD_SITE)) et taper la commande

 $buildroot> make 

Vous pourrez alors retrouver votre binaire helloworld installé dans le dossier output/target/bin/ ainsi que dans les images output/images/rootfs.ext2 ou output/images/rootfs.tar.gz selon les options sélectionnées lors du make menuconfig.

 

Publicité

Publié dans ubuntu

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article