Firmwarecomponenten variëren afhankelijk van het apparaat waarop het draait, maar omvatten over het algemeen:
1. Bootloader: Dit is het eerste stukje code dat wordt uitgevoerd wanneer het apparaat wordt ingeschakeld. De belangrijkste verantwoordelijkheden zijn onder meer:
* Hardware initialiseren: De CPU, het geheugen en de randapparatuur instellen.
* De hoofdfirmware laden: Lokaliseren en laden van het besturingssysteem of de applicatiecode uit de opslag (flashgeheugen, ROM, enz.).
* Zelftests uitvoeren: Controleren op hardwarefouten.
* Updates verwerken: Mechanismen bieden voor het updaten van de hoofdfirmware.
2. Besturingssysteem (OS) of realtime besturingssysteem (RTOS): Veel firmware-implementaties bevatten een lichtgewicht besturingssysteem of RTOS om bronnen en taken te beheren. Dit komt vaker voor bij complexe apparaten. Eenvoudigere apparaten kunnen dit onderdeel helemaal overslaan. Het besturingssysteem/RTOS verwerkt:
* Taakplanning: Het beheren van de uitvoering van verschillende softwaremodules.
* Geheugenbeheer: Geheugen toewijzen en vrijmaken voor taken.
* Communicatie tussen processen (IPC): Waardoor verschillende softwaremodules kunnen communiceren.
* Onderbrekingsafhandeling: Reageren op hardware-interrupts.
* Apparaatstuurprogramma's: Interface met de hardwarecomponenten.
3. Applicatiecode: Dit is de kernfunctionaliteit van het apparaat. Het voert de specifieke taken uit waarvoor het apparaat is ontworpen. Voorbeelden zijn onder meer:
* Beheeralgoritmen: In ingebedde systemen, die motoren, sensoren of andere actuatoren besturen.
* Gebruikersinterfaceroutines (UI): Het verwerken van gebruikersinvoer en het weergeven van de uitvoer op een scherm of andere interface.
* Netwerkprotocollen: Communiceren met andere apparaten via een netwerk.
* Gegevensverwerking en opslag: Het verzamelen, verwerken en opslaan van gegevens.
4. Apparaatstuurprogramma's: Dit zijn softwaremodules die fungeren als interfaces tussen de firmware en de hardwarecomponenten van het apparaat. Ze bieden functies voor toegang tot en controle van specifieke hardware, zoals:
* Geheugencontrollers: Toegang tot verschillende soorten geheugen.
* Stuurprogramma's voor randapparatuur: Besturing van randapparatuur zoals sensoren, displays en communicatie-interfaces (UART, SPI, I2C, USB, etc.).
* Netwerkinterfacecontrollers (NIC's): Communicatie via netwerken mogelijk maken.
5. Bibliotheken en hulpprogramma's: Dit zijn vooraf geschreven codemodules die algemene functies bieden, zoals:
* Wiskundige functies: Het uitvoeren van berekeningen.
* Stringmanipulatie: Werken met tekstreeksen.
* Gegevensstructuren: Gegevens ordenen en beheren.
In wezen is de firmware een gelaagd systeem. De bootloader initialiseert de hardware en laadt het besturingssysteem/RTOS (indien aanwezig), dat vervolgens de uitvoering van de applicatiecode beheert en via apparaatstuurprogramma's met de hardware communiceert. Bibliotheken en hulpprogramma's bieden ondersteunende functies voor alle lagen. De specifieke componenten en hun complexiteit zijn sterk afhankelijk van de functionaliteit en mogelijkheden van het doelapparaat. |