Herramientas de usuario

Herramientas del sitio

Traducciones de esta página:

desarrollo:firmware:bootloader

¡Esta es una revisión vieja del documento!


Bootloader

Introducción

¿Qué es el “bootloader”?

El bootloader es un conjunto de utilidades que permite la actualización del firmware de la CIAA por parte de un cliente en un entorno de producción, sin necesidad de disponer de herramientas especiales como una interface de depuración y eventualmente sin tener acceso al código fuente del sistema.

¿Cómo funciona el bootloader?

El bootloader tiene la capacidad de recibir una imagen del firmware que se quiere actualizar y grabarla en la Flash ROM del procesador. Para ello el desarrollador compila la imagen firmware, la prepara y la distribuye. El cliente recibe la imagen preparada del firmware y mediante una PC aplica dicha imagen a la CIAA que tiene instalada en el equipo.

¿Cómo está formado el bootloader?

El bootloader está formado por dos partes básicas: un conjunto de aplicaciones que corren en una PC y una conjunto de tareas y rutinas que se ejecutan en la CIAA.

Las aplicaciones que se ejecutan en una PC son dos:

  • Utilidad de preparación de la imagen.
  • Utilidad de aplicación de la imagen.

Estas herramientas se utilizan normalmente en dos computadoras distintas, la primera en la computadora del desarrollador y la segunda en la computadora del cliente en el sitio donde esta instalada la CIAA que se quiere actualizar.

Por otra parte en la CIAA se ejecutan las siguientes tareas:

  • Secuencia de arranque.
  • Recepción de la imagen de binaria.
  • Procesamiento de la imagen recibida.
  • Grabación de la imagen en la memoria Flash.

La forma en que estas tareas se ensamblan entre si y con el firmware principal de CIAA puede configurarse para obtener distintos modos de operación.

Arquitectura del bootloader

Para la implementación inicial del bootloader se optó por un proceso de grabacion On Fly. Para ello la memoria Flash se divide en tres partes: una parte muy pequeña contiene un Bootmanager, una segunda fraccion, se ubica el programa de Bootloader y el resto de la memoria que disponible para el MainFirmware. En el funcionamiento normal de la CIAA el Bootmanager toma el control durante el arranque y lo tranfiere al Main Firmware y este es el que opera el equipo. Cuando se requiere una actualizacion mediante una bandera se indica al Bootmanager que tranfiera el control al Bootloader, quien se encarga únicamente de actualizar la imagen del Main Firmware. Para ello el Bootloader borra el area de memoria ocupada por el Main Firmware y la escribe con la imagen enviada por la PC del cliente. Si por algun problema no se puede completar la actualización del Main Firmware, el Bootmanager seguirá transfiriendo el control al Bootloader hasta la actualización pueda completarse. De esta forma no aseguramos que el equipo no quede inoperable. Para la eventual actualizacion del Bootloader será necesesario un proceso indirecto: en un primer paso se actualizará el Main Firmware por uno especial destinado únicamente a la actualizacion del Bootloader. Con este Main Firmware corriendo se procederá a la actualización del Bootloader y una vez completa la actualización del mismo se volverá al Main Firmware original.

¿Qué tareas tiene cada parte del bootloader?

  • CIAA Firmware Image Preparation Utility (cfip): Es una utilidad que ejecuta en la PC del desarrollador y tiene siguientes funciones básicas:
    • La preparación de la imagen indicando a qué hardware corresponde y para qué modo de operación está compilado.
    • Encriptar la imagen: existe la opción de encriptar la imagen de firmware que se quiere distribuir para evitar las duplicaciones indebidas. En ese caso esta utilidad es la encargada de encriptar la imagen antes de la distribución.
    • Firmar la imagen: para asegurarse que la imagen no es alterada ya sea en forma deliberada o por un error en las comunicaciones la ultima etapa de la preparación consiste en la aplicación de una firma digital por parte del desarrollador.
  • CIAA Firmware Image Distribution Utility (cfid): Es una utilidad que ejecuta en la PC del cliente y tiene las siguientes funciones básicas:
    • Verificación de la imagen: la primera responsabilidad de la utilidad de la PC es asegurarse la proveniencia la imagen que se quiere grabar, que la misma no fue alterada en ninguna forma
    • Verificación del destino : la segunda responsabilidad de la utilidad es recuperar informacion del hardware al que se le enviará la imagen para ver si la misma puede aplicarse en dicho equipo.
    • Transmisión de la imagen: una vez que la imagen es aceptada como válida entonces la misma se divide en paquetes y envía a la CIAA verificando la correcta recepción de la misma.
  • Bootloader: es un programa completo para la CIAA formado por una version reducida del sistema operativo OSEK y del updater, una coleccion de rutinas preparadas para la actualizacion del firmware principal de la CIAA. En el sistema oprerativo OSEK se requieren, ademas de los servicios basicos, los siguientes controladores:
    • Serial Driver: Controlador del puerto serial del equipo, es utilizado como capa fisica del protocolo modbus
    • ModBus Driver: Se utiliza el protocolo ModBus como capa de transporte el intercambio de mensajes entre el Update Protocol y la utilidad de cfid de la PC del cliente.
    • Flash Driver: Implementa las primitivas para el borrado y la escritura en flash dependientes del procesador utilizado.
  • Updater: se pueden identificar las siguiente funciones:
    • Update Protocolo: Es el responsable de la recepcion de los mensajes de actualizacion de flash y tambien es el encargado de la generación de los mensajes de respuesta a dicha utilidad.
    • Desencription: Es la estapa encargada de la desencriptacion de la imagen, si es que la misma fuera encriptada.
    • Update Services: Es la encargada del proceso general de actualizacion, como asi tambien del control de errores en el proceso.
  • Bootmanager: es la rutina que toma el control en el arranque de la CIAA y tiene como función principal determinar si se cede el control al Bootloader o bien al Main Firmware.

