Ich denke, Sie sprechen über Bootstrap nicht Bootloader. Ein C-Bootstrap möchte in Assembly geschrieben werden, sonst hast du ein Henne-und-Ei-Problem. Sie können einiges davon in C schreiben, aber dieser C-Code kann nicht vollständig mit dem Standard übereinstimmen (kann nicht davon ausgehen, dass Variablen in bss Null sind oder vorinitialisierte Variablen initialisiert werden, wenn dieser C-Code diese beiden Dinge tut).
Zum Booten einer High-Level-Sprache ist nichts mit Mikrocontrollern oder einem bestimmten Befehlssatz zu tun, sondern global. Eine Hochsprache, sogar C, hat bestimmte Annahmen (der Stapelzeiger wurde eingerichtet, globale Variablen, die mit einem Anfangswert definiert sind, sind dieser Wert, und andere sind Null, jede C-Bibliotheksvorbereitung (Heapspeicherort)) main() oder was auch immer der Einstiegspunkt in C ist. Gleiches gilt für andere Sprachen.
Dies ist der Grund, warum der Bootstrap normalerweise in asm ist, da er keine dieser Regeln hat und Zugriff auf Dinge wie den Stack-Zeiger hat, den die High-Level-Sprachen nicht haben.
Wenn Sie bereit sind, auf einige Sprachkompatibilität zu verzichten, kann der Bootstrap einfacher sein. Mit dem Arm-Cortex-M bietet die Hardware eine Lösung für die Initialisierung des Stack-Pointers ohne Code und startet in C, wenn Sie es für den Einstiegspunkt wollen, aber Sie erhalten nicht die globale Variable Initialisierung, wenn Sie das tun, also wenn Sie wollen verzichten Sie darauf, dass Sie dann nur einen Weg brauchen, um die Vektortabelle zu definieren (asm-Direktiven sind bei weitem die einfachsten, da die Werkzeuge alle da sind).
Jetzt vielleicht, was Sie Startup-Code aufrufen Ich rufe Bootstrap.
Ein Bootloader ist ein Programm, das in der gewünschten Sprache geschrieben wird und den Chip oder das System anzeigt. Es kann Uhren einschalten oder ddr aufladen oder Speicher löschen, um ecc zu aktivieren, was auch immer Sie benötigen. Und dann starten Sie die Hauptanwendung (geschrieben in welcher Sprache, jeder dieser Dinge der Bootloader und die Hauptanwendung hat Startcode nach den Sprachregeln wie oben erwähnt als Bootstrap den Begriff, den ich verwende). Das ist der Boot-Teil des Bootloaders. Der Loader-Teil impliziert, dass jemand den Startvorgang vom Starten der Anwendung abbrechen kann, sodass ein Entwickler in irgendeiner Weise mit einer anderen Anwendung experimentieren kann, indem er entweder die Anwendung in einem nichtflüchtigen RAM überschreibt oder in die Anwendung rammt und sie anstelle des normalen Boot-Pfads ausführt .
Einige Bootloader sind in Teilen konzipiert, so dass Sie den Bootloader mit dem Bootloader aktualisieren können, zum Beispiel könnte Ihr Bootloader so gestaltet sein, dass er sich vor allem anderen in ram kopiert, wenn Sie den Bootloader selbst modifizieren wollen Sie können, mit dem Bootloader den Flash überschreiben, in der Hoffnung, nicht selbst zu mauern. Sie können auch einige Schutzmechanismen wie zwei Bootloader setzen, der erste hat Code, der sich selbst überprüft, wenn er beschädigt ist oder wenn Sie einen Strap haben oder was auch immer es den sekundären startet, der sekundäre kann verwendet werden, um den primären zu überschreiben, den der primäre überschreiben kann sekundär. Sie haben immer noch ein Problem mit Huhn und Ei mit dem kleinen Code oben, der den Gurt überprüft oder eine Prüfsumme vor dem Start in den Rest des Codes. du brichst das und du bist immer noch vermauert.
Chips wie der AVR haben Hardware-Möglichkeiten, um sich von gemauert zu erholen, und haben auch hardwaregeschützte Bootloader, manchmal werkseitig programmiert, bevor Sie den Chip bekommen, von dem Sie einen Riemen oder einen Schlüssel oder was auch immer zu starten und Laden Sie Ihre Anwendung.
Sie sagen also, dass der Bootloader einen "Bootstrap" hat, der für den Bootteil verantwortlich ist und in Assembly geschrieben werden sollte, da er keine der oben genannten Regeln hat? –
ein Bootloader ist ein Programm wie jedes andere, wenn es in einer Hochsprache geschrieben ist, dann erfordert es einen Bootstrap, um es auszuführen, richten Sie die Stapelkopie .data ein, falls nötig. null .bss und so weiter. hat nichts mit seiner Aufgabe oder der Umgebung oder Plattform zu tun, auf der es läuft.Ein Bootloader ist nur ein Programm wie ein Betriebssystem ist nur ein Programm wie ein Webbrowser ist nur ein Programm. –