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
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/