Forum: Mikrocontroller und Digitale Elektronik Bootloader, gcc, avr231 (AES Bootloader)


von Scheintod (Gast)


Lesenswert?

Hallo zusammen,

nun muss ich mich auch mit bootloadern beschäftigen. Und zwar soll es
ein bootloader a la avr231 werden, d.h. das objectfile soll aes encoded
an den mega128 übertragen werden.
Prinzipiell ist mir das Bootloader-Konzept eigentlich soweit klar. Wie
immer steckt die Tücke im Detail (Und darin, dass ich mal wieder keine
passende Doku finde).

Meine Fragen also:
1. Hat schon jemand die avr231 auf den gcc übertragen? Es sind ja doch
einige iar spezifische Sachen drinnen, die man wohl anpassen muss.
2. Prinzipiell: Ist es auch möglich gleichzeitig einen Bootloader und
ein erstes Programm auf den avr aufzuspielen? Also nur ein Schritt und
nicht 2 wie bei Bootloader aufspielen und dann erst Anwendung? Dazu:
2.1. Wie sag ich es dem Compiler? (Wohl das hauptproblem von mir.)
2.2. Und was macht der mit dem Init-Code? Bzw. Der init-code ist ja
dann ja sogar 2x vorhanden; also 1x im Bootloader und dann nochmal im
"Vektor 0".
3. Wo (zur Hölle) finde ich Doku zu avr-libc init?

Ich habe mir bereits die Bootloader Megaload von Werner B. (leider
Teile in ASM) und den usbisp von Mathias Weißer angeschaut. Ich bin
aber in der Thematik noch zu wackelig auf den Beinen, als dass ich
einfach Konzepte übernehemen will, ohne wirklich zu verstehen was sie
tun. Betrifft vor allem das Problem: Wie sag ichs dem gcc, bzw. was
macht der gcc darauf.

Schoene Gruesse,

Scheintod

PS: Mathias: Wie schnell ist denn Dein Programmer? Und: In Deinem
Readme zum usbisp schreibst Du, dass Platinen von dir gg.
Aufwandsentschädigung zu beschaffen sind.

von Matthias (Gast)


Lesenswert?

Hi

zu 2.
Ja das ist möglich. Ich bau mir dazu mittels kleinem Perl-Skript aus
zwei HEX-Dateien eine. Geht sicher eleganter, erfüllt aber seinen
Zweck.
Der Initcode ist dann zweimal drin. Den brauchst du aber immer, denn
wenn der der Applikation weg ist und die Programmierung dann schief
geht startet auch der Bootloader nicht mehr.

zu 3.
http://www.google.de/search?hl=de&q=avr+libc+documentation&btnG=Google-Suche&meta=

zu USBisp
schnell? Wenn ich ihn im Rucksack habe habe und mit dem Mopped
unterwegs bin u.U. ganz schön schnell ;-)

Ernsthaft:
Für einen Mega128 (Flash komplett) braucht der USBisp etwa 21s inkl.
Verify.

Platinen gibts bei mir für 6€ das Stück.

Matthias

von Peter Dannegger (Gast)


Lesenswert?

Man kann das auch händisch machen:

Das eine Hexfile nehmen, die letzte Zeile löschen (Enderecord) und das
nächste daran klatschen.

Ich würde mich aber sicherer fühlen, wenn ich mit dem Laden der
Anwendung per Bootloader gleich geprüft habe, daß der Bootloader auch
wirklich funktioniert.


Der Initcode muß für jeden extra sein, da er unterschiedlich ist !

Die Anwendung würde ziemlich blöd aus der Wäsche gucken, wenn sie die
Variablen des Bootloaders initialisiert bekommt bzw. umgekehrt.


Peter

von Scheintod (Gast)


Lesenswert?

Hi,

Das mit dem Hex-File ist ja fast zu einfach um wahr zu sein :)

@matthias: Danke für den Google-Link. Vielleicht hab ich ihn verdient.
Hatte mich ein bischen blöd ausgedrückt.
Die avr-libc Doku ansich kenne ich. Die ist allerdings ...   nun je ...
verbesserungsfähig. Wenn man schon weiss was man braucht, dann bringt
sie einen glaube ich auch gut weiter. Wenn man noch nicht weiss, wohin
die Reise geht, schaut man besser wo anders nach.
Was ich speziell vermisse ist mal eine schöne Beschreibung, was der
Init genau macht (Also der Init-"Prozess"). Hab aber inzwischen ein
bissl in den Quellen gestöbert aber da auch nicht wirklich
weitergekommen. (Irgendwo muss doch der Init im source liegen?)

@usbisp: kann ich die beiden chips auch über Dich beziehen?

@peter: Das mit dem Prüfen dachte ich mir auch. Andererseits muss
vermutlich/hoffentlich ich (persönlich) > 1000 cpus programmieren.
Der Test muss dann 'irgendwie' anders & schneller gehen (und eh
statfinden wg. der anderen Funktionen).

Herzlichen Dank für die Infos &

Schoene Gruesse,

Scheintod

von Henrik (Gast)


Lesenswert?

Es gibt von Atmel auch eine Appnote mit einem DES-bootloader. Ich
schätze für Microcontroller sollte das ausreichend sein! Nennt sich
AVR230. Warum also das Rad neu erfinden?

Gruss Henrik

von Scheintod (Gast)


Lesenswert?

Hi Henrick.

