Wie funktioniert Raspberry Pi boot-loader arbeiten?
Neulich habe ich angefangen zu studieren, über Embedded Systems und Embedded Linux. Ich weiß, dass es in einem eingebetteten system, das Betriebssystem gespeichert wird auf Flash-oder ROM. Wenn er eingeschaltet ist, wird der bootloader lädt das Betriebssystem in den Hauptspeicher laden, und mit ein Raspberry Pi, dass "flash-oder ROM" ist eine SD-Karte.
So, ich war auf der Suche für den Raspberry Pi, weil ich will, um die übung zu beginnen mit, und ich war verwirrt über den Begriff "Booten" des Raspberry Pi. Meine Frage ist, was der bootloader macht Raspberry Pi verwenden und wie funktioniert es? (Nämlich, welche Prozesse auftreten, bevor der kernel? head.o
? main.c
? (start kernel))
- Gut hier beantwortet: raspberrypi.stackexchange.com/a/10490/34554
- Ich werde die Abstimmung zu schließen, ist diese Frage off-topic, denn es gehört in der raspberrypi.stackexchange.com und es ist doppelt (raspberrypi.stackexchange.com/questions/10489/...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Prozess wurde beschrieben, der Tod, sollten Sie keine Probleme hatten es zu finden im Netz.
Den raspberry pi enthält einen GPU-und einen ARM-Prozessor, zwei separate Prozessoren. Die GPU kommt zuerst, ich nehme an, angetrieben von einem on-chip-rom-oder hardware, der liest die sd-Karte nach dem ersten boot-Datei bootcode.bin. Dass GPU-bootloader ist nicht dokumentiert, wie weit wir betroffen sind, bringt es der chip auf einen Punkt, und lädt dann starten.elf weitere GPU-Programm. Das gpu-Programm endet die Erziehung der chip (ddr-init) und schließlich lädt kernel.img, das ist der ARM-Anwendung (nicht arm bootloader aber Anwendung wie bei linux), es lädt, die direkt in den ram und macht das, was ein normaler bootloader würde die Vorbereitung der arm-linux zu Booten (die ist in der Regel fast nichts) und dann den arm Stiefel.
Einem Bootlader ist, wenn Sie nur einen Prozessor, und das ist der Prozessor, der wird auch führen Sie die Anwendung/Betriebssystem. Namen wie redboot und uboot, aber diese haben sich grob zu kompliziert, Betriebssysteme selbst. es dauert sehr wenig, linux zu Booten, legen Sie ein paar ATAGs in ram und setzen Sie ein paar von Registern und das ist es (nachdem natürlich, die Sie mitgebracht haben, bis das system/ram, etc. was aber nicht zu viel code, aber ist delecate/schwierig-code für die ddr zum Beispiel), die neuere Linux-Versionen haben ein bisschen mehr ins Zeug setup aber nicht zu viel.
Den raspberry pi Start ist elegant in seiner Einfachheit, sowie die Funktion, removable non-volatile storage (sd-Karte), die Sie Weg zurück in der pre-bootloader Tage, in denen Sie die pop-roms aus und löschen Sie Sie, es hat einige der diese Schmerzen, aber es gibt Möglichkeiten, um das. es gibt mittlerweile wahrscheinlich Dritte Komplex ist (uboot, etc) Bootloader zur Verfügung. Mit der austauschbaren flash bedeutet, dass Sie nicht brauchen, ein complcated bootloader, die Sie nicht haben, um sorgen über bricking das system eine beschädigte Anwendung, die Sie wiederherstellen können, indem Sie einfach entfernen Sie die flash und, es zu ändern. Bootloader aufgewachsen ist, von vermeiden, entfernen Sie die Medien, um zu vermeiden, dass ablöten ein Blitz und resolder nach der Programmierung oder mit einem sockel auf einem board dazu bestimmt, haben ein angelötet Teil.
Den kernel.img, wie es jetzt steht (an einer Stelle war es geladen 0x00000000) lädt zu 0x8000. Und das ist alles, was Sie brauchen, zu wissen, es ist eine normale kernal-image, das Sie verwenden würden, mit einem bootloader. Sie können dann schreiben, was bare-metal-oder andere Programm/Anwendung, die Sie wollen, so lange, wie Sie link zur Adresse 0x8000 als den Beginn des Binär-und Ausgangspunkt. Wenn Sie möchten, verwenden Sie Ausnahmen, die Sie brauchen, dann schreiben Sie die exception-Tabelle irgendwie (Es gibt verschiedene Möglichkeiten, dies zu tun). Eine alternative dazu ist, gibt es einen legacy-Modus-Einstellung können Sie eine optionale Datei config.txt zum konfigurieren und laden der kernel.img 0x0000 wie die frühen Tage des rpi. Ich persönlich gehe mit den nun standardmäßig 0x8000, andere bare-metal-Leute nehmen den anderen Weg...
Habe ich eine sehr einfache xmodem-bootloader und eine, die stellt die jtag-pins, so dass Sie verwenden können, jtag (beide Fälle zu vermeiden, müssen die sd-Karte tanzen Hunderte zu den tausenden Zeiten, wie Sie Ihre Anwendung entwickeln). Es gibt andere, etwas komplizierter, vielleicht sogar eine, die hat die usb-bis zu dem Punkt, das Netzwerk funktioniert.