Bootloader Tutorial, Teil 2: BackUp-Firmware

Björn Schmitz

04/06/2019

Im zweiten Teil der Bootloader Reihe möchte ich auf das Konzept der BackUp-Firmware eingehen. Dieses wurde bei MEDtech-Ingenieur entwickelt, um die Zuverlässigkeit von Firmware zu erhöhen, welche auf vorinstallierte Bootloader zurückgreift.

Problembeschreibung

Um das zugrundeliegende Problem zu verstehen, stellen wir uns folgendes Szenario vor:

Ein Medizinprodukt setzt sich unter anderem aus zwei Softwaresystemen zusammen. Das eine ist der GUI-Controller, welcher sich z. B. um die Visualisierung von Signalen (EKG, Atemkurve, …) kümmert. Die andere Komponente ist ein Mikrocontroller, welcher sich um die Hardwarespezifische Funktionen (z. B. Powermanagement, Datenerfassung, …) kümmert. Der GUI-Controller kann über WLAN Updates erhalten. Die Update-Datei enthält unter anderem ein Image mit Firmware für den Mikrocontroller. Dieses kann über das Bootloader-Protokoll übertragen werden. Um bei der Entwicklung Zeit zu sparen, wird der bereits vorinstallierte (und getestete!) Bootloader des Mikrocontroller Herstellers verwendet. Um diesen zu starten, gibt es zwei Möglichkeiten:

  1. Der Host-Controller setzt einen, dem Bootloader zugeordneten, Pin auf einen bestimmten Pegel, und führt anschließend einen Reset aus, indem er die Reset Leitung des Mikrocontrollers toggelt.
  2. Der Mikrocontroller springt eigenständig an die Adresse, auf der der Bootloader gespeichert ist.

Möglichkeit 1 hat einen ganz entscheidenden Nachteil:  Es wird eine Resetleitung zwischen Host und Mikrocontroller benötigt. In unserem Fall würde das bedeuten, das ein Fehler in der Software des GUI-Controllers, jederzeit (auch während der Behandlung) zu einem Reset des Mikrocontrollers führen könnte. In der Medizintechnik dürfte dieses Problem es deutlich erschweren, eine Argumentation zu finden, warum der GUI-Controller in einer niedrigeren Risikoklasse eingestuft werden kann als der Mikrocontroller.

Möglichkeit 2 hat allerdings ebenfalls einen gravierenden Nachteil: Der Mikrocontroller muss über den Host einen Befehl bekommen, welcher den Sprung in den Bootloader startet. Das klingt zunächst trivial, man sollte sich aber im Klaren sein, das nach einem fehlgeschlagenen Update, in der Regel keine Firmware mehr vorhanden ist, die diesen Befehl versteht. Kappt der Nutzer also während dem Update die Stromversorgung, ist das Gerät hinterher unbrauchbar. Mit der BackUp-FW versuchen wir genau dieses Problem zu adressieren.

Lösung

Ziel ist es eine „abgespeckte“ Firmware auf dem Mikrocontroller unterzubringen, welche selbst nach einem fehlgeschlagenen Update immer noch in der Lage ist, ein weiteres Update durchzuführen. Sinnvollerweise, sollte sich diese an der Einsprungadresse befinden, von welcher die CPU nach einem Reset die erste Anweisung lädt (virtuelle Adresse 0x00).

Die BackUp-FW wird also nach einem Reset immer durchlaufen. Die folgende Abbildung zeigt den exemplarischen Ablauf einer BackUp-FW. Zu beachten ist das die BackUp-FW in ihren Funktionen möglichst eingeschränkt sein sollte, da diese bei einem Update nicht überschrieben wird. Im unteren Beispiel führt die BackUp-FW nur eine von zwei Aktionen durch:

  1. Ist eine Hauptapplikation mit gültiger Checksumme vorhanden, wird diese angesprungen.
  2. Ist keine gültige Checksumme vorhanden, wartet die BackUp-FW auf einen Befehl des Hosts und springt anschließend in den Bootloader.

 

Was es zu beachten gibt

Wann brauche ich eine BackUp-FW

der Einsatz der BackUp-FW ergibt nur dann Sinn, wenn auch tatsächlich auf einen vorinstallierten Bootloader zurückgegriffen werden kann, welcher beim Start nicht durchlaufen wird. Als Beispiel sind die STM32 Mikrocontroller zu nennen (Achtung, bei solchen mit zwei Flash-Panels gibt es eigene Regeln beim Umgang mit dem Bootloader!).  Bei dieser Mikrocontroller Familie kann der Bootloader jederzeit aus der Hauptapplikation angesprungen werden. Andererseits stellt z.B. bei EFM32 und PIC32 Mikrocontrollern der Hersteller den Bootloader als SW-Projekt zur Verfügung, welcher in den meisten Fällen eh durch die Entwickler angepasst werden muss. Hier ist es daher empfehlenswert die Funktionen der BackUp-FW direkt im Bootloader unterzubringen.

