Forum: Mikrocontroller und Digitale Elektronik Wofür ist ein bootloader?


von dirk (Gast)


Lesenswert?

Hallo Forum,
ich habe da eine Frage. Ich möchte mir das AT90USBKEY  Demo-Kit zulegen. 
Jetzt habe ich gelesen dass es da ein „bootloader“ und die dazugehörige 
Software „flip“ gibt. Jetzt ist meine Frage wofür man denn so einen 
bootloader benötigt? Kann man mit einem bootloader das gleiche machen 
wie z.b. wenn ich ein Programm über meine JTAG- Schnittstelle laden? 
Oder für was benötigt man einen bootlaoder?
Danke für eure Antworten!!

Grüße Dirk

von Otto (Gast)


Lesenswert?

ein Bootloader lädt ein "Betriebssystem" oder ein Programm von externen 
Datenträgern z. B. über RS-232

Otto

von Robert T. (robertteufel)


Lesenswert?

Grundsaetzlich ist ein Bootloader dazu da ein jungfraeuliches Teil aus 
dem Sumpf zu ziehen. D.h. am Anfang hat der micro noch kein 
Anwenderprogramm, der BL stellt eine Kommunikation her, die es 
ermoeglicht ein Anwenderprogramm zu laden. Implementierungen von 
Bootloadern sind recht verschieden zwischen verschiedenen Herstellern.

Gruss, Robert

von Ralf (Gast)


Lesenswert?

Ein Bootloader ist ein von der Hauptapplikation unabhängiges Programm, 
welches die eigentliche Applikation über eine definierte Hard- und 
Software-Schnittstelle in Empfang nimmt und den Controller entsprechend 
programmiert.

Je nach Architektur des Controllers muss die Hauptapplikation nichts 
weiter davon beachten. Es kann aber auch sein, dass beide aufeinander 
abgestimmt sein müssen, z.B. was Startadressen, Interrupt-Vektoren etc. 
betrifft.

Im einfachsten Fall nimmt der Bootloader direkt die auf dem PC 
generierten Daten (z.B. HEX-File) entgegen, wandelt sie passend und 
schreibt sie in den Speicher. Erweiterte Versionen können z.B. 
Verschlüsselung unterstützen oder bestimmte Teilaufgaben (EEPROM löschen 
oder partiell neu beschreiben) erledigen.
PC-Programme wie FLIP erleichtern die Kommunikation mit dem Bootloader, 
da sie die entsprechenden Befehle gleich passend mit Daten versehen, 
eine Light-Version kann aber auch einfach über ein Terminal-Programm mit 
dem User kommunizieren - der User muss dann halt alles von Hand machen.

Bootloader können so geschrieben sein, dass auch die Applikation selbst 
den Bootloader starten kann (dann muss sie aber vom Bootloader "wissen") 
oder Teile des Bootloaders (Schreibe Byte, lösche Speicher, etc.) können 
auch von der Applikation verwendet werden -> In Application Programming. 
Das spart Speicherplatz.

Je nach Architektur werden wiederum spezielle Anforderungen an den 
Bootloader gestellt. So kann es sein, dass z.B. Befehle für das 
Schreiben des Speichers in einem bestimmten Speicherbereich stehen 
müssen, damit sie ausgeführt werden können.

Ein Vorteil von Bootloadern ist, dass man sie ohne oder nur geringem 
zusätzlichen Hardware-Aufwand (z.B. Taster bei Reset) starten kann und 
keine Hardware für Programmieren braucht.
Im Gegensatz zu einem Programmier-Tool bietet ein Bootloader nicht die 
Möglichkeit, Breakpoints zu setzen oder Register auszulesen.

Ralf

PS: Wow, eigentlich wollte ich nur drei Sätze drüber verlieren... 
staun

von Oha (Gast)


Lesenswert?

Der Hauptvorteil eines Bootloaders : Der Kunde kann eine neue Firmware 
laden.

von Layouter (Gast)


Lesenswert?

>Grundsaetzlich ist ein Bootloader dazu da ein jungfraeuliches Teil aus
>dem Sumpf zu ziehen.

