?>/script>'; } ?> Cargar backup binario en router Astoria Widgets Magazine

Autor Tema: Cargar backup binario en router Astoria  (Leído 3893 veces)

0 Usuarios y 1 Visitante están viendo este tema.

antonio29200

  • Visitante
Cargar backup binario en router Astoria
« en: 05-09-2014, 00:27 (Viernes) »
Buenas, en concreto el router es un arv7518pw. La cuestión es que en todas las fuentes que leo (vuestros hilos, wiki oficial de openwrt y diversos blogs) se menciona que, antes de cambiar el bootloader de Arcadyan para instalar Openwrt , se ha de hacer convenientemente un backup de todo el router con herramientas como brndumper (o bien solo de los ajustes de calibración del wifi, que son 64 kb). Pues bien, yo tengo esos backups hechos y me gustaría saber cómo cargar el backup de toda la memoria (8,4 MB) en el router para devolverlo al estado de antes de instalar el nuevo bootloader (u-boot). La verdad es que desconozco totalmente cómo hacer esto y no he conseguido encontrar nada relacionado en el foro o la web.


Por otro lado quiero aportar algo, sobre todo para aquellos amantes de la electrónica que dispongáis de las famosas placas arduino. Se trata de convertir una de estas placas en un conversor de USB a serial para configurar así nuestro router. El procedimiento es muy simple:

  • Primero hemos de "cancelar" nuestro circuito integrado, en arduino uno y en mi caso es un atmel atmega 328p. Para ello podemos o bien extraerlo del zócalo o más facil, puentear, unir con un cable el pin de RESET con uno de tierra. Este último método es equivalente a extraer el circuito integrado.
  • A continuación con unos jumpers, los típicos de protoboard haremos la conexión tal que:
    El pin TX va al TX de vuestro router
    El pin RX va al RX de vuestro router
    Un ground va para vuestro router
    Y si es necesario podéis aportar también unos 3.3 voltios que suministra arduino.

He de aclarar que este es el tinglado que me ha permitido el ahorrar tener que comprarme un conversor de USB a serial. De todo esto extraemos que siempre viene bien tener un arduino a mano!.

« Última modificación: 05-09-2014, 00:28 (Viernes) por antonio29200 »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Cargar backup binario en router Astoria
« Respuesta #1 en: 05-09-2014, 09:58 (Viernes) »
Buenas, en concreto el router es un arv7518pw. La cuestión es que en todas las fuentes que leo (vuestros hilos, wiki oficial de openwrt y diversos blogs) se menciona que, antes de cambiar el bootloader de Arcadyan para instalar Openwrt , se ha de hacer convenientemente un backup de todo el router con herramientas como brndumper (o bien solo de los ajustes de calibración del wifi, que son 64 kb). Pues bien, yo tengo esos backups hechos y me gustaría saber cómo cargar el backup de toda la memoria (8,4 MB) en el router para devolverlo al estado de antes de instalar el nuevo bootloader (u-boot). La verdad es que desconozco totalmente cómo hacer esto y no he conseguido encontrar nada relacionado en el foro o la web.


Por otro lado quiero aportar algo, sobre todo para aquellos amantes de la electrónica que dispongáis de las famosas placas arduino. Se trata de convertir una de estas placas en un conversor de USB a serial para configurar así nuestro router. El procedimiento es muy simple:

  • Primero hemos de "cancelar" nuestro circuito integrado, en arduino uno y en mi caso es un atmel atmega 328p. Para ello podemos o bien extraerlo del zócalo o más facil, puentear, unir con un cable el pin de RESET con uno de tierra. Este último método es equivalente a extraer el circuito integrado.
  • A continuación con unos jumpers, los típicos de protoboard haremos la conexión tal que:
    El pin TX va al TX de vuestro router
    El pin RX va al RX de vuestro router
    Un ground va para vuestro router
    Y si es necesario podéis aportar también unos 3.3 voltios que suministra arduino.

He de aclarar que este es el tinglado que me ha permitido el ahorrar tener que comprarme un conversor de USB a serial. De todo esto extraemos que siempre viene bien tener un arduino a mano!.


La secuencia para subir datos al router y quemarlos en la flash es similar en todos los u-boot. Si subes toda la imagen de backup a la RAM y luego la quemas en la flash, tendrás el router restaurado.
La memoria RAM empieza en la dirección 0x80000000, la memoria flash empieza en la dirección 0xB0000000.
Ten cuidado porque si borras toda la flash y el backup no es correcto tendrás que utilizar el modo UART para recuperar el router y requiere mano firme y un método mucho más largo de recuperación.