Es kann außerdem sinnvoll sein, dass das Bootloader Protokoll dem Protokoll zwischen Host- und Peripheriecontroller angeglichen wird. Auch in diesem Fall empfiehlt es sich direkt einen eigenen Bootloader zu schreiben.

Ihr Ansprechpartner:

M.Sc. Björn Schmitz, Software Entwickler
E-Mail: schmitz@medtech-ingenieur.de
Tel.:  +49 9131 691 240
 

Benötigen Sie Unterstützung bei der Entwicklung Ihres Medizingeräts? Wir helfen gerne! Die MEDtech Ingenieur GmbH bietet Hardware-Entwicklung, Software-Entwicklung, Systems Engineering, Mechanik-Entwicklung und Beratung aus einer Hand. Nehmen Sie Kontakt mit uns auf.

Kontakt aufnehmen

Speicherbereiche schützen

Es kann sinnvoll sein den Speicherbereich, auf dem die BackUp-FW untergebracht ist, vor Schreibzugriffen zu schützen. So wird verhindert, dass der Host die Speicheraufteilung des Peripheriecontrollers kennen muss. Viele Mikrocontroller bieten die Möglichkeit den Speicher Page- oder Sektorweise zu schützen, um ein überschreiben beim Update-Vorgang zu verhindern.

BackUp-FW nicht überladen

Zwar liegt es nahe der BackUp-FW noch weitere Funktionen zuzuweisen, dies würde aber die Gefahr von Fehlern und damit der Notwendigkeit eines Updates deutlich erhöhen. Würde man die BackUp-FW überspielen und würde dieser Vorgang vor seinem Ende abgebrochen, verbliebe keine Firmware mehr, welche einen weiteren Sprung in den Bootloader ermöglicht. Ein Update der BackUp-FW sollte also nach Möglichkeit vermieden werden.

Ausblick

Im dritten und letzten Teil möchte ich über die Entwicklung eines Live Update Bootloaders schreiben. Bei diesem handelt es sich im Grunde genommen um keinen klassischen Bootloader, sondern eher um eine Erweiterung der Hauptapplikation um Funktionen die sonst dem Bootloader zugeordnet sind. So können Update im Hintergrund durchgeführt werden, ohne dass die Hauptapplikation ihre Arbeit einstellen muss.

Zurück zu Teil 1

Weiter zu Teil 3


Geschrieben von Björn Schmitz

Seit Juli 2017 gehöre ich zum MEDtech-Ingenieur Team und bin hier vor allem als Firmwareentwickler tätig. Schon in kürzester Zeit konnte ich an vielen spannenden Projekten aus dem Bereich Medizintechnik, aber auch aus anderen Bereichen mitwirken.


Weitere Beiträge

  • 09/09/2025
  • Allgemein, Software

In vorangegangenen Blogbeiträgen habe ich zwei wesentliche Komponenten einer einfachen und universell einsetzbaren Software-Architektur vorgestellt: Events mit Dispatcher, Listeners und Datapool. Damit lassen sich bereits sehr viele einfache Use-Cases ...

Weiterlesen
  • 12/11/2024
  • Allgemein, Software, Testen, Tools

In sicherheitskritischen Softwareprojekten steht die Qualität der Software an erster Stelle. Besonders bei Klasse-C-Software, die nach strengen Normen wie IEC 62304 (Medizintechnik) zertifiziert werden muss, ist es essenziell, dass ...

Weiterlesen
  • 08/08/2024
  • Allgemein, Elektrostimulation, Software, Testen

Heutzutage sind Apps im Gesundheitsbereich sehr wichtig. Besonders Apps, die Daten von medizinischen Sensoren lesen und verarbeiten können, sind nützlich. Flutter ist ein Open-Source-Framework von Google, das sich hervorragend ...

Weiterlesen
Cookie-Übersicht

Die Internetseiten der MEDtech Ingenieur GmbH verwenden Cookies. Cookies sind Textdateien, welche über einen Internetbrowser auf einem Computersystem abgelegt und gespeichert werden.

Zahlreiche Internetseiten und Server verwenden Cookies. Viele Cookies enthalten eine sogenannte Cookie-ID. Eine Cookie-ID ist eine eindeutige Kennung des Cookies. Sie besteht aus einer Zeichenfolge, durch welche Internetseiten und Server dem konkreten Internetbrowser zugeordnet werden können, in dem das Cookie gespeichert wurde. Dies ermöglicht es den besuchten Internetseiten und Servern, den individuellen Browser der betroffenen Person von anderen Internetbrowsern, die andere Cookies enthalten, zu unterscheiden. Ein bestimmter Internetbrowser kann über die eindeutige Cookie-ID wiedererkannt und identifiziert werden.

