Cómo flashear el firmware Nightwing usando RedBoot

De LugroMesh

Tabla de contenidos

Como flashear el firmware Nightwing usando RedBoot

RedBoot es un completo ambiente bootstrap para sistemas embebidos. Basado el la HAL (Hardware Abstraction Layer) de eCos. RedBoot posee muchas funcionalidades, entre ellas esta la utilización de la interfaz de línea de comandos (CLI).

Por medio de la CLI podemos manipular la memoria Flash de nuestro dispositivo (en nuestro caso el router), también podemos bajar y cargar las imágenes a flashear por medio de un servidor tftp.

A Redboot podemos acceder por medio de una interfaz serial o por ethernet.

Para acceder a la interfaz CLI, utilizamos el adaptador serie, el cual cual conectamos al dispositivo. Este acceso lo hacemos por medio de minicom u otro emulador serie de consola.

En la consola debemos cortar el proceso de arranque normal al encenderse, lo hacemos apretando control-c más de 1 vez y entrando a la interfaz CLI.

En la consola serial, se nos presenta la CLI: RedBoot>

Los comandos a utilizar y una breve descripción de lo que hacen, son los siguientes:

   fconfig     Permite realizar cambios a la configuración por defecto de RedBoot
   fis init    Inicializa el Sistema de Imagen Flash (FIS)
   fis list    Lista el directorio de la FIS
   fis delete  Borra una imágen de la flash
   fis load    Carga una imágen flash en la memoria RAM
   fis create  Crea una imágen flash
   fis free    Muestra el espacio libre que queda en la memoria flash

En resúmen, los pasos a seguir para reflashear un dispositivo son los siguientes: Solo antes de la primera vez que flasheamos:

   fconfig   (si necesitamos cambiar algo de lo que viene por defecto)
   fis init

Siempre que flasheemos:

   load -r -b %{FREEMEMLO} nightwing-vmlinux.lzma
   fis create -r 0x80041000 -e 0x80041000 kernel
   load -r -b %{FREEMEMLO} nightwing-root.squashfs
   fis free (2° nº – 1° nº = nº a ser usado en el fis create del rootfs)
   fis create -l 0x2F0000 rootfs

Algo que debemos tener en consideracion es que utilizamos squashfs y mini_fo, la primera vez que arranquemos el dispositivo después de flashearlo, debemos esperar unos segundos (después de los mensages de wifi0) para que el mini_fo arranque y finalice el trabajo post flasheo. Después de lo cual se recomienda reiniciar nuevamente el dispositivo.

Verás éstos mensages:

   jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
   jffs2_build_filesystem(): unlocking the mtd device... done.
   jffs2_build_filesystem(): erasing all blocks after the end marker... done.
   mini_fo: using base directory: /
   mini_fo: using storage directory: /jffs

Cuando veas la última línea, significa que mini_fo ha terminado su trabajo y ya puedes reiniciar.


Una descripción de los comandos

fconfig

Este comando nos presenta una secuencia interactiva por medio de la cual configuramos Redboot. Es importante recordar asignar la IP del servidor que vamos a utilizar para cargar la imágenes a grabar.

   RedBoot> fconfig
   Run script at boot: true
   Use BOOTP for network configuration: false
   Local IP address: 192.168.1.123
   Default server IP address: 192.168.1.42
   DNS server IP address: 192.168.1.254
   GDB connection port: 9000
   Network debug at boot time: false

El script de boot tiene que tener estas lineas las cuales tienen que ser ingresadas seguidas de un salto de linea (sin los ..). Para finalizar de debe dejar un salto de linea al final (enter)

Boot script:
 .. fis load -l kernel
 .. exec

fis init

Este comando inicializa la FIS (Sistema de Imagen Flash). Normalmente se debe ejecutar una sola vez, al instalar por primera vez RedBoot en el router o cuando borramos las particiones para flashear por primera vez. Ejecutar este comando repetidamente puede causar la perdida de información previamente guardada en la FIS.

   RedBoot> fis init
   About to initialize [format] FLASH image system - continue (y/n)? y
   *** Initialize FLASH Image System
   ... Erase from 0xbffe0000-0xbfff0000: .
   ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .


fis list

Este comando lista las imágenes disponibles en la FIS. Algunas imágenes utilizadas por RedBoot tienen nombres fijos y poseen una ubicación reservada en la FIS (pueden ser vistos depués de utilizar el comando fis init).

Otras imágenes pueden ser manipuladas por el usuario.

   RedBoot> fis list
   Name FLASH addr Mem addr Length Entry point
   RedBoot 0xBFC00000 0xBFC00000 0x00030000 0x00000000
   FIS directory 0xBFFE0000 0xBFFE0000 0x0000F000 0x00000000
   RedBoot config 0xBFFEF000 0xBFFEF000 0x00001000 0x00000000

Este listado de las imágenes es cuando no se han creados imágenes propias o cuando se las borro; solo se ven las que posee RedBoot.


fis delete

Este comando borra una imagen de la FIS. Las imágenes reservadas por RedBoot no deben ser borradas.

   RedBoot> fis delete rootfs
   Delete image 'rootfs' - continue (y/n)? y
   ... Erase from 0xbfce0000-0xbffe0000: ...........................................
   ... Erase from 0xbffe0000-0xbfff0000: .
   ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .


fis load

Este comando es utilizado para transferir una imagen al router, la misma es almacena en la memoria RAM del router.

   RedBoot> load -r -b %{FREEMEMLO} nightwing-vmlinux.lzma
   Using default protocol (TFTP)
   Raw file loaded 0x80040c00-0x800f0bff, assumed entry at 0x80040c00


fis create

Este comando crea una imágen en el directorio de la FIS. Lo utilizamos para copiar lo que habíamos previamente cargado en la memoria RAM con el comando fis load.

   RedBoot> fis create -r 0x80041000 kernel
   ... Erase from 0xbfc30000-0xbfce0000: ...........
   ... Program from 0x80040c00-0x800f0c00 at 0xbfc30000: ...........
   ... Erase from 0xbffe0000-0xbfff0000: .
   ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .


fis free

Este comando nos muestra que áreas de la memoria flash están sin uso.

   RedBoot> fis free
   0xBFCE0000 .. 0xBFFE0000


Para mas información sobre el uso de Redboot ver la Guía de Usuario: http://ecos.sourceware.org/ecos/docs-latest/redboot/redboot-guide.html

Herramientas personales
Nightwing