Falls der BL schon drauf ist hats schon mal gepoppt :-) Ganz 
jungfräulich ist es nicht mehr!

Falls der "BL" fest im uC ist würd ich den "Bootstrap Loader " nennen.

von dirk (Gast)


Lesenswert?

Hallo zusammen,
vielen Dank für eure Erklärung. Danke auch an Ralf an deine, doch sehr 
ausführliche Beschreibung. Ich kann mir jetzt ziemlich gut vorstellen 
was ein Bootloader ist. Bin mal gespannt wie ich den dann beim 
AT90USBKEY verwenden muss. Ich denke mit der Zeit werde ich dann tiefere 
Einblicke in so einen Bootloader bekommen :o)
Danke nochmal an alle und viele Grüße,

Dirk

von Thomas (Gast)


Lesenswert?

Ich könnte Dir übrigens einen AT90USBKEY verkaufen. Meine, ich hätte 
noch einen daliegen. Falls noch  nicht zu spät, schau ich heute abend 
gerne mal nach.

Grüße, t

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hmmm... Die Frage des OP hab ich mir auch schon oft gestellt. MIt ist 
zwar klar, was ein Bootloader ist, aber wofür er zB auf einem 
kleinen µC wie AVR sinnvoll ist erschliesst sich mir nicht wirklich:

Diese µC haben eine ISP (In-System Programmier-Schnittstelle), können 
also programmiert werden, ohne sie aus der Zielschaltung zu entfernen. 
Bei geschicktem Layout kann man die ISP-Pins auch für die Anwendung 
nutzen. Man verliert also keine Pins für die ISP-Technik. Für einen 
Bootloader muss man jedoch immer Kommunikationsleitungen vorsehen, auch 
wenn die Applikation im Endeffekt garkeine Kommunikation braucht.

Zudem belegt ein Bootloader wertvollen Speicher.

Wenn ein Bootloader immer eine ganze Anwendung lädt, kann man doch 
ebensogut den ISP verwenden...

Einzig in dem Fall, wo man Verschlüsselung braucht oder Module 
nachgeladen werden, versteh ich den Sinn eines Bootloaders. Ein Beispiel 
wäre eine Spiele-Anwendung, die eine Grafik-API zur Verfügung stellt und 
einzelne Spiel-Module nachladen kann, welche diese Grafik-API benutzen. 
Wenn der Anwender ein anderes Spiel spielen will, würde das 
entsprechende Modul nachgeladen werden.

Das würde aber einen dynamischen Lader erfotrdern, weil man die 
Resourcen wie RAM und Sprungadressen beim Laden verwalten/fixen muss, 
der Code muss PIC (position independent) erzeugt sein und andere 
Eigenschaften erfülen, die man beim Erzeugen beachten muss. Die meisten 
Bootloader, die hier unterwegs sind, können das aber gerade nicht und 
nur eine Applikation komplett rauswerfen und ne neue reinladen. Das 
sieht man schon daran, daß diese Bootloader idR HEX- oder BIN-Dateien 
brauchen, und zB mit ELF nix anfangen können.

Vielleicht bringt ja jemand Licht ins Dunkel :-)

Johann






--

von Peter D. (peda)


Lesenswert?

Johann L. wrote:
> Die meisten
> Bootloader, die hier unterwegs sind, können das aber gerade nicht und
> nur eine Applikation komplett rauswerfen und ne neue reinladen.

Das liegt daran, daß sowas vom Compiler nicht unterstützt wird.
Vom Prinzip her könnte ein Bootloader Code nachladen, bloß hat wohl 
bisher keiner einen Sinn darin gesehen. SPI kann das generell nicht.

> Das
> sieht man schon daran, daß diese Bootloader idR HEX- oder BIN-Dateien
> brauchen, und zB mit ELF nix anfangen können.

Was ist an ELF denn so besonders?
HEX-Files könnte man genau so gut nachladen (wenn man wollte).


> Vielleicht bringt ja jemand Licht ins Dunkel :-)