Durch den Einsatz von Cookies kann die MEDtech Ingenieur GmbH den Nutzern dieser Internetseite nutzerfreundlichere Services bereitstellen, die ohne die Cookie-Setzung nicht möglich wären.

Mittels eines Cookies können die Informationen und Angebote auf unserer Internetseite im Sinne des Benutzers optimiert werden. Cookies ermöglichen uns, wie bereits erwähnt, die Benutzer unserer Internetseite wiederzuerkennen. Zweck dieser Wiedererkennung ist es, den Nutzern die Verwendung unserer Internetseite zu erleichtern. Der Benutzer einer Internetseite, die Cookies verwendet, muss beispielsweise nicht bei jedem Besuch der Internetseite erneut seine Zugangsdaten eingeben, weil dies von der Internetseite und dem auf dem Computersystem des Benutzers abgelegten Cookie übernommen wird.

Die betroffene Person kann die Setzung von Cookies durch unsere Internetseite jederzeit mittels einer entsprechenden Einstellung des genutzten Internetbrowsers verhindern und damit der Setzung von Cookies dauerhaft widersprechen. Ferner können bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme gelöscht werden. Dies ist in allen gängigen Internetbrowsern möglich. Deaktiviert die betroffene Person die Setzung von Cookies in dem genutzten Internetbrowser, sind unter Umständen nicht alle Funktionen unserer Internetseite vollumfänglich nutzbar.

Weitere Informationen erhalten Sie in unserer Datenschutzerklärung.

Unbedingt notwendige Cookies

Dieses Cookie wird benötigt, um Ihre Cookie-Einstellungen zu merken und weitere Hauptfunktionen zur Verfügung zu stellen

Um Ihnen eine Auskunft über Ihre gespeicherten personenbezogenen Daten hier (https://medtech-ingenieur.de/gespeicherte-daten-2/) geben zu können, benötigen wir einen Cookie, um Sie bei der Datenabfrage identifizieren zu können. Dieser Cookie muss aus Sicherheitsgründen deshalb aktiviert sein. Ein weiterer Cookie wird gesetzt, um diesen Banner nicht erneut anzeigen zu müssen.

Cookie-Name Beschreibung
PHPSESSID Name: PHP session
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Wir benötigt, um Sie bei der Anfrage von personenbezogenen Daten identifizieren zu können. Das Cookie wird nur gesetzt, wenn Sie eine Anfrage hier (https://medtech-ingenieur.de/gespeicherte-daten-2/) stellen.
Laufzeit: Sitzungsende
Kategorie: Unbedingt notwendige Cookies
moove_gdpr_popup Name: Cookie-Box Einstellungen
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Wird benötigt, um Ihre Cookie-Einstellungen zu speichern, um den Cookie-Banner nicht erneut anzeigen zu müssen.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
comment_author_9c90e388e3e1be4a6c594fa6ac8a3eec
comment_author_email_9c90e388e3e1be4a6c594fa6ac8a3eec
comment_author_url_9c90e388e3e1be4a6c594fa6ac8a3eec
Name: Kommentar Einstellungen
Anbieter:
Eigentümer der Webseite (MEDtech Ingenieur)
Zweck:
Cookie wird angelegt, wenn Sie ein Kommentar auf MEDtech Ingenieur veröffentlichen wollen, um Sie als Autor identifizieren und den aktuellen Status Ihres Kommentars anzeigen zu können. Das Cookie enthält den angegebenen Namen. Das Cookie wird erst gesetzt, wenn Sie der Speicherung Ihrer personenbezogenen Daten zustimmen.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
rmp-rate Name: RMP Rate
Anbieter: Eigentümer der Webseite (MEDtech Ingenieur)
Zweck: Cookie wird angelegt, wenn Sie eine Bewertung eines Blogbeitrags mithilfe des Sternebewertungssystems abgeben. Ihnen wird eine anonymisierte ID zugewiesen, um zu erkennen, ob Sie einen Artikel bereits bewertet haben oder nicht. Das Cookie wird nur verwendet, um zu verhindern, dass mehrfache Bewertung abgegeben werden und erst gesetzt, wenn Sie auf einen Stern klicken.
Laufzeit: 1 Jahr
Kategorie: Unbedingt notwendige Cookies
medtech-download-page Name: Download Page
Anbieter: Eigentümer der Webseite (MEDtech Ingenieur)
Zweck: Cookie wird angelegt, wenn Sie den Landing-Page Prozess erfolgreich durchlaufen haben. Dies geschieht nur, wenn Sie einen Content-Download von unserer Website anstreben.
Laufzeit: 1/2 Jahr
Kategorie: Unbedingt notwendige Cookies