Die kenn ich. avr231 ist die selbe für AES verschlüsselung (moderner,
mehr bits, schneller). Große Teile des codes sind auch die selben. Aber
meine Probleme dass die apnote für den iar ist und ich mich mit den
Details des gcc noch nicht so genau auskenne bleibt leider :(.

Schoene Gruesse,

Scheintod

von Henrik (Gast)


Lesenswert?

P.S.: Habe gerade gesehen, dass es eine neue gibt mit dem AES, namens
AVR231. Ist allerdings Assembler glaube ich.

von Henrik (Gast)


Lesenswert?

(schon 2 Fehlpostings, naja kann nicht alles glatt gehen heute)
Ich bin mal auf eine Internet-Seite von einer Uni gestoßen, wo
Studenten AES (128) auf einem AVR in Assembler implementieren mussten.
Die besten 3 Lösungen standen zum Download. Eine davon habe ich auf
Festplatte. Ich möchte sie hier aber nicht einfach veröffentlichen.
Wenn du mal deine Mail angibst kann sie dir schicken. Das sollte sich
relativ einfach in einen bestehenden Bootloader einbinden lassen.

Gruss Henrik

von Matthias (Gast)


Lesenswert?

Hi

was macht der init-Prozess:
Im großen und ganzen setzt er den Stackpointer auf, initialisiert die
globalen Variablen und ruft dann die main-Funktion auf.

Den Mega8 und FTDI gibts zur Not auch bei mir dann aber mit etwas
aufgerundeten Reicheltpreisen (zusammen 10€) da ich die Versandkosten
von Reichelt nicht zuschießen will.

Matthias

von Scheintod (Gast)


Lesenswert?

Hi,

@Henrik: besten danke für das nette Angebot. Für so heikle Themen wie
Verschlüsselung ist es mir allerdings lieber wenn ich genau weiss,
woher der code kommt. Ausserdem wäre dann auch noch die Frage nach der
Lizenzierung  zu klären. Trotzdem aber danke nochmal.

@Matthias: Hast du eine Ahnung wo der code dafür herkommt oder wo er
dokumentiert ist? Die avr-libc scheint es ja nicht zu sein. Also der
gcc. Da habe ich bei mir (WinAVR unter cygwin) aber auch nur
object-files gefunden, die so aussehen, als könnten sie die richtigen
sein.

Wg. den Platinen/Chips rühr ich mich einfach per e-mail wenn ich soweit
bin. Muss erst mit dem 'echten' elektroniker reden :)

Schoene Gruesse,

Scheintod

von Henrik (Gast)


Lesenswert?

Deinen Zweifeln kann man Abhilfe schaffen. Lade dir das AES-Sheet von
der Homepage der Autoren runter und lass die (zahlreichen) Testvektoren
durchlaufen. Wenn diese mit den angegebenen Ergebnissen übereinstimmen,
stimmt auch die Implementierung.
Das mit der Lizensierung ist nicht meine Sache, ich hätte dir nur die
Suche erspart. Ob und wie du den Code verwenden darfst mußt du mit den
Autoren selbst ausmachen!

Gruss Henrik

von Henrik (Gast)


Lesenswert?

P.S.: Ich meinte das AES-Sheet von der Page der AES Entwickler. Nur um
Missverständnissen vorzubeugen. Schau doch mal hier:
http://www.iaik.tu-graz.ac.at/research/krypto/AES/
http://www.iaik.tu-graz.ac.at/aboutus/people/rijmen/index.php
Vincent Rijmen ist einer der Entwickler von AES

von Scheintod (Gast)


Lesenswert?

@Henrik:
Cool. Danke für die Links.

Schoene Gruesse,

Scheintod

von Micha (Gast)


Lesenswert?

eine kleine Verständnisfrage vom Anfänger auf dem Gebiet:
Wenn ich nach ap231 einen Bootloader auf dem Chip erstellt habe, kann
ich dann mein hex/obj/bin/wasauchimmer-File nachträglich verschlüsseln
und dann raufspielen?
Oder muß schon während des Quelltext-Compilen diese Verschlüsselung
eingebunden werden?

von Scheintod (Gast)


Lesenswert?

Hi Micha,

Prinzipiell funktioniert das so:

1. Bootloader kompilieren und incl. Key auf avr installieren
2. Programm kompilieren
3. Programm mit Key verschlüsseln
4. Programm auf avr installieren
5. goto 2

Das installieren läuft dabei soweit ich es verstanden habe mit einem
eigenen tool.

In der Application Note aber gut & ausführlich erklärt.

Schoene Gruesse,

Scheintod

von Andreas W. (beinhartplus)


Lesenswert?

Hallo, hab da ein Problem mit dem AES Bootloader von Atmel.
Benutze den ATmega2560.
Die Daten aus dem File liegen alle korrekt vor, allerdings schreibt er 
nichts ins Flash, alls Einträge bleiben auf leer (0xFF).
Habt ihr eine Idee ?

von Martin (Gast)


Lesenswert?

Hallo Andreas,
ich habe das gleiche Problem seit 2 Tagen. Vermutlich haben wir die 
gleichen Fehler gemacht. Falls du das Problem gelöst hast, wäre ein 
Hinweis sehr hilfreich.

Gruß
Martin

von Michael D. (micheagle)


Lesenswert?

Hallo Ihr zwei,

ich gehe mal davon aus dass ihr das Problem schon längst gelöst habt.
Für alle anderen findet sich ein guter Hinweis/die Lösung hier:

Beitrag "Einstellungen unter Assembler und Linker"

Grüße

Michael

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.