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