2013-05-01 9 views
7

Kürzlich begann ich, über Embedded System und Embedded Linux zu lernen. Ich weiß, dass in einem eingebetteten System das Betriebssystem in Flash oder ROM gespeichert ist. Wenn es eingeschaltet ist, lädt der Bootloader das Betriebssystem in den Hauptspeicher, und mit einem Raspberry Pi ist das "Flash oder ROM" eine SD-Karte.Wie funktioniert der Bootloader von Raspberry Pi?

Also, ich war auf der Suche nach Raspberry Pi, weil ich anfangen möchte mit einem zu üben, und ich war verwirrt über das Konzept des "Booten" ein Raspberry Pi. Meine Frage ist, welcher Bootloader Raspberry Pi verwendet und wie funktioniert es? (Nämlich welche Prozesse vor dem Kernel stattfinden? head.o? main.c? (Start Kernel))

+0

Gut beantwortet hier: http: //raspberrypi.stackexchange.com/a/10490/34554 – opyate

+0

Ich stimme, diese Frage als Off-Thema zu schließen, weil es in http://raspberrypi.stackexchange.com gehört und es ist ein Duplikat von (http://raspberrypi.stackexchange.com/questions/10489/how-does-himbeer-pi-boot) –

Antwort

13

Dieser Prozess wurde zu Tode beschrieben, sollten Sie keine Probleme haben, es im Internet zu finden.

Die Raspberry Pi enthält eine GPU und einen ARM-Prozessor, zwei separate Prozessoren. Die GPU kommt zuerst, nehme ich an, angetrieben von einem On-Chip-ROM oder Hardware, die liest die SD-Karte auf der Suche nach der ersten Boot-Datei bootcode.bin. Dieser GPU-Bootloader ist, was uns betrifft, undokumentiert, bringt den Chip zu einem Punkt und lädt dann ein anderes GPU-Programm. Dieses GPU-Programm beendet den Chip (ddr init) und lädt schließlich kernel.img, das ist die ARM-Anwendung (nicht arm bootloader, sondern Anwendung wie in linux), lädt das direkt in ram und macht, was ein normaler Bootloader tun würde bereite den Arm darauf vor, Linux zu booten (was normalerweise fast nichts ist) und dann den Arm zu booten.

Ein herkömmlicher Bootloader ist, wenn Sie nur einen Prozessor haben und das ist der Prozessor, der auch die Anwendung/Betriebssystem ausführen wird. Namen wie redboot und uboot, aber diese sind stark überkompliziert geworden, Betriebssysteme selbst. es braucht sehr wenig, um Linux zu booten, ein paar ATAGs in den RAM zu setzen und ein paar Register zu setzen, und das ist es (nachdem Sie natürlich das System/ram usw. hochgefahren haben, das nicht zu viel Code braucht, aber delecate/schwierig ist code für ddr zum beispiel), die neueren linuxes haben ein bisschen mehr kram zum einrichten, aber nicht zu viel.

Das Raspberry Pi Startup ist elegant in seiner Einfachheit sowie die Funktion des entfernbaren nichtflüchtigen Speichers (die SD-Karte), die Sie zurück zu den Tagen vor dem Bootloader bringt, wo Sie die ROMs abschneiden und löschen würden Es hat einige dieser Schmerzen, aber es gibt Möglichkeiten. Inzwischen gibt es wahrscheinlich dritte Parteien (Uboot, etc) Bootloader zur Verfügung. Mit dem Wechselspeicher benötigen Sie keinen komplizierten Bootloader, Sie müssen sich keine Gedanken darüber machen, wie Sie das System mit einer beschädigten Anwendung brennen können. Sie können das System wiederherstellen, indem Sie den Flash einfach entfernen und ändern. Bootloader sind darauf gekommen, das Entfernen der Medien zu vermeiden, um zu vermeiden, dass ein Flash und ein Resolder nach dem Programmieren entfernt werden müssen, oder einen Sockel auf einer Platine zu verwenden, die dazu bestimmt ist, ein gelötetes Teil zu haben.

Das kernel.img wie es jetzt steht (an einem Punkt wurde es auf 0x00000000 geladen) lädt auf 0x8000. Und das ist alles, was Sie wissen müssen, es ist ein normales Kernel-Image, das Sie mit einem Bootloader verwenden würden. Sie können dann jedes gewünschte Bare-Metal-Programm oder jede andere Anwendung schreiben, solange Sie es mit der Adresse 0x8000 als Anfang der Binärdatei und dem Startpunkt verknüpfen. Wenn Sie Ausnahmen verwenden möchten, müssen Sie die Ausnahmetabelle dann irgendwie schreiben (es gibt verschiedene Möglichkeiten, dies zu tun). Eine Alternative dazu ist eine Legacy-Modus-Einstellung. Sie können eine optionale Datei config.txt zum Konfigurieren verwenden, die den Kernel.img auf 0x0000 wie die frühen Tage des rpi lädt. Persönlich gehe ich mit dem jetzt Standard 0x8000, andere Bare-Metal-Leute nehmen den anderen Weg ...

Ich habe einen sehr einfachen xmodem Bootloader und einen, der die Jtag-Pins, so dass Sie JTAG (beide Fälle zu vermeiden, haben kann) um die SD-Karte zu tanzen Hunderte bis Tausende von Malen, wie Sie Ihre Anwendung entwickeln). Es gibt andere, einige komplizierter, vielleicht sogar eine, die den USB bis zu dem Punkt hat, an dem das Netzwerk funktioniert.