1. Bootloger: Este es el primer código ejecutado cuando el dispositivo se enciende. Sus responsabilidades principales incluyen:
* Inicialización de hardware: Configuración de la CPU, la memoria y los periféricos.
* Cargando el firmware principal: Localización y carga del sistema operativo o código de aplicación desde el almacenamiento (memoria flash, ROM, etc.).
* Realización de autoevaluaciones: Verificación de fallas de hardware.
* Manejo de actualizaciones: Proporcionar mecanismos para actualizar el firmware principal.
2. Sistema operativo (OS) o sistema operativo en tiempo real (RTO): Muchas implementaciones de firmware incluyen un sistema operativo o RTOS ligero para administrar recursos y tareas. Esto es más común en dispositivos complejos. Los dispositivos más simples pueden omitir este componente por completo. El OS/RTOS se maneja:
* Programación de tareas: Administración de la ejecución de diferentes módulos de software.
* Gestión de memoria: Asignar y liberar memoria para tareas.
* Comunicación entre procesos (IPC): Permitiendo que se comuniquen diferentes módulos de software.
* Manejo de interrupciones: Respondiendo a las interrupciones de hardware.
* Controladores del dispositivo: Interfaz con los componentes de hardware.
3. Código de aplicación: Esta es la funcionalidad central del dispositivo. Realiza las tareas específicas para las que está diseñado el dispositivo. Los ejemplos incluyen:
* Algoritmos de control: En sistemas integrados, controladores de motores, sensores u otros actuadores.
* Rutinas de interfaz de usuario (UI): Manejo de la entrada del usuario y visualización de salida en una pantalla u otra interfaz.
* Protocolos de red: Comunicarse con otros dispositivos a través de una red.
* Procesamiento y almacenamiento de datos: Recopilar, procesar y almacenar datos.
4. Controladores de dispositivos: Estos son módulos de software que actúan como interfaces entre el firmware y los componentes de hardware del dispositivo. Proporcionan funciones para acceder y controlar hardware específico, como:
* Controladores de memoria: Acceso a diferentes tipos de memoria.
* controladores periféricos: Control de periféricos como sensores, pantallas e interfaces de comunicación (UART, SPI, I2C, USB, etc.).
* Controladores de interfaz de red (NIC): Habilitando la comunicación sobre las redes.
5. Bibliotecas y utilidades: Estos son módulos de código preescritos que proporcionan funciones comunes, como:
* Funciones matemáticas: Realización de cálculos.
* Manipulación de cadenas: Trabajando con cadenas de texto.
* Estructuras de datos: Organización y gestión de datos.
En esencia, el firmware es un sistema en capas. El gestor de arranque inicializa el hardware y carga el sistema operativo/RTOS (si está presente), que luego administra la ejecución del código de aplicación e interactúa con el hardware a través de los controladores del dispositivo. Las bibliotecas y los servicios públicos proporcionan funciones de soporte a todas las capas. Los componentes específicos y su complejidad dependen en gran medida de la funcionalidad y capacidades del dispositivo de destino.