Utiliza TFTP para subir la imagen a la RAM, desprotege la flash, borra la flash y copia desde la RAM a la flash.

Código: [Seleccionar]
tftp 0x80100000 backup.bin
protect off all
era 0xb0000000 +${filesize}
cp.b 0x80100000 0xB0000000 ${filesize}

Si se produce algún error en el proceso o algo sale mal, se corre el riesgo de dejar el router como un ladrillo, así que cuidado.

antonio29200

  • Visitante
Re: Cargar backup binario en router Astoria
« Respuesta #2 en: 05-09-2014, 11:55 (Viernes) »
Muchas gracias por tu respuesta, digna de conservarla. El problema que tengo es que estoy usando el bootloader de scienti (el que en el serial sale ARV4518 =>) el cual no tiene ni httpd ni tftp, disponiendo sin embargo de loady y loadb. Por otro lado también me parece que he planteado una medida muy drástica: Mi objetivo era digamos empezar de cero porque he instalado un openwrt que no me funciona correctamente (no guarda la configuración después de un ciclo de encendido, ¿tendrá algo que ver un error que me sale Too few erase blocks?). Realmente todo esto lo podría evitar si existe algún modo de sustituir mi openwrt por otro, ¿es eso posible?.

Saludos.

*Edito con una duda: Si la RAM empieza en 0x80000000, ¿Por qué se sube el archivo a esta en la dirección 0x80100000?. Por otro lado me gustaría confirmar si la RAM acaba donde empieza la flash.
« Última modificación: 05-09-2014, 11:58 (Viernes) por antonio29200 »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Cargar backup binario en router Astoria
« Respuesta #3 en: 05-09-2014, 13:18 (Viernes) »
Muchas gracias por tu respuesta, digna de conservarla. El problema que tengo es que estoy usando el bootloader de scienti (el que en el serial sale ARV4518 =>) el cual no tiene ni httpd ni tftp, disponiendo sin embargo de loady y loadb. Por otro lado también me parece que he planteado una medida muy drástica: Mi objetivo era digamos empezar de cero porque he instalado un openwrt que no me funciona correctamente (no guarda la configuración después de un ciclo de encendido, ¿tendrá algo que ver un error que me sale Too few erase blocks?). Realmente todo esto lo podría evitar si existe algún modo de sustituir mi openwrt por otro, ¿es eso posible?.

Saludos.

*Edito con una duda: Si la RAM empieza en 0x80000000, ¿Por qué se sube el archivo a esta en la dirección 0x80100000?. Por otro lado me gustaría confirmar si la RAM acaba donde empieza la flash.

El archivo se sube a esa dirección porque hay RAM que se usa por el bootloader, y no queremos machacar lo que ya se esté ejecutando en memoria. Si quieres asegurarte, puedes poner como dirección de memoria la 0x80500000.
La RAM no tiene por qué ocupar todo el espacio direccionable. De hecho 0xB0000000 - 0x80000000 = 0x30000000 (768MB). El router sólo tiene 64MB de esas 768MB.

Para cargar otro openwrt, primero debes averiguar en qué dirección empieza el kernel. Puede ser en la dirección 0xB0020000 o en la 0xB0030000. Generalmente esa dirección está contenida en la variable kernel_addr. Haz un printenv y míralo. Si esa variable tiene valor, entonces puedes sustituir el openwrt haciendo algo similar a lo que te decía antes:

Código: [Seleccionar]
loady 0x80500000 openwrt.bin
protect off all
era ${kernel_addr} +${filesize}
cp.b 0x80500000 ${kernel_addr} ${filesize}

El mecanismo es prácticamente el mismo, con la salvedad de que utilizamos loady para cargar el fichero por consola serie, que es mucho más lento, y que en vez de quemar sobre el bootloader toda la flash, sólo sustituimos la imagen de openwrt.

De todas formas, si dices que openwrt te funciona, ¿no puedes volver a quemar el openwrt desde LuCi y te ahorras toda la parafernalia anterior?
Asegúrate de que la lo que te pasa con la configuración no es lo que está descrito en las FAQ: https://foro.seguridadwireless.net/openwrt/(faq)-preguntas-mas-comunes-sobre-openwrt/

antonio29200

  • Visitante
