El Zyxel P660HW-D1 es un antiguo dinosaurio bastante conocido, al menos en su día. Únicamente tiene 2 megas de flash, y 16 de RAM.
Suena un poco a chiste meterle openwrt a este dispositivo, por eso lo he titulado como experimento. En este y otros sitios de internet hubo en su día divagaciones de como conseguir este propósito. Debido al tamaño de flash, creo que nadie siguió adelante con lo de instalar Openwrt.
Tuve que hacer un firmware muy reducido. Así que quité los drivers del wireless, que de todas formas no funcionan, ya que son propietarios y esta tarjeta concreta TNETW1350 no parece estar soportada (peor situación que los wifis de broadcom). También quité los drivers del ADSL, que casi cabían (y creo que podrían caber), pero por comodidad me los quité de en medio. Dropbear también me lo cargué y algunas otras cosas.
Bien, la clave para cambiar a Openwrt está en que los firms AR7 de estos router están compilados en little endian, mientras que el Zyxel usa por defecto Big endian. Aquí es donde está la magia, hay que
cambiar una resistencia de la placa de posición para que opere en modo little endian. Sí, hay que usar soldador para el proceso.
Cabe destacar que también hay que cambiar el bootloader por uno hecho a medida para este router (PSPboot), se hace todo de una tacada, lo he incluido en un archivo llamado allin1.bin
Material requerido:
Proceso para instalar Openwrt:Acceder por puerto serie al P660hw-d1, por defecto el baud rate es 9600, entrar en bootbase
Cambiar a modo debug:
ATSE
obtenemos la semilla, la metemos en el zynpass, nos da el password
que metemos en el siguiente comando (cambiar 110F397A por nuestro pass) :
ATEN1,110F397A
Cambiar la velocidad del puerto serie:
ATBA 5
(salimos de la consola serie y volvemos a entrar cambiando el baud rate a 115200)
Aunque no es necesario, es buena idea hacer backup de la flash entera, en caso de que más adelante cuando tengamos openwrt y quisiésemos volver a dejar exactamente como estaba nuestro router.
ATDO b0000000,200000
en nuestra consola serie le ordenamos que reciba el archivo, (usando screen se usaría el comando: exec !! rx -cb mybackup.bin)
habilitamos escritura:
ATBT1
Subir el firmware a la memoria del router:
ATUP94040000,1c0000
(se queda a la espera de que le enviemos el archivo, hacerlo inmediatamente)
en nuestra consola serie le ordenamos que envíe el archivo
allin1.bin(usando screen se haría con el comando: exec !! sx -kb allin1.bin)
una vez subido, borramos la flash entera y la reprogramamos:ATER0,33
(ahora ya no hay vuelta atrás)ATWF94040000,b0000000,1c0000
Advertencia: en caso de que falle esto último, la única forma de recuperar el router sería mediante JTAG
Apagamos el router y cambiamos de posición la resistencia que se indica en la foto

y encendemosel router normalmente, iniciando Openwrt.
Bueno y ahora ¿que hago con el router?, no tiene wifi, no tiene adsl.... bueno eso allá cada uno. El switch creo que funciona y se pueden hacer VLANs.
He localizado un montón de GPIOs en la placa, podríamos usar así como unos
20 GPIOs!!!. Es pobre el hardware pero para manejar GPIOs no necesitamos tanta potencia.

Espero más adelante dejar el buildroot, por si alguno quiere compilar su propio firmware a partir de lo que yo tengo. Ya que con el poco espacio que tiene la flash si nos interesa tener alguna función hay que quitar cosas, por ejemplo iptables todo lo relacionado con firewall, para dejar espacio a otra cosas que sí nos interese.
Aquí un log de todo el proceso
http://pastebin.com/HkcsccUwQuien dijo que no se podía?
Volver al firmware originalSupuestamente cuando instalamos Openwrt, habíamos hecho un backup entero de la flash,
mybackup.binVolver al firmware original y con el router exactamente como estaba de fábrica es muy fácil. Primero hay que tener en cuenta que Openwrt ahora mismo está funcionando en modo little endian, pero cuando cambiemos a Big Endian de nuevo, el procesador leerá los bytes de la flash cambiados de orden. Así que lo primero será poner del revés los bytes de nuestro backup:
dd if=mybackup.bin conv=swab of=mybackup-SWAB.bin
Ahora solo tenemos que transferir el archivo al router.
root@OpenWrt# cd /tmp/
root@OpenWrt:/tmp# wget ftp://192.168.1.35/mybackup-SWAB.bin
Connecting to 192.168.1.35 (192.168.1.35:21)
mybackup-SWAB.bin[ 100% |*******************************************************************************************| 2048k 00:00:00 ETA
Y flashearlo en la partición
allroot@OpenWrt:/tmp# mtd write mybackup-SWAB.bin all
Unlocking all ...
Writing from mybackup-SWAB.bin to all ...
root@OpenWrt:/tmp#
Apagamos el router volvemos a conectar la resistencia donde estaba originalmente y ya estamos de vuelta con el firm original.