Comentarios

  • Para el desarrollo de las herramientas para la PC se plantea el esquema habitual de Linux: desarrollar los programas para que utilicen la línea de comandos y eventualmente en un futuro desarrollar una interface gráfica que simplifique el uso de la misma.
  • El desarrollo de las herramientas para la PC se plantea en C++, dando prioridad a los sistemas POSIX y dejando el sistema Windows para una segunda etapa.
  • La secuencia de arranque soportaría varios desencadenadores para determinar a quien debe ceder el control. Los propuestos hasta el momento son:
    • Un condición física como un botón o una llave
    • Un paquete especial del protocolo modbus
    • Una verificación CRC de las imágenes en memoria
    • Una tabla con marcas especificas para esta decisión
  • Se podrá configurar qué desencadenadores se utilizarán realmente en la secuencia de arranque mediantes directivas al compilador, para poder por ejemplo desactivar el chequeo de CRC y obtener un arranque mas rápido.
  • La secuencia de arranque no podrá actualizarse en sitio, la única posibilidad de actualización será mediante una interface de depuración.
  • Se plantea incluir en el proceso de grabación del bootloader una restricción de las zonas que el mismo esta autorizado a escribir, para de esta forma garantizar la integridad de la secuencia de arranque y del firmware en ejecución, evitando que un error de comunicaciones o una grabación fallida deje al sistema en un estado del cual no pueda recuperarse.
  • Si el procesador incluye máscaras de protección para evitar la grabación de determinadas zonas de Flash se utilizaran las mismas además del mecanismo antes descripto para asegurar la integridad de las zonas criticas de memoria.
  • Se propone desarrollar primero la forma de trabajo ON FLY sin características adicionales como la encriptación o compresión. En este modo de trabajo es menor el trabajo compilación y pre procesamiento de la imagen.
  • En la primera versión se propone cambiar el proceso de firma de la imagen por un simple CRC para verificar que la imagen no es alterada.

Operación con doble imagen

Arquitectura

Durante la estapa de discusión sobre la forma de implementación del bootloader hubo sugerencias respecto a una forma alternativa de trabajo con dos imagenes de Main Firmware simultaneas en memoria. A continuación se encuentra la forma porpuesta para la implementacion de este esquema de trabajo utilizando básicamente los mismo módulos de software.

En este modo de operación la memoria Flash se divide en tres partes: una parte muy pequeña contiene a la secuencia de arranque, y el resto de la memoria se divide en dos partes iguales. En cada parte se puede grabar una versión independiente del firmware completo de la CIAA. Cualquiera de estas imágenes es operable, pero una de ellas tiene preferencia sobre la otra y es la que se ejecuta en condiciones normales (Normalmente corresponde a la versión actualizada mas recientemente). Eventualmente se puede indicar a la secuencia de arranque que ejecute la imagen alternativa en lugar de la normal. Este cambio en la preferencia en la imagen puede ser por única vez o permanente. De esta forma en caso de un error en la actualización es posible volver a la imagen previa en una forma rápida y simple, aumentando de esta manera la disponibilidad del equipo.

En este modo de operación las rutinas de bootloader se incorporan al firmware como una tarea mas del sistema operativo. Por seguridad el bootloader de cada área solo esta autorizado a grabar el área contraria, de forma tal que no sea posible dañar la imagen en ejecución durante el proceso de actualización.

Ventajas

  • La principal ventaja de este modo de operación es disponibilidad, ya que permite una posible vuelta atrás si no puede aplicarse correctamente la nueva imagen o si la misma no responde en la forma esperada.

Desventajas

  • La principal desventaja de este modo de operación es el aprovechamiento de la Flash, ya que para el firmware solo queda disponible un poco menos de la mitad de la flash del procesador.
  • Una desventaja adicional para garantizar seguridad y para resolver las referencias el firmware debe ser compilado para el Area A o para el Area B.

Observaciones

  • Cabe aclarar que no es de esperar que la imagen presente problemas durante la grabación de la misma ya que es verificada antes del envío por la PC y antes de la grabación de la misma, siendo mas probable que se deba a errores de programación en el firmware en si mismo.
  • Podría existir una alternativa para evitar la compilación en las zonas A o B agregando en el procesamiento inicial de la imagen de firmware los marcadores de que cambios realizar en la imagen al instalarla en la zona A o B.
desarrollo/firmware/bootloader.1414292058.txt.gz · Última modificación: 2014/10/25 23:54 por evolentini