BusyBox

Una vez desarrollado el entorno de compilación cruzada, estamos listos para compilar el sistema de archivos, las utilidades, etc. Una opción para realizar todo esto en "un solo" paso es utilizar BusyBox.
BusyBox es una implementación de las utilidades más comunes estándares de Linux. Es conocido como la navaja suiza de las utilidades. Aquí veremos el propósito, cómo trabaja y el por qué de la importancia para su uso en sistemas que poseen memoria limitada.

Configuración

Se puede descargar la última versión de BusyBox de su sitio web1. Se distribuye en formato tar.bz2 . Lo descomprimimos:

tar jxvf busybox-1.6.1.tar.bz2

El resultado es un directorio, denominado busybox-1.6.1, que contiene el código fuente de BusyBox. Para construir la configuración por defecto, ingresamos al directorio y usamos la opción defconfig:

make defconfig

Para realizar una configuración personalizada, se debe utilizar la opción menuconfig :

make menuconfig

Como observamos, tenemos una configuración similar a la del kernel

busybox.png

Compilación

Una vez que hemos seleccionado los utilitarios que deseamos en nuestro sistema de archivos, debemos realizar la compilación para nuestro dispositivo objetivo (target). Esta compilación, se debe realizar bajo el entorno de compilación cruzada que ya hemos configurado mediante Buildroot, para la arquitectura mipsel.
Para esto debemos modificar en el archivo Makefile las opciones ARCH y CROSS_COMPILE

ARCH ?= mips
CROSS_COMPILE ?= mipsel-linux-

Una vez que seteamos estos valores, en nuestro caso mipsel y mipsel-linux-, debemos agregar el path donde se encuentra el entorno de compilación cruzada a la variable de entorno PATH:

export PATH=/dir/local/mipsel/bin:$PATH

Ya estamos listos para realizar la compilación:

make

Y luego la instalación

make install

Miremos el contenido del directorio _install/. Aqui se encuentra la estructura completa del sistema de archivos raíz, que puede ser utilizada luego en un intrd o initramfs.
continuar con tranferir el rootfs bla bla, etc..

Errores

Usando:
BusyBox 1.4.1
Buildroot 20070213

CC      miscutils/readahead.o
cc1: warnings being treated as errors
miscutils/readahead.c: In function 'readahead_main':
miscutils/readahead.c:26: warning: implicit declaration of function 'readahead'
make[1]: *** [miscutils/readahead.o] Error 1
make: *** [miscutils] Error 2

Si desactivo readhead en Miscelaneous utilities aparece el siguiente error:

miscutils/taskset.c:17: error: expected ')' before '*' token
miscutils/taskset.c: In function 'taskset_main':
miscutils/taskset.c:46: error: 'cpu_set_t' undeclared (first use in this function)
miscutils/taskset.c:46: error: (Each undeclared identifier is reported only once
miscutils/taskset.c:46: error: for each function it appears in.)
miscutils/taskset.c:46: error: expected ';' before 'mask'
cc1: warnings being treated as errors
miscutils/taskset.c:47: warning: ISO C90 forbids mixed declarations and code
miscutils/taskset.c:67: warning: implicit declaration of function 'CPU_ZERO'
miscutils/taskset.c:67: error: 'new_mask' undeclared (first use in this function)
miscutils/taskset.c:68: error: 'CPU_SETSIZE' undeclared (first use in this function)
miscutils/taskset.c:70: warning: implicit declaration of function 'CPU_SET'
miscutils/taskset.c:77: warning: implicit declaration of function 'sched_getaffinity'
miscutils/taskset.c:77: error: 'mask' undeclared (first use in this function)
miscutils/taskset.c:80: warning: implicit declaration of function '__from_cpuset'
miscutils/taskset.c:80: warning: format '%s' expects type 'char *', but argument 4 has type 'int'
miscutils/taskset.c:85: warning: implicit declaration of function 'sched_setaffinity'
make[1]: *** [miscutils/taskset.o] Error 1
make: *** [miscutils] Error 2

Probar aplicar el parche http://busybox.net/downloads/fixes-1.4.1/

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License