Equipos y materiales > Openwrt & LEDE
[Tutorial] Cómo compilar OpenWrt a nuestro gusto
(1/99) > >>
jar229:
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:

--- Código: ---sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev
--- Fin del código ---

En Fedora:

--- Código: ---sudo yum install subversion git-core gawk flex quilt gcc ncurses* zlib* gcc-c++
--- Fin del código ---


Bajamos las fuentes de la última versión de la rama trunk usando git:

--- Código: ---git clone git://git.openwrt.org/openwrt.git
--- Fin del código ---
Alternativa (Repositorio con todos los parches para bcm63xx, versión Barrier Breaker 14.04):

--- Código: ---git clone git://github.com/openwrt-es/barrier-breaker-openwrt.git -b barrier-breaker_14.04
--- Fin del código ---

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.

--- Código: ---cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

--- Fin del código ---

Para verificar que no nos falten paquetes/dependencias, y que está todo correcto ejecutamos

--- Código: ---make prereq
--- Fin del código ---

Si no hay ningún mensaje de error, continuamos y escribimos

--- Código: ---make menuconfig
--- Fin del código ---

Ahora es cuando seleccionamos el hardware para el que queremos compilar.
Siguiendo el ejemplo, debemos cambiar el 'Target System' a BCM63xx



En '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.


--- Código: ---make kernel_menuconfig
--- Fin del código ---

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:


--- Código: ---make -j 5 V=cs
--- Fin del código ---
(procesador con 4 núcleos)

--- Código: ---make -j 3 V=cs
--- Fin del código ---
(procesador con 2 núcleos)

--- Código: ---make V=cs
--- Fin del código ---
(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  >:D

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  :D
jar229:
:: Consejos ::
Obtener más información sobre un paquete:
1) Situarse encima del paquete en cuestión:

2) Presionar "?". De esta forma, aparecerá un menú que dará una descripción más extensa y que también informará de las dependencias de dicho paquete



Buscar la localización dentro del menú de un paquete:
1) Si en cualquier parte del menú de openwrt presionamos "/", aparecerá un menú en el cual podremos introducir el nombre del paquete que queremos buscar.

2) Introducimos el nombre del paquete que queremos buscar y pulsamos enter. Nos aparecerá la misma información que al "Obtener más información sobre un paquete". Si nos fijamos bien, aparece la localización del paquete dentro del menuconfig.



Actualizar el workspace sin recompilar el Toolchain:
1) Limpiamos la compilación actual de OpenWrt.

--- Código: ---make clean
--- Fin del código ---
2) Actualizamos a través de SVN a la última versión

--- Código: ---svn update
./scripts/feeds update
--- Fin del código ---
3) Opcional: Borramos la configuración actual si queremos compilar para otra plataforma/dispositivo:

--- Código: ---rm -rf .config .config.old
--- Fin del código ---
jar229:
Cómo optimizar las compilaciones para routers con tan sólo 4 megas de flash: https://foro.seguridadwireless.net/openwrt/compilar-openwrt-a-nuestro-gusto/380/ . Gracias a mekkon por la aportación
feluco:
Muy buen trabajo  ;), a ver si trasteo con ello en una máquina virtual.
Noltari:
Muy buen tuto, jar229 ;D.

He modificado el V=99 por V=cs, ya que V=99 era para Backfire 10.03.1 y anteriores.
En cuanto pueda añado mas cosas al tutorial.

Saludos!
Navegación
Índice de Mensajes
Página Siguiente

Ir a la versión completa