Forum: PC-Programmierung Hilfe zur Bootloaderimplementierung


von Leonhard (Gast)


Lesenswert?

Guten Morgen, ich habe ein Bootloadertoll geschrieben mit dem ich einen 
Mikrocontroller flashen kann. Nach Beendigung des Flashvorgangs wird ein 
Reset im Mikrocontroller ausgeführt und die neue Applikation starten. 
Das funktioniert bei mir soweit. Nun möchte ich ein paar 
Sicherheitsaspekte einbauen. Zum Beispiel crc berechnen und vergleichen. 
Ich habe mir es so vorgestellt. Das PC Bootloadertool läd die binäre 
Datei. In der binären Datei ist zum Schluß eine CRC Prüfsumme enthalten, 
die zuvor über alle binären Daten berechnet wurde. Diese CRC Prüfsumme 
soll zuerst (bevor Flashvorgang ausgeführt wird) mit der aktuellen 
Prüfsumme die im Mikrocontroller enthalten ist verglichen werden. Stimmt 
die Prüfsumme nicht überein, dann kann der Flashvorgang gestartet 
werden. Welche Möglichkeiten gibt es noch ?

Für jede Unterstützung bedanke ich mich schonmal im Vorfeld.

von peterguy (Gast)


Lesenswert?

Erklär doch mal genauer, was du unter Sicherheitsaspekten verstehst.
Das von dir beschriebene Prüfverfahren macht generell schon Sinn, 
allerdings würde ich das nicht unter "Sicherheitsaspekte" eingruppieren.

Nach meinem Verständnis wären Sicherheitsaspekte eher:
+ Unbefugten Zugriff verwehren.
+ Prüfen ob Applikation richtig geflasht wurde
+ Falls beim Flashen ein Fehler auftrat: im Bootloader verbleiben, auch 
nach einem Reset

von Leonhard (Gast)


Lesenswert?

Wie würdest du diesen Punkt "Prüfen ob Applikation richtig geflasht 
wurde" realisieren ?

von Purzel H. (hacky)


Lesenswert?

Ich wuerde jedes versendete Packet mit einem CRC sichern. Und wenn der 
CRC des Packetes nicht stimmt, wird das Packet nochmals uebertragen.

Und ja, einen Gesammtcheck sollte man irgendwie haben. zB indem alle 
Packete gecheckt werden und man weiss wieviele Packete dazugehoeren.

Toll, wenn du das ganze Programm uebertragen kannst um auf Korrektheit 
zu pruefen. Nicht jeder hat so viel RAM. Ich musste bei meinem 
Bootloader direkt brennen. Jedes korrekt uebertragene Packet wurde 
sofort gebrannt.

von Leonhard (Gast)


Lesenswert?

Ich sende die binären Daten über den CAN-Bus an den Mikrocontroller. 
Eine CRC Prüfung von jeden CAN Frame ist nicht notwendig, da der CAN 
schon eine CRC Prüfung macht. Einen Telegrammzähler habe ich auf der 
Mikrocontrollerseite.

Welchen CRC sollte nehmen ?

von Purzel H. (hacky)


Lesenswert?

Ein CRC16 kann Einbit-fehler in 2^16 bits = 8k bytes erkennen. Wenn das 
Teil groesser ist, waere ein CRC32 angesagt.
Falls gegen absichtliche Manipulation geschuetzt werden soll, allenfalls 
ein Hash.

von Leonhard (Gast)


Lesenswert?

Danke für die Antwort. Ich bräuchte eine CRC32, da ich Daten von 
insgesamt 65kByte übertragen muss.

von Uwe (Gast)


Lesenswert?

>Diese CRC Prüfsumme soll zuerst (bevor Flashvorgang ausgeführt wird) mit >der 
aktuellen Prüfsumme die im Mikrocontroller enthalten ist verglichen >werden.

Die sind nur gleich wenn auf dem Mikrocontroller und dem PC die gleichen 
Daten für die CRC zugrundegelegt wurden, also brauchst du nicht Flashen 
weil würde sich ja eh nichts ändern. Du verstehst ?
Ich denke du willst etwas anderes machen.
Ich denke du willst ein Program auf dem PC das sich die BIN datei nimmt, 
hinten ne CRC dranhängt und dem Mikrocontroller sendet. Der µC speicher 
die Daten erst mal im RAM berechnet mit dem gleichen Verfahren auch eine 
CRC und Vergleicht beide. Stimmen diese Überein wird der RAM Inhalt ins 
Flash geladen.
CRC als Passwortschutz ?
Man könnte die Vorherige CRC aus dem Flash natürlich als Passwort 
benutzen um den Flashvorgang überhaupt zu erlauben. Wenn die Richtigen 
Lockbits gesetzt sind. Spätestens beim dritten Update hat man jedoch die 
Vorgängerversion und das Passwordt ist bekannt.

von Leonhard (Gast)


Lesenswert?

Die Daten werden vom Mikrocontroller empfangen und sofort ins Flash 
gespeichert. Wenn alle Daten empfangen wurden werden die Daten in den 
oberen Flashbereich kopiert und ein Reset vom Mikrocontroller wird 
durchgeführt.

von Leonhard (Gast)


Lesenswert?

Also ich werde es nun so umsetzen. Auf der PC Seite wird zunächst einen 
CRC Summe aus den binären Daten erzeugt. Diese CRC Summe wird nun mit 
der CRC Summe die zuvor auf dem Mikrocontroller gespeichert wurde 
verglichen. Bin Nichtübereinstimmung kann der Flashvorhang durchgeführt 
werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.