Ich entwickele gern mit Bootloader, das ist so schön praktisch.
Ich brauche dann nämlich nicht spezielle Programmierhardware 
mitschleppen, den AVR direkt an die COM rangepappt, fertsch.
Nur zu Anfang muß ich einmal das STK500 bemühen, um den Bootloader zu 
flashen und die Fuses zu setzen.

Ich muß beim Bootloader auch nur einen Pin nach außen führen (SPI: 4 
Pins), der dann praktischer Weise gleich zu Debugzwecken dienen kann.

Auch kann ich den Resetpin benutzen und trotzdem programmieren, z.B.: 
ATtiny85 = 6 IOs, ATtiny84 = 12 IOs, ATtiny861 = 16 IOs usw.


Peter

von ... .. (docean) Benutzerseite


Lesenswert?

Hab mal einen Link auf die gute Erklärung von Ralf im Wiki hinzugefügt.

http://www.mikrocontroller.net/articles/Bootloader

Vlz. könnte man da sogar ganz übernehmen

von Birger Z. (nohelp)


Lesenswert?

Angenommen, du möchtest einen Mikrocontroller programmieren, der weder 
frei zugänglich, weil embedded, oder mehrere (Kilo-)Meter entfernt vom 
Rechner platziert ist. Wie würdest du das machen? Richtig, du musst ein 
anderes Transfermedium als das klassiche ISP via Parallel-/USB-port 
wählen. Hier kommt dann der Bootloader als Übersetzer ins Spiel.

von Ralf (Gast)


Lesenswert?

> Hab mal einen Link auf die gute Erklärung von Ralf im Wiki hinzugefügt.
Danke, es freut mich, dass meine Erklärung so gut war :) Gut fürs 
Selbstwurstsein grins

Ralf

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger wrote:

> Ich entwickele gern mit Bootloader, das ist so schön praktisch.

Ditto hier.

Hast du den PC-Part ins AVR-Studio eingebunden?

Ich scheitere daran, dass ich es nicht schaffe, im Tools Menü einen 
vernünftigen Menüpunkt zu erzeugen.

Klar kann ich den Menüpunkt erzeugen und der Loader wird auch 
aufgerufen. An der ganzen Sache stört mich nur, dass ich es nicht 
schaffe, in das abzusetzende Kommando den Projektnamen generisch 
einzusetzen.

Mein Kommando sieht so aus

   c:\pboot\pboot -B9600 -Pdefault/timer.hex

(oder so ähnlich, habs jetzt nicht im Kopf)

Es sollte aber so aussehen

   c:\pboot\pboot -B9600 -Pdefault/%PROJEKT%.hex

oder so ähnlich. Nur konnte ich nicht rausfinden, ob es an dieser Stelle 
sowas wie Variablen gibt. Und jedesmal bei einem Projektwechsel diese 
Commandline anpassen ist fehleranfällig und mühsam.

Wie machst du das?

von Peter D. (peda)


Lesenswert?

Karl heinz Buchegger wrote:

> Hast du den PC-Part ins AVR-Studio eingebunden?

Nein, ich benutze für den WINAVR und Bootloader eine Batch-Datei.


> Klar kann ich den Menüpunkt erzeugen und der Loader wird auch
> aufgerufen. An der ganzen Sache stört mich nur, dass ich es nicht
> schaffe, in das abzusetzende Kommando den Projektnamen generisch
> einzusetzen.

Man könnte im Make einen festen Namen für das Hexfile eintragen oder 
auch gleich aus dem Make das PC-Programm aufrufen.

Im allgemeinen erlauben IDEs aber die Übergabe von Parametern an ein 
Fremdprogramm.
Ich hab aber noch nicht intensiv mit dem AVRStudio gearbeitet.
Ich benutze es nur als Programmmer mit dem STK500.
Jeder jungfräuliche AVR muß ja einmal aufs STK500, um den Bootlader 
verpaßt zu bekommen.


Peter

von Oliver (Gast)


Lesenswert?

>Im allgemeinen erlauben IDEs aber die Übergabe von Parametern an ein
>Fremdprogramm.

Im speziellen leider nicht. Mit AVRSTudio geht das schlicht und einfach 
nicht.

Oliver

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.