
Firmware-Updates: sicher und schnell
…mit dem Bootloader von semf
Ob Fehlerbeseitigung oder Funktionserweiterungen – Embedded Systeme müssen in immer kürzeren Zyklen upgedatet werden. Firmware-Aktualisierungen sind jedoch häufig kritische Arbeitsschritte und für den Entwickler meist mit großem Zeitaufwand verbunden.
Gut, wenn es für diese Aufgaben Systeme gibt, die die Arbeit für den Embedded Engineer schneller, sicherer und komfortabler machen. Aus langjähriger Erfahrung haben die Macher von semf mit dem semf Bootloader ein Toolset entwickelt, das funktionssichere Firmware-Updates in wenigen Schritten ermöglicht.
Der semf Bootloader ist herausragend:
Fail-Save bei z.B. Spannungsausfall
Ausführliche Integritätschecks (CRC, SHA256, PKCS1)
Flashen von mehreren Speicher-Bausteinen
Verschlüsselung und Entschlüsselung der Binaries
Einfach konfigurierbar
Der semf Bootloader – drei Kernkomponenten inklusive Speichermodulen und Treibern
Der semf Bootloader besteht aus drei Kernmodulen, dem PC-Tool Firmware Packer, der Applikationsklasse Firmware Updater und der Bootloader-Applikation selbst. Komplettiert wird das Komponenten-Set durch optionale Treiber und Speichermodule.
Inklusive individueller Projektintegration
Firmware Packer
PC-Tool
Verschlüsselung
Zertifizierung
Firmware Updater
Plausibilitätsprüfung
Entschlüsselung
Zertifizierungsprüfung
Bootloader
Firmware-Kopierer
Applikations-Starter
Datenübertragung
UART, SPI, I2C, CAN
USB VCP & Host
Ethernet

Datenspeicherung
Shared Memory
NOR-Flash
NAND-Flash
Bootloader Komponente 1: Firmware Packer
Mit dem Firmware Packer wird die Binärdatei Ihrer neuen Firmware wie gewünscht mit einer CRC oder einem Hash versehen, AES-verschlüsselt oder mit einem Zertifikat versehen. Anschließend können die Daten über unterschiedlichste Kommunikationswege an den Mikrocontroller übertragen werden. Übliche Beispiele reichen von I2C, SPI, UART (RS232 oder RS485) über CAN, Modbus, USB hin bis zu MQTT-Datenpaketen über TCP/IP via Ethernet. Der semf Bootloader unterstützt weitestgehend alle gängigen Kommunikationsschnittstellen.
Bootloader Komponente 2: Firmware Updater
Über die Kommunikationsschnittstelle gelangen die Daten zur Firmware-Updater-Klasse, die je nach Konfiguration die Daten und ggf. das Zertifikat prüft, entschlüsselt und anschließend an einen gewünschten Bereich im Speicher ablegt. Als Speichertechnologien werden interne Mikrocontroller-Flash und externe NOR- und NAND-Flash Bausteine unterstützt.
Firmware Updater – Beispiel
Im folgenden Beispiel sehen Sie die Verwendung des Firmware Updaters in der Hauptapplikation, die das Binary entgegennimmt, prüft und in den Shared Memory kopiert.
// Address where the shared data is stored in the internal flash memory. constexpr uint32_t kSharedMemoryAddress 0x08004400 // Address where the firmware file is stored in the external flash memory. constexpr uint32_t kExternalFlashFirmwareFirstSector 12 // Classes depend on the used microcontroller and external flash hardware // For reset semf::Power power; // Where the shared menory is located. semf::Flash internalFlash; // Where the new firmware file is stored. semf::Flash externalFlash; // Decryption uint8_t aesData[16]; semf::AesCbcMbed aesCbc(aesData, sizeof(aesData)); // Hash computation uint8_t sha256Data[32]; semf::HashSha256Mbed sha256(sha256Data, sizeof(sha256Data)); // Verification with signature uint8_t pkcs1Data[128]; semf::SignaturePkcs1Mbed pkcs1(pkcs1Data, sizeof(pkcs1Data)); semf::BootloaderSharedMemoryFlash sharedMemory(internalFlash, kSharedMemoryAddress); uint8_t firmwareupdaterData[1024]; semf::FirmwareUpdater firmwareupdater(externalFlash, aesCbc, sha256, pkcs1, sharedMemory, firmwareupdaterData, sizeof(firmwareupdaterData)); /** * Slot for firmware is ok and firmare updater is finished. */ void onFirmwareReady() { // do system reset powerModes.reset(); } // Start firmwareupdater.start(externalFlash.address(kExternalFlashFirmwareFirstSector));
Bootloader Komponente 3: Bootloader-Applikation
Nach erfolgreicher Prüfung wird üblicherweise ein Reset durchgeführt und der Mikrocontroller startet in der Bootloader-Applikation. Diese prüft bei jedem Start, ob eine neue und gültige Firmware verfügbar ist, und flasht diese anschließend bei Bedarf.
Bootloader – Beispiel
Im folgenden Beispiel sieht man die Bootloader-Applikation, die im Shared Memory prüft, ob ein neues und geprüftes Firmware-Update vorhanden ist und dieses anschließend flasht.
constexpr uint32_t kSharedMemoryAddress 0x08004800 constexpr uint32_t kApplicationAddress 0x08005400 uint8_t data[128]; semf::BootloaderSharedMemoryFlash sharedMemory(kSharedMemoryAddress); // Classes depend on the used microcontroller and external flash hardware semf::Flash externalFlash; semf::Flash internalFlash; semf::Bootloader bootloader(externalFlash, internalFlash, sharedMemory, kApplicationAddress, data, sizeof(data)); bootloader.start(); // Blocks until bootloader is finished while(!bootloader.isready()); bootloader.startApplication();
Tutorials
Erfahren Sie mehr über die einzelnen Komponenten in unseren Tutorials. Alle Tutorials finden Sie auf der Seite Dokumentation.
Funktions- und Cyber-Sicherheit bei Firmware-Updates
durch den Einsatz eines professionellen Bootloader-Systems
Ob Fehlerbeseitigung oder Funktionserweiterungen – Embedded Systeme müssen in immer kürzeren Zyklen upgedatet werden. Firmware-Aktualisierungen sind jedoch häufig kritische Arbeitsschritte und für den Entwickler meist mit großem Zeitaufwand verbunden.
Viele Mikrocontroller-Hersteller liefern Pakete für den Firmware- Updateprozess mit. Diese sind in der Regel funktional. Sobald jedoch Anforderungen wie „Failsave bei Stromausfall während des Updateprozesses“ oder „Schutz gegen Hackerangriffe“ bestehen, muss die Software hohen Standards genügen und mit maximaler Professionalität programmiert sein.
Um dem Leser ein tieferes Verständnis für die Funktionsweise eines Mikrocontrollers und den damit verbundenen Risiken bei Firmware-Updates zu vermitteln, soll in diesem Beitrag auf Mikrocontroller- Grundlagen sowie auf die Themen Integritätscheck und Verschlüsselung eingegangen werden.
Auszug aus dem Whitepaper:
Preise
Bootloader & optionale Treiber
