www.mikrocontroller.net

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


Autor: dirk (Gast)
Datum:

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
Autor: Otto (Gast)
Datum:

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

Otto
Autor: Robert Teufel (robertteufel)
Datum:

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
Autor: Ralf (Gast)
Datum:

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
Autor: Oha (Gast)
Datum:

Der Hauptvorteil eines Bootloaders : Der Kunde kann eine neue Firmware
laden.
Autor: Layouter (Gast)
Datum:

>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.
Autor: dirk (Gast)
Datum:

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
Autor: Thomas (Gast)
Datum:

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
Autor: Johann L. (gjlayde) Benutzerseite
Datum:

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






--
Autor: Peter Dannegger (peda)
Datum:

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
Autor: ... ... (docean) Benutzerseite
Datum:

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
Autor: No Name (nohelp)
Datum:

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.
Autor: Ralf (Gast)
Datum:

> 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
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

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?
Autor: Peter Dannegger (peda)
Datum:

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
Autor: Oliver (Gast)
Datum:

>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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net