Comenzando con nuevo proyecto, me veo en la necesidad de preparar el toolchain de OpenWRT para poder compilar paquetes, la idea final que perseguimos es poder compilar OpenPANA para poder correr este protocolo en OpenWRT.

Para poder generar el firmware de OpenWRT y el toolchain, necesario este último para poder realizar la compilación cruzada de paquetes para la arquitectura seleccionada para el firmware en cuestión, necesitamos tener instalados una serie de paquetes básicos.

Como realizando este proceso en una Debian 6.0 (squeeze), lo primero es instalar los paquetes básicos, para ello hacemos:

user@computer:$ sudo apt-get install gcc g++ binutils patch bzip2 flex bison make gettext unzip libz-dev libc6 ncurses-dev subversion libxml-simple-perl gawk git-core

Con lo que a continuación ya podremos descargar el trunk de OpenWRT de los repositorios:

user@computer:$ svn co svn://svn.openwrt.org/openwrt/trunk/

Si somos root nos dará un aviso al compilar, así que mejor usar una cuenta de usuario

A continuación haremos:

user@computer:$ cd trunk
make menuconfig

En las opciones base, añado libpthreads ya que en nuestra caso estamos interesados en tener disponible gestión de hilos.

Una vez hecho esto, ya podremos compilar, obtendremos el firmware para nuestra arquitectura (en nuestro caso una Broadcom que va en un Linksys WRT54G) como también obtendremos el toolchain necesario para la compilación cruzada de aplicaciones/paquetes.

user@computer:$ make

Aunque si lo que queremos es solamente el toolchain, haremos:

user@computer:$ make toolchain

Hecho make o make toolchain, tendremos el toolchain en ambos casos y el firmware solo en el primer caso para la arquitectura que a nosotros nos interese.

Actualización
Podemos compilar de forma rápida un programita en C tipo “Hola Mundo!” para ver que todo funciona con normalidad, para ello:

Creamos con joe o vi, un programa en holamundo.c con el siguiente código:

user@computer:$ joe holamundo.c
#include

int main(char **argv, int argc){

printf("Hola mundo!!!\n");

}

A continuación exportamos el PATH añadiendo al actual, la ruta el compilador de C para nuestra arquitectura destino:

user@computer:$ export PATH=$PATH:~/linksys/trunk/staging_dir/toolchain-mipsel_gcc-4.5-linaro_uClibc-0.9.32/bin/

Y pasamos a compilar:

user@computer:$ mipsel-openwrt-linux-uclibc-gcc -o holamundo holamundo.c

Y listo ya tenemos un ejecutable que podemos ejecutar dentro de nuestro Linksys.

Ahora solo nos queda llevarnos el binario de holamundo a nuestro Linksys Wrt54G y ejecutarlo:

user@computer:$ ssh 192.168.2.5

Password:

BusyBox v1.15.3 (2010-03-19 05:58:57 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
  |__| W I R E L E S S F R E E D O M
BackFire (10.3-rc1, r20254)
-----------------------
* 1/3 shot Kahlua In a shot glass, layer Kahlua
* 1/3 shot Bailey's on the bottom, then Bailey's,
* 1/3 shot Vodka then Vodka.
---------------------------------------------------
root@OpenWrt:~# wget http://www.josevelasco.org/openwrt/holamundo
Connecting to www.josevelasco.org (86.109.170.38:80)
holamundo 100% |*******************************| 5730 --:--:-- ETA
root@OpenWrt:~# chmod a+x holamundo
root@OpenWrt:~# ./holamundo
Hola mundo!!!
root@OpenWrt:~#

Y como véis al final de la imagen anterior, “Hola mundo!!!” se muestra desde nuestro Linksys.