Wie bootet Raspberry Pi?

57

Ich habe einen Himbeer-Minicomputer und frage mich, wie das Ding den gesamten Startvorgang durchführt. Ich kann meinen eigenen Kernel und meine Init-Ramdisk mit meinen eigenen Skripten kompilieren und mein eigenes minimales Linux-System auf dem PC erstellen, aber dafür brauche ich einen Bootloader. Raspberry scheint Bootloader überhaupt nicht zu unterstützen.

Es scheint irgendwie mit seiner GPU hochzufahren, die eine Partition auf der SD-Karte liest (wahrscheinlich die mit dem bootfähigen Flag), die in FAT32 formatiert werden muss, dann liest es einige Dateien von dort, die zum Beispiel von Raspbian bereitgestellt werden.

Aber wie würde ich meinen eigenen Kernel mit meinen eigenen Anpassungen, die ich selbst kompiliert habe, booten? Wo soll ich das Kernel-Image / initrd (RAM-Disk) kopieren, damit Himbeere es findet und von dort bootet? Ich bin im Grunde genommen auf der Suche nach einer sehr detaillierten technischen Dokumentation, die den Startvorgang auf Himbeere beschreibt, oder nur eine Erklärung dafür.

Petr
quelle
1
Mögliche Duplikate von Was passiert während des Bootvorgangs?
Asalamon74

Antworten:

59

Von diesem Forum posten Raspberry Pi [Edited widerzuspiegeln loader.binals Anachronismus] :

  1. Beim ersten Einschalten des Raspberry Pi ist der ARM-Kern ausgeschaltet und der GPU-Kern eingeschaltet. Zu diesem Zeitpunkt ist der SDRAM deaktiviert.
  2. Die GPU startet die Ausführung des Bootloaders der ersten Stufe, der im ROM des SoC gespeichert ist. Der Bootloader der ersten Stufe liest die SD-Karte, lädt den Bootloader der zweiten Stufe ( bootcode.bin) in den L2-Cache und führt ihn aus.
  3. bootcode.binAktiviert SDRAM und liest den Bootloader der dritten Stufe (loader.bin) von der SD-Karte in den RAM und führt ihn aus. [Neuere Versionen verwenden keinen Bootloader der dritten Stufe. ]
  4. [Falls zutreffend] loader.binliest die GPU-Firmware ( start.elf).
  5. start.elfliest config.txt, cmdline.txtundkernel.img

loader.binmacht nicht viel Es kann .elfDateien verarbeiten und muss daher start.elfoben im Speicher geladen werden (ARM verwendet SDRAM ab Adresse Null). Es gibt einen Plan bootcode.bin, der loader.binElfenladeunterstützung hinzufügt , was unnötig wäre, aber eine niedrige Priorität hat (ich denke, es kann Ihnen 100 ms beim Booten ersparen). [Diese Änderung hat seitdem stattgefunden. ]

Hier sind einige Ressourcen, die hilfreich sein könnten:

syb0rg
quelle
2
Handelt es sich bei dem Inhalt dieser Bin-Dateien um proprietäre Software?
Petr
3
@Petr Hier ist der Github für die Raspberry Pi Firmware, ich bearbeite ihn in meine Antwort.
syb0rg
1
In den häufig gestellten Fragen zu Raspberry Pi heißt es: "Sie müssen von SD booten, aber eine USB-Festplatte kann nach dem ersten Start die Funktion übernehmen. Sie können nicht ohne SD-Karte booten."
syb0rg
1
Ist diese Partition, die zuerst gelesen wird, eine Partition mit B-Flag oder muss es die erste Partition sein? Was ist, wenn ich es zu groß gemacht habe und am Ende der SD-Karte eine weitere erstellen wollte, die kleiner wäre
Petr
1
@Petr Das solltest du als andere Frage stellen!
syb0rg