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.
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.
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:
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:
La forma en que estas tareas se ensamblan entre sí y con el firmware principal de CIAA puede configurarse para obtener distintos modos de operación.
Para la implementación inicial del bootloader se optó por un proceso de grabación On Fly. Para ello la memoria Flash se divide en tres partes: una parte muy pequeña que contiene un Bootmanager, una segunda fracción donde se ubica el programa de Bootloader y el resto de la memoria queda disponible para el MainFirmware.
En el funcionamiento normal de la CIAA el Bootmanager toma el control durante el arranque, lo transfiere al Main Firmware y este es el que opera el equipo. Cuando se requiere una actualización, mediante una bandera se indica al Bootmanager que transfiera el control al Bootloader, quien se encarga únicamente de actualizar la imagen del Main Firmware. Para ello el Bootloader borra el área de memoria ocupada por el Main Firmware y la escribe con la imagen enviada por la PC del cliente.
Si por algún problema no se puede completar la actualización del Main Firmware, el Bootmanager seguirá transfiriendo el control al Bootloader hasta que la actualización pueda completarse. De esta forma nos aseguramos de que el equipo no quede inoperable.
Para la eventual actualización del Bootloader será necesario un proceso indirecto: en un primer paso se actualizará el Main Firmware por uno especial destinado únicamente a la actualización 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.
Durante la etapa de discusión sobre la forma de implementación del bootloader hubo sugerencias respecto a una forma alternativa de trabajo con dos imágenes de Main Firmware simultáneas en memoria. A continuación se encuentra la forma propuesta 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.