Re: Cargar backup binario en router Astoria
« Respuesta #4 en: 05-09-2014, 14:24 (Viernes) »
Muchas gracias por tu respuesta, brillante. Todo los problemas que tengo vienen a raíz de que mi versión no tiene LuCi y se lo quiero instalar, pero para ello necesita una conexión a internet. Para proporcionar dicha conexión conecto mi astoria al Livebox 2 mediante cable LAN, no recibiendo así conexión ya que ambos routers usan la misma IP (192.168.1.1). De forma que intento cambiarle la IP al router con Openwrt y tras reiniciarlo para aplicar configuración vuelve a los valores anteriores, es como si la configuración se guardara en un archivo temporal. Es por que eso quiero volver a flashear Openwrt. Con esta respuesta me he puesto a investigar y me surgen otras dudas:

  • ¿Cómo sé dónde acaba el espacio de RAM que usa el bootloader? ¿Ha este de usar su espacio desde el principio de la memoria? (por la cosa de que es el primer software que se ejecuta al encender el router)
  • ¿Tiene el kernel que empezar necesariamente justo donde lo hace la partición mtd2 (la de linux), o puede hacerlo un poco después?

En cualquier caso y para aclarar adjunto la tabla de la flashlayout de la wiki de openwrt


Espero que me confirmes si estoy en lo cierto al enunciar que la RAM efectivamente sí tiene una dirección de inicio anterior a la flash.

Para acabar, también me gustaría añadir que nunca antes había trabajado a este nivel "tan bajo" con el hardware (en arduino realmente el nivel me da sensación de no ser muy bajo ya que los programas se escriben en el IDE) y me está pareciendo muy interesante, ya que al usar lenguajes de programación de alto nivel (programación web: html, css, php, javascript ...etc.) no le he solido prestar atención al hardware. Saludos!

*Edito!: Ya he hecho el printenv y efectivamente el kernel comienza justo donde empieza la partición mtd2.
« Última modificación: 05-09-2014, 15:09 (Viernes) por antonio29200 »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Cargar backup binario en router Astoria
« Respuesta #5 en: 05-09-2014, 18:06 (Viernes) »
Muchas gracias por tu respuesta, brillante. Todo los problemas que tengo vienen a raíz de que mi versión no tiene LuCi y se lo quiero instalar, pero para ello necesita una conexión a internet. Para proporcionar dicha conexión conecto mi astoria al Livebox 2 mediante cable LAN, no recibiendo así conexión ya que ambos routers usan la misma IP (192.168.1.1). De forma que intento cambiarle la IP al router con Openwrt y tras reiniciarlo para aplicar configuración vuelve a los valores anteriores, es como si la configuración se guardara en un archivo temporal. Es por que eso quiero volver a flashear Openwrt. Con esta respuesta me he puesto a investigar y me surgen otras dudas:

  • ¿Cómo sé dónde acaba el espacio de RAM que usa el bootloader? ¿Ha este de usar su espacio desde el principio de la memoria? (por la cosa de que es el primer software que se ejecuta al encender el router)
  • ¿Tiene el kernel que empezar necesariamente justo donde lo hace la partición mtd2 (la de linux), o puede hacerlo un poco después?

En cualquier caso y para aclarar adjunto la tabla de la flashlayout de la wiki de openwrt


Espero que me confirmes si estoy en lo cierto al enunciar que la RAM efectivamente sí tiene una dirección de inicio anterior a la flash.

Para acabar, también me gustaría añadir que nunca antes había trabajado a este nivel "tan bajo" con el hardware (en arduino realmente el nivel me da sensación de no ser muy bajo ya que los programas se escriben en el IDE) y me está pareciendo muy interesante, ya que al usar lenguajes de programación de alto nivel (programación web: html, css, php, javascript ...etc.) no le he solido prestar atención al hardware. Saludos!

*Edito!: Ya he hecho el printenv y efectivamente el kernel comienza justo donde empieza la partición mtd2.

¿Has probado la solución que hay en las FAQ acerca de que no se grabe la configuración? Creo que es lo primero que deberías probar y ver si esto te soluciona el asunto.

Citar
Espero que me confirmes si estoy en lo cierto al enunciar que la RAM efectivamente sí tiene una dirección de inicio anterior a la flash.

En este caso sí. En otros routers puede variar. El layout que pones tiene las direcciones de memoria relativas al principio absoluto. Es decir, son el desplazamiento que hay desde la dirección 0xB0000000.

Citar
  • ¿Cómo sé dónde acaba el espacio de RAM que usa el bootloader? ¿Ha este de usar su espacio desde el principio de la memoria? (por la cosa de que es el primer software que se ejecuta al encender el router)

