BusyBox combines tiny versions of many common UNIX utilities / commands into a single small executable. It provides minimalist replacements for most of the utilities you usually find in GNU coreutils, util-linux, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins.
Prerequisites
Before you begin, ensure you have the following:
- A Linux host system (Ubuntu/Debian recommended).
- Cross-compilation toolchain for your target architecture.
- Basic understanding of Linux command-line operations.
Set Up the Cross-Compilation Toolchain
The first step is to install the cross-compilation toolchain suitable for your target architecture. For instance, to install a toolchain for ARM architecture, you can use the following command:
$ sudo apt-get install gcc-arm-linux-gnueabi
Following steps helps to cross compile Busybox to a shared executable and also static executable.
Configuration of Busybox ( Dynamic Executable )
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
If you want to keep everything as default, ( By default busybox create dynamic executable ) then, after you run above command it will open a screen, on which navigate to Exit and click “Yes” when asked as below.
This creates a file called “.config”
Configuration of Busybox ( Static Executable )
If you want to create static executable for busybox, so that it can run on any platform ( architecture specific ) independent of libraries, you need to change in menuconfig to select to build as static executable as below,
In menuconfig, Select “Busybox Settings”
From settings, Select “Build Busybox as a static binary” as below.
Compilation of Busybox
For compilation for Dynamic Busybox, once you have configured as above, enter below command to compile.
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
This creates the “busybox” executable
Installation of Busybox
By default Busybox create “./install” directory where your source code is OR you can change the install directory as below,
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
Changing install directory from command line,
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- CONFIG_PREFIX=/path/from/root install
Changing install directory from menuconfig from “Busybox Settings”
When Dynamically compiled (This is default compilation)
$ file _install/bin/busybox
_install/bin/busybox: ELF 64-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 3.2.0, BuildID[sha1]=d16cca32c42da434b296c84f6254e67490a109c5, stripped
When Statically compiled:
If you want to clean the compilation and delete every binaries generated, you can use below command
$ make clean
CLEAN applets
CLEAN busybox busybox_unstripped.map busybox_unstripped.out busybox_unstripped .kernelrelease
Note: you can also download toolchain from https://releases.linaro.org/archive/14.09/components/toolchain/binaries/
$ wget -c https://releases.linaro.org/archive/14.09/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.9-2014.09_linux.tar.bz2
$ tar xvf gcc-linaro-arm-none-eabi-4.9-2014.09_linux.tar.bz2
$ tar xvf gcc-linaro-arm-none-eabi-4.9-2014.09_linux.tar.bz2
$ export PATH=$PATH:$PWD/gcc-linaro-arm-none-eabi-4.9-2014.09_linux/bin