OpenWrt en TD-W8970
Por el 1 de Abril de 2022
En este tutorial voy a instalar OpenWrt en un TP Link TD-WR8970 v1.2 usando el método del archivo de configuración ya que el método de asignarle como SSID `telnetd -p 1023 -l login`
no funcionó con la versión del firmware que usa el router.
Este modelo de router sólo es compatible con OpenWrt en las versiones v1 y v1.2 ya que las versiones posteriores usan los infames chips de Broadcom.
Referencias
Procedimiento
Enciendo el router con el botón reset pulsado durante unos 20 segundos. Luego accedo al mismo a través de http://192.168.1.1 (usuario y contraseña admin / admin) y descargo una copia de seguridad de la configuración.
Después convierto ese archivo binario de configuración a XML con la herramienta tpconf_bin_xml, lo abro con el editor de texto y después de la línea correspondiente a SerialNumber
inserto esta:
<Description val="TD-W8970 v1`telnetd -p 1023 -l login`" />
Una vez modificado el archivo XML lo convierto a binario con la misma herramienta y lo cargo desde la página del router. Éste reiniciará, y cuando arranque dará un login al hacer telnet al puerto 1023:
$ telnet 192.168.1.1 1023
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is \'^]\'.
TD-W8970 login:
El login es admin / 1234.
Preparando la imagen de OpenWrt para grabar
Partiré de una instalación inicial de OpenWrt 15 desde la cual actualizaré a OpenWrt 21.0.2. Hay que crear dos imágenes que van en distintas particiones del router:
$ dd if=openwrt-15.05.1-lantiq-xrx200-TDW8970-sysupgrade.image of=openwrt-15.05.1-lantiq-xrx200-TDW8970-sysupgrade-1.image bs=1310720 skip=1
Ahora hay que rellenar la imagen -sysupgrade-1.image de caracteres 0xFF
hasta llegar al tamaño de la partición /dev/mtd2 que en este modelo en concreto es de 6684672 bytes, para lo cual creo primero un archivo de ese tamaño lleno de 0xFF
y luego escribo al principio el archivo -sysupgrade-1.image:
$ dd if=/dev/zero ibs=1 count=6684672 | tr "\000" "\377" >padded.bin
6684672+0 records in
13056+0 records out
6684672 bytes transferred in 9.882 secs (676401 bytes/sec)
$ dd if=openwrt-15.05.1-lantiq-xrx200-TDW8970-sysupgrade-1.image of=padded.bin conv=notrunc
5632+1 records in
5632+1 records out
2883588 bytes transferred in 0.028 secs (102424890 bytes/sec)
Grabando las imágenes en el router
- openwrt-15.05.1-lantiq-xrx200-TDW8970-sysupgrade.image va a /dev/mtdblock1
- padded.bin va a /dev/mtdblock2
Grabo ambos ficheros a un pendrive formateado con FAT16 o FAT32, que al conectar al router aparece montado en el directorio /var/usbdisk/sda4. Logueado desde el telnet hago una copia de las particiones del router:
cat /dev/mtd0 > /var/usbdisk/sda4/mtd0
cat /dev/mtd1 > /var/usbdisk/sda4/mtd1
cat /dev/mtd2 > /var/usbdisk/sda4/mtd2
cat /dev/mtd3 > /var/usbdisk/sda4/mtd3
cat /dev/mtd4 > /var/usbdisk/sda4/mtd4
cat /dev/mtd5 > /var/usbdisk/sda4/mtd5
cat /dev/mtd6 > /var/usbdisk/sda4/mtd6
Ahora grabo los archivos mencionados anteriormente en el router. El primer comando da el error no such space left on device
, pero esto no es problema.
cat /var/usbdisk/sda4/openwrt-15.05.1-lantiq-xrx200-TDW8970-sysupgrade.image > /dev/mtdblock1
cat /var/usbdisk/sda4/padded.bin > /dev/mtdblock2
Ahora apago el router con el botón (ojo, no poner reboot
), vuelvo a encenderlo y ya puedo acceder a OpenWrt 15 a través del navegador.
Actualización a OpenWrt 21
Desde la página de OpenWrt del router he actualizado directamente a OpenWrt 21.02.2 desmarcando la opción de guardar la configuración. Ha actualizado sin problema, aunque como tardaba mucho al arrancar y pensé que no iba a funcionar al rato lo apagué y lo encendí, pulsando repetidamente el botón trasero para acceder a la consola de recuperación para hacer un Factory Reset:
# firstboot && reboot now
Tras reiniciar ya puedo acceder a un flamante OpenWrt 21.02.2.
Qué hacer si falla algo
Si algo va mal puedes recuperar el router por la conexión serie.