Os componentes de firmware variam dependendo do dispositivo em que está em execução, mas geralmente inclui:
1. Bootloader: Esta é a primeira parte do código executada quando o dispositivo liga. Suas principais responsabilidades incluem:
*
Inicializando o hardware: Configurando a CPU, a memória e os periféricos.
*
Carregando o firmware principal: Localizar e carregar o sistema operacional ou código de aplicativo do armazenamento (memória flash, ROM, etc.).
*
executando auto-testes: Verificando falhas de hardware.
*
Atualizações de manuseio: Fornecendo mecanismos para atualizar o firmware principal.
2. Sistema Operacional (OS) ou Sistema Operacional em tempo real (RTOs): Muitas implementações de firmware incluem um sistema operacional ou RTOS leve para gerenciar recursos e tarefas. Isso é mais comum em dispositivos complexos. Dispositivos mais simples podem pular completamente esse componente. O OS/RTOS lida:
*
Programação de tarefas: Gerenciando a execução de diferentes módulos de software.
*
Gerenciamento de memória: Alocando e libertando memória para tarefas.
*
Comunicação entre processos (IPC): Permitindo que diferentes módulos de software se comuniquem.
*
Manuseio de interrupção: Respondendo a interrupções de hardware.
*
Drivers de dispositivo: Interface com os componentes de hardware.
3. Código do aplicativo: Esta é a funcionalidade principal do dispositivo. Ele executa as tarefas específicas para as quais o dispositivo foi projetado. Exemplos incluem:
*
Algoritmos de controle: Em sistemas incorporados, controlar motores, sensores ou outros atuadores.
*
Rotinas da interface do usuário (UI): Manipulando a entrada do usuário e a exibição de saída em uma tela ou outra interface.
*
Protocolos de rede: Comunicar com outros dispositivos em uma rede.
*
Processamento e armazenamento de dados: Coleta, processamento e armazenamento de dados.
4. Drivers de dispositivo: Estes são módulos de software que atuam como interfaces entre o firmware e os componentes de hardware do dispositivo. Eles fornecem funções para acessar e controlar hardware específico, como:
*
Controladores de memória: Acessando diferentes tipos de memória.
*
drivers periféricos: Controlar periféricos como sensores, displays e interfaces de comunicação (UART, SPI, I2C, USB, etc.).
*
Controladores de interface de rede (NICs): Permitindo comunicação sobre redes.
5. Bibliotecas e utilitários: Estes são módulos de código pré-escrito que fornecem funções comuns, como:
*
Funções matemáticas: Realizando cálculos.
*
manipulação de string: Trabalhando com seqüências de texto.
*
Estruturas de dados: Organização e gerenciamento de dados.
Em essência, o firmware é um sistema em camadas. O carregador de inicialização inicializa o hardware e carrega o OS/RTOs (se presente), que gerencia a execução do código do aplicativo e interage com o hardware através dos drivers de dispositivo. Bibliotecas e utilitários fornecem funções de suporte a todas as camadas. Os componentes específicos e sua complexidade dependem muito da funcionalidade e dos recursos do dispositivo de destino.