PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bootloader um Daten in Flash zu packen



vajk
18.09.2006, 17:57
Hallo!
Hat das schon mal jemand gelöst, wie man via Bootloader Daten ins Flash - sprich zum ausführbaren Pogramm dazupacken kann ?

Wenn ja, :-) wie :-)

Und dann noch am Liebsten in C statt asm ....

Liebe Grüße,
Vajk

SprinterSB
19.09.2006, 08:22
äh... Du willst sowas haben wie dynamisch nachladbare Module??? Oder einfach komplett alles überpinseln?

vajk
19.09.2006, 08:50
genau, "dynamisch nachladbare Module" (ich weiß 10.000er Grenze) aber das wärs, auswechselbare Daten (hinterm Code) ...

SprinterSB
19.09.2006, 11:31
Dann brauchst du

1. einen dynamischen Linker
2. einen Compiler, der position independent code (pic) macht
3. deine Applikation muss die vorhanden Module verwalten können und wissen, welche sie braucht/nachladen muss/wegwerfen kann.

Am einfachsten ist wohl 3. Für Punkt 2 musst du dir nen Compiler besorgen, der das kann (avr-gcc kann es nicht). Nen dynamischen Linker musst du auch schreiben/besorgen.

vajk
19.09.2006, 12:45
ömpf .. tnx
einfach die Daten an den HexCode anhängen geht nicht ?
Einfach nach einer "Startsequenz" suchen lassen ... dem Code könnte man doch seine Größe mitteilen ... oder liege ich da falscch.
Unter Win hab ich so schon einen Kopierschutz gemacht, der die Exe eben nachträglich an bestimmten Stellen verändert ...

ogni42
19.09.2006, 14:06
Es ginge, wenn der Code immer ab einer festen Position im Flash liegt. Dann geht es auch ohne dynamischen Linker. Der Bootloader des Butterfly (und freie Klone, wie buttload) sind eigentlich in ihrem Kern, das was Du suchst.

SprinterSB
19.09.2006, 14:17
Das Problem ist ja nicht, den Hex-Code anzuhängen, sondern den Code zu lokatieren bzw. er muss so generiert sein, daß er unabhängig von seiner Lokatierung ist. Ausserdem muss die Anwendung, die das Zeug lädt, wissen, wo sie das Zeug findet.

Am einfachsten geht das mit Daten, die unabängig von Lokatierungen sind (also keine Sprung- oder Codeadressen oder sowas enthalten). Typisches Beispiel sind Kalibrierungsdaten. Die Daten werden fest irgendwo ins Flash lokatiert und die Applikation kann darauf zugreifen bzw weiß, wo die Daten liegen (werden). Nach der Kalibrierung werden die Daten an diese Stelle geflasht (Bootloader oder wie auch immer). Um den Ort festzulegen, legst du die Daten in eine eigene Section, deren Ablageort du im Linker Description File festlegst (bei avr-ld zumindest). Alternativ lokatierst du das Zeug ins Flash und übergibst dem Bootloader die Adresse.

Einige Makros zur Bootloader-Unterstützung findest du im Header avr/boot.h.

ogni42
19.09.2006, 14:25
Relozieren muss der Loader nur, wenn die Adressen sich ändern können (sollen). Wenn die Adresse des Moduls im Speicher bekannt ist, geht das auch ohne Relokation. Es schränkt natürlich die Anwendungsmöglichkeiten drastisch ein.