Para compilar OpenWrt necesitamos un sistema operativo Linux. Yo uso Ubuntu, pero el proceso será muy similar en otras distribuciones.
Si eres usuario habitual de windows y no quieres particionar, ni complicarte, puedes hacer servir perfectamente una máquina virtual
En nuestro caso, vamos a compilar la última versión de OpenWrt para la plataforma
bcm63xx con idea de instalarlo en el Huawei HG553.
Empezamos instalando las aplicaciones/librerias necesarias
Desde una ventana del terminal:
En Ubuntu:
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev
En Fedora:
sudo yum install subversion git-core gawk flex quilt gcc ncurses* zlib* gcc-c++
Bajamos las fuentes de la última versión de la rama trunk usando git:
git clone git://git.openwrt.org/openwrt.git
Alternativa (Repositorio con todos los parches para bcm63xx, versión
Barrier Breaker 14.04):
git clone git://github.com/openwrt-es/barrier-breaker-openwrt.git -b barrier-breaker_14.04
Al clonarlo con
git no se indica la revisión, pero es mucho más rápido que con SVN:
Ahora se nos habrá creado un nuevo directorio llamado
openwrt. Nos desplazamos hasta él y actualizamos e instalamos los paquetes.
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
Para verificar que no nos falten paquetes/dependencias, y que está todo correcto ejecutamos
make prereq
Si no hay ningún mensaje de error, continuamos y escribimos
make menuconfig
Ahora es cuando seleccionamos el hardware para el que queremos compilar.
Siguiendo el ejemplo, debemos cambiar el
'Target System' a
BCM63xxEn
'Target Profile', yo cambio el driver wifi que se incluye por defecto, por el 'propietario' de broadcom. Esto es una elección personal, así que depende del gusto de cada uno
A partir de aquí, empezamos a añadir las aplicaciones/paquetes que necesitamos. Voy a poner un par de ejemplos para que quede más claro.
Nos desplazamos hacia abajo, hasta encontrar
'LuCi'. Seleccionamos (dando a enter) y volvemos a seleccionar en el apartado
'1. Collections'.
Marcamos
luci (NEW).
Para seleccionar un paquete, y que este se incluya en la compilación, debemos dar 2 veces en la barra espaciadora hasta que quede marcado como en la captura (con un
*).
Para volver atrás, seleccionamos
Exit (en la parte inferior).
Volvemos a estar en el apartado de
LuCi 'general'.
Nos desplazamos hasta
'3. Aplications' y damos a
Select. Vamos marcando lo que nos interese. En mi caso:
luci-app-p910nd, luci-app-samba, luci-app-statistics y luci-app-wol.
Ya hemos terminado aquí, así que
Exit.
De nuevo otra vez en
LuCi 'general', nos vamos a
'5. Traslations' y bajamos hasta marcar
luci-i18n-spanish.
Hemos terminado con todo lo que tiene que ver con LuCi, así que
Exit y Exit. Volvemos al
menú general.
Lo primero, si nuestra idea es pinchar por USB un disco duro o pendrive, es darle soporte para que podamos trabajar con el. Así que vamos a
'Kernel modules' y entramos en
'Filesystems'. Aquí seleccionamos
kmod-fs-ext4 (sistema de ficheros ext en sus diversas variantes) y
kmod-fs-vfat (sistema de ficheros fat16 y fat32).
Exit y Exit y volvemos al
menú principal.
Vamos a
'Utilities' y entramos en
'Filesystem'. Buscamos y seleccionamos
ntfs-3g (lectura/escritura en discos con ntfs).
Exit y Exit y de nuevo al
menú principal.
Otra vez a
'Kernel Modules' y entramos en
'USB support'. Marcamos
kmod-usb-core, kmod-usb-ohci, kmod-usb-printer, kmod-usb-storage y kmod-usb2.
Exit.Nos desplazamos hacia arriba (seguimos en
'Kernel Modules'), hasta encontrar
'Native Language Support' y entramos. Seleccionamos
kmod-nls-cp437, kmod-nls-cp850, kmod-nls-cp852, kmod-nls-iso8859-15 y kmod-nls-utf8.
Exit y Exit. Otra vez al
menú principal.
Volvemos a darle a
Exit. Nos preguntará si deseamos guardar los cambios, a lo que por supuesto diremos que
sí.
Con esto, nos hemos preparado para compilar un firmware con la siguientes características: hardware basado en bcm6xx, driver wifi propietario de broadcom, LuCi, soporte para USB (impresora y discos con formato ext2, ext3, ext4, ntfs, fat16 y fat32) y samba.
Añadir más paquetes es sencillo. Localizarlos en la estructura (si no encontramos algo siempre podemos buscarlo si presionamos shift+7 y escribimos el nombre) y marcarlos. Ojo, no nos pasemos que puede salirnos un firmware que no 'quepa' en la flash de nuestro router.
Yo he incluído transmission, htop, wavemon y pure-ftpd.
Como yo uso mldonkey, necesito habilitar la
FPU emulation en el kernel. Si no es vuestro caso, podéis saltaros este paso.
make kernel_menuconfig
Después de un rato, veremos una captura como esta. Debemos marcar 'Enable FPU Emulation'. Damos a Exit y contestamos
sí, a guardar los cambios.
Y ahora a compilar.
Dependiendo del número de núcleos de nuestro procesador usaremos una de las siguientes instrucciones:
make -j 5 V=cs
(procesador con 4 núcleos)
make -j 3 V=cs
(procesador con 2 núcleos)
make V=cs
(procesador con 1 sólo núcleo)
Activar modo "verbose" (más información por consola): V=cs en revisiones posteriores a Backfire 10.03.1, en anteriores o Backfire 10.03.1 usar V=99.
El tiempo de compilación, dependerá de nuestra máquina. Puede ir desde un par de horas, a 6/7 horas (o más).
Paciencia
Si todo ha ido bien, veremos algo parecido a esta captura:
Cuando haya terminado el proceso, tendremos nuestro firmware listo en la carpeta
/home/nombre_de_usuario/openwrt/trunk/bin/brcm63xx/. El que fichero que nos interesa para flashear en el Huawei HG553 es:
openwrt-HW553-squashfs-cfe.bin