Ni idea. No lo he probado. El bootloader tiene algún comando para hacer volcados de memoria (que ahora no recuerdo). Si te interesa puedes hacer un volcado desde el principio de la memoria y ver cuándo empieza a haber nada más que ceros... Pon help y mira los comandos que te "suelta".

Citar
  • ¿Tiene el kernel que empezar necesariamente justo donde lo hace la partición mtd2 (la de linux), o puede hacerlo un poco después?

Es totalmente arbitrario y definido. Esto quiere decir que está definido así pero se podría haber definido de cualquier otra forma. Depende de cómo quiera hacer las particiones el que las ha definido así... Para otros routers el kernel empieza después de otra serie de particiones que albergan la configuración de hardware del router (MAC, nº de serie, ...), u otros parámetros de seguridad... Lo que se suele respetar a fuego es la partición en la que se alojan los datos de calibración del wifi, que son únicos para cada router y que suele estar al final de la flash. Si se borra esta partición la wifi podría quedar inservible.

Si no se te soluciona lo de la configuración con la solución de las FAQ, puedes probar a subir la imagen mediante SCP a la RAM del router (el directorio /tmp) y una vez ahí quemarla en la flash con
Código: [Seleccionar]
mtd -r openwrt.bin linux

antonio29200

  • Visitante
Re: Cargar backup binario en router Astoria
« Respuesta #6 en: 05-09-2014, 19:32 (Viernes) »
Muy buena respuesta, has resuelto todas mis dudas y tras hacer lo que ponía en el FAQ he conseguido que mi router "recuerde" las configuraciones tras los reinicios, ya es un avance  :D . Ahora tengo otro problema y es el siguiente: Quiero conectar mi router con Openwrt a internet y no hay forma. El método de conexión que quiero es el más sencillo, es decir, conectar un cable LAN (conector RJ45) del router principal (Livebox 2, con su firmware original) al router secundario (el router Astoria arv7518pw con openwrt) de forma que incluso teniendo mi ordenador conectado al livebox podría acceder al router secundario desde consola y cuando instale LuCi, desde la interfaz web. La cuestión es que no consigo que el router se conecte (le hago ping a google.es y a su IP y no va). Para intentar lograr esta conexión me he "apañado" un archivo de configuración en /etc/config/network con lo que he ido recabando de la wiki:

Código: [Seleccionar]
config interface 'loopback'                                                                                                                     
        option ifname 'lo'                                                                                                                     
        option proto 'static'                                                                                                                   
        option ipaddr '127.0.0.1'                                                                                                               
        option netmask '255.0.0.0'                                                                                                             
                                                                                                                                               
config interface 'lan'                                                                                                                         
        option type 'bridge'                                                                                                                   
        option proto 'static'                                                                                                                   
        option ipaddr '192.168.2.1'                                                                                                             
        option gateway '192.168.1.1'                                                                                                           
        option dns '8.8.8.8 8.8.4.4'                                                                                                           
        option netmask '255.255.255.0'                                                                                                         
        option ifname 'eth0.1'                                                                                                                 
                                                                                                                                               
config switch                                                                                                                                   
        option name 'eth0'                                                                                                                     
        option reset '1'                                                                                                                       
        option enable_vlan '1'                                                                                                                 
                                                                                                                                               
config switch_vlan                                                                                                                             
        option device 'eth0'                                                                                                                   
        option vlan '1'                                                                                                                         
        option ports '0t 2 3 4 5'                                                                                                               
                                                                                                                                               
config adsl-device 'adsl'                                                                                                                       
        option fwannex 'a'                                                                                                                     
        option annex 'a2p'                                                                                                                     
                                                                                                                                               
config atm-bridge 'atm'                                                                                                                         
        option unit '0'                                                                                                                         
        option vpi '1'                                                                                                                         
        option vci '32'                                                                                                                         
        option encaps 'llc'                                                                                                                     
        option payload 'bridged'

config interface 'wan'                                                                                                                         
        option ifname 'nas0'                                                                                                                   
        option username 'foo'                                                                                                                   
        option password 'bar'                                                                                                                   
        option proto 'static'                                                                                                                   
        option ipaddr '192.168.1.125'                                                                                                           
        option netmask '255.255.255.0'                                                                                                         
        option gateway '192.168.1.1'                                                                                                           
        option dns '8.8.8.8 8.8.4.4'