Compilando OpenWrt
Descargo en primer lugar toda la rama de desarrollo del svn de OpenWrt:
~$ svn co
https://svn.openwrt.org/openwrt/trunk/
Error validando el certificado del servidor de
'
https://svn.openwrt.org:443':
- El certificado no fue emitido por una autoridad marcada como
( Bla, bla, bla... )
- "Huella": a1:0a:d8:2d:af:4e:67:92:18:a0:27:b6:9f:2b:e1:12:08:28:a0:b1
¿(R)echazar, aceptar (t)emporariamente o aceptar (p)ermanentemente? t
Se nos crea en el HOME un directorio trunk/ con todo el tinglado
necesario para compilar .
Es necesario tener instalados los siguientes paquetes gcc, binutils,
patch, bzip2, flex, bison,make, gettext, pkg-config, unzip, ibz-dev y
libc headers para que no nos de error el
~/trunk$ make menuconfig donde podremos configurar el toolchain y el
firmware:
Hago los cambios oportunos y salgo guardándolos.
Continúo con un interminable
~/trunk$ make
que descargará las fuentes, construirá las herramientas para la
compilación cruzada y compilará el firmware.
:~/trunk$ make
++ mkdir -p /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ cd /home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2
++ mkdir -p bin lib include stamp
Checking 'bison'... ok.
make[1] world
make[2] tools/install
( Más bla, bla, bla )
make[2] package/rootfs-prepare
make[3] package/preconfig
make[2] target/install
make[3] -C target/linux install
make[3] -C target/sdk install
make[2] package/index
En ~/trunk/bin tendremos nuestro nuevo firmware con el que podremos
flashear la fonera.
*Compilar programas
Preparo un script llamado sdk el cual al invocarlo con el menu ( uso
pekwm como gestor de ventanas ) exporta la variable $PATH con la ruta
hacia los binarios del compilador y la variable CC para que use el
compilador de C para architectura MIPS.
export
PATH=$PATH:/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/bin/
export CC=mips-linux-uclibc-gcc
cd /home/kir/trunk/package
TERM="xterm -fn fixed +sb -bg black -fg green -T sdk"
$TERM
Doy permiso de ejecución al script y lo guardo en un directorio en la
ruta del PATH.
En ~/.pekwm/menu añado una entrada que llama a un xterm con los
settings anteriores:
Entry = "SDK" { Actions = "Exec $TERM -iconic -e sdk &" }
* wavemon
Descargo las sources de wavemon con apt en /home/kir/trunk/package ,
aplico el parche
http://kir.sdf-eu.org/wavemon_patch/ y hago un
/configure --host=mips-linux.
No da ningun error y ejecuto un make:
Ahora sí que da error, no encuentra ncurses.h
mips-linux-uclibc-gcc -O2 -Wall -c -o ui.o ui.c
ui.c:25:21: error: ncurses.h: No such file or directory
Creo que toca compilar ncurses.
$ cd build_dir/mips/ncurses-5.6/
/configure --host=mips-linux
make
Copio los archivos de ~/trunk/build_dir/mips/ncurses-5.6/lib
y ~/trunk/build_dir/mips/ncurses-5.6/include a
~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include
y bin/ respectivamente.Creo el enlace simbólico ncurses.h que apunta a
curses.h y repito el make para wavemon.
Aparecen varios warning pero finalmente compila sin errores:
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically
linked (uses shared libs), not stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 78695 2008-09-17 09:34 wavemon
A continuación "estripo" el binario para que ocupe menos:
mips-linux-strip wavemon
file wavemon
wavemon: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically
linked (uses shared libs), stripped
ls -l wavemon
-rwxr-xr-x 1 kir kir 71280 2008-09-17 09:41 wavemon.
Con strip el binario se redujo de 78965 a 71280 bytes.
Sólo queda pasarlo a la fonera con scp, wget o como nos venga en gana y
disfrutarlo:
* Netdiscover
Descargo las fuentes de netdiscover con apt:
~/trunk/package$ apt-get source netdiscover
cd netdiscover-0.3beta6/
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux
....
checking for pcap.h... no
configure: error: Cannot find pcap.h - You need libpcap installed.
Necesita libpcap, que ya está en
~/trunk$ cd build_dir/mips/libpcap-0.9.8/
En ~/trunk/build_dir/mips/libpcap-0.9.8/ipkg-install/usr tenemos los
directorios include/ y lib/ . Copio su contenido a
~/trunk/staging_dir/toolchain-mips_gcc4.1.2/include y lib/ como
anteriormente y repito el .configure
/configure --host=mips-linux
checking for libnet.h... no
configure: error: Cannot find libnet.h - You need libnet installed.
Bien, ya tragó con libpcap pero se atraganta con libnet, así que lo
descargo.
~/trunk/package$ wget
http://downloads.openwrt.org/sources/libnet.tar.gz
~/trunk/package$ tar zxvf libnet.tar.gz
~/trunk/package$ cd libnet/
El configure no da problemas pero make muestra un error:
In file included from libnet_asn1.c:60:
./include/libnet.h:117:10: error: macro names must be identifiers
Edito la línea que es un #define 1 y la cambio a #define
LIBNET_BIG_ENDIAN 1
A continuación ejecuto el make sin ningún error (aunque da varios
warnings) pero no me aparece ningun directorio con las librerias.
Cambio la estrategia e instalo otra versión desde el mismo ftp de
OpenWrt: wget
http://downloads.openwrt.org/sources/libnet-1.0.2a.tar.gz
Descomprimo, cambio al directorio, bla, bla, bla... y no funciona.
Nuevo intento descargando libnet con apt
~/trunk/package$ apt-get source libnet1
..
In file included from libnet_asn1.c:60:
./include/libnet.h:117:10: error: macro names must be identifiers
Ya empezamos ...
Edito y añado LIBNET_BIG_ENDIAN a la linea del #define 1 (#define
LIBNET_BIG_ENDIAN 1) y voilà que compila el jodido!
Ahora toca copiar los archivos .h y las librerias como anteriormente.. y
sigue sin ir la cosa.
Vuelvo a ejecutar el configure con la opción --prefix:
/configure --host=mips
--prefix=/home/kir/trunk/staging_dir/toolchain-mips_gcc4.1.2/
make
make install
Compila y se instala sin errores; cambio al directorio de netdiscover y
~/trunk/package/netdiscover-0.3beta6$ ./configure --host=mips-linux
y....
checking libnet.h usability... yes
checking libnet.h presence... yes
checking for libnet.h... yes
~/trunk/package/netdiscover-0.3beta6$ make
O.K.
cd src
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV),
dynamically linked (uses shared libs), not stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 441081 2008-09-18 09:36 netdiscover
mips-linux-strip netdiscover
file netdiscover
netdiscover: ELF 32-bit MSB executable, MIPS, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
ls -l netdiscover
-rwxr-xr-x 1 kir kir 367388 2008-09-18 09:38 netdiscover
Parece ser que para usar nuevas librerías, hay que compilarlas hay que
usando la opción --prefix en el ./configure; así le indicamos el
compilador dónde está el lib/ y el /include .
Los binarios están en
http://kir.sdf-eu.org/kamikaze_808
Enlaces:
Documentación de Kamikaze:
http://downloads.openwrt.org/kamikaze/docs/openwrt.html#x1-310002/
OpenWrt Programming:
http://people.bu.edu/ebishop/openwrt-programming.html
Build-root documentation:
http://downloads.openwrt.org/docs/buildroot-documentation.html
Compilación cruzada:
http://linuxemb.wikidot.com/tesis-c3