jueves, 23 de febrero de 2012

Compilación cruzada con OpenWrt (cross compiling)

Voy a ir explicando en sucesivos posts, cómo he montado la plataforma para que el Átropos pudiera funcionar, desde el punto de vista del firmware.



en este primer round vamos a ver cómo compilar programas que hemos hecho nosotros mismos, para el firmware OpenWrt.
Los requisitos previos a este punto, son:
-Tener un router ya flasheado con OpenWrt, con wget instalado
-Tener un equipo con GNU/Linux, en el cual, vamos a bajar el código fuente de OpenWrt
-En el equipo Linux vamos a tener:
    -Servidor FTP ya montado
    -Fuentes de la misma versión de OpenWRT que tenemos cargado en el router (en mi caso es un kamikaze 8.09.2) Bajar estas fuentes

El escenario que vamos a ver es el más sencillo de todos. No vamos a construir una imagen nueva para incluir el SDK en el router, sino que vamos a usar el SDK en la máquina Linux. Los motivos principales son, ahorrarnos espacio en el router, y trabajar más cómodamente en la máquina linux, donde podemos tener más herramientas que un simple editor vi. Además de no tener  que reflashear el router.

nos colocamos en nuestro directorio de trabajo y lanzamos

linux$ wget http://downloads.openwrt.org/kamikaze/8.09.2/kamikaze_8.09.2_source.tar.bz2
linux$ bzip2 -dc kamikaze_8.09.2_source.tar.bz2 | tar -xv

ya tenemos bajado y descomprimido los fuentes en una carpeta.

Nota: A partir de este punto es recomendable automatizar estas tareas en un script bash.

Añadimos al PATH la ruta a los binarios de gcc de la plataforma, e indicamos que el compilador actual es el de mips (si ls arquitectura del router es MIPS) .

linux$ export PATH=$PATH:/<tu ruta de trabajo>/kamikaze_8.09.2/staging_dir/toolchain-mips_gcc4.1.2/bin/
linux$ export CC=mips-linux-uclibc-gcc



Suponiendo que tenemos un sencillo programa en c, que se llame "holamundo.c", hacemos:

linux$ mips-linux-gcc  -o holamundo holamundo.c

Si usamos librería externas como math.h, las enlazamos normalmente (-lm para math.h) como lo haríamos con un gcc corriente.

Si es necesario, copiamos el fichero generado a donde tenemos apuntando nuestro servidor de ftp

linux$ cp holamundo /<ruta de tu ftp>/<directorio de tu usuario>/holamundo


Nos vamos a nuestro flamante router, y en una sesion abierta de SSH, lanzamos

router$ wget ftp://<ip de tu maquina linux>/<ruta relativa al programa>/holamundo
router$ chmod 770 holamundo
router$ ./holamundo

Y ya tenemos corriendo nuestro programa de prueba en OpenWrt