Wie ist die Startreihenfolge?

35

Ich frage mich, wie die Startsequenz des Raspberry Pi in einer typischen Konfiguration aussieht (sagen wir NOOBS), von der Stromzufuhr (oder dem Warm-Reset, wenn das anders ist) bis zum Erscheinen des Logos. oder wo das beschrieben ist.

Neben dem dringend benötigten Gesamtbild dieser Sequenz interessieren mich vor allem die frühen Phasen:

  1. Was ist der Rücksetzvektor für die ARM-CPU und wie / wo ist dieser definiert?
  2. Aus welchem ​​Speicher werden die ersten ARM-CPU-Anweisungen abgerufen? Wo ist das und mit welcher Technologie wird dieser Code gespeichert?
  3. Ist das ARM32 oder Thumb (oder vielleicht Jazelle) Code? Hängt das vom niederwertigen Bit des Rücksetzvektors ab?
  4. Ist die Quelle (oder die Zerlegung oder der Speicherauszug) dieses frühen Startcodes verfügbar? Wenn nicht, kann der JTAG-Port aus technischen Gründen nicht verwendet werden, um dies festzustellen? Was das Recht betrifft, bin ich bereit, das Risiko einzugehen, meinem Verständnis des in meinem Land (Frankreich) geltenden Rechts zu vertrauen, dh, ich darf meinen eigenen Computer zumindest ohne ausdrücklichen Vertrag vollständig analysieren Anforderung, dies nicht zu tun.
  5. In welcher Reihenfolge werden Peripheriegeräte initialisiert und mit welchem ​​Code?
  6. Gibt es neben der ARM-CPU einige Prozessoren / Automaten, die im BCM2835 ausgeführt werden, und bejahen Sie, wie sich die Startreihenfolge auf die ARM-CPU bezieht?

Ich bin bereit, in das Technische Referenzhandbuch der ARM-CPU und die ARM-Peripheriegeräte BCM2835 oder ein anderes Dokument einzutauchen.

Update: Nach dem Posten habe ich dies und das herausgefunden und festgestellt, dass die GPU des BCM2835 als Master für den ARM fungiert und stark in die Startsequenz involviert ist.

fgrieu
quelle
4
Alles was ich sagen kann, dass die meisten dieser Informationen Closed Source sind, wie der Quellcode, die Bootloader und die SoC-Firmware. Derzeit ist allot unbekannt. Sie sollten eines wissen. Das BCM ist eine GPU ... keine CPU. Der Bootloader startet im GPU-Bereich, initialisiert dort den RAM und übergibt ihn an die CPU, wo wir als erstes auf den Quellcode zugreifen können ... auch bekannt als Raspbian. Viel Glück. Diese Frage ist sehr weit gefasst und schwer zu beantworten.
Piotr Kula
Verwandte: Was passiert während des Bootvorgangs? . Duplikat?
Peter Mortensen

Antworten:

38

Die Startreihenfolge des Raspberry Pi ist im Wesentlichen wie folgt:

  1. Der Start von Stufe 1 befindet sich im On-Chip-ROM. Lädt Stufe 2 in den L2-Cache
  2. Stufe 2 ist bootcode.bin. Aktiviert SDRAM und lädt Stufe 3
  3. Stufe 3 ist loader.bin. Es kennt das .elfFormat und lädtstart.elf
  4. start.elflädt kernel.img. Es liest dann auch config.txt, cmdline.txtund bcm2835.dtb wenn die dtb-Datei existiert, wird sie bei 0×100& kernel @ geladen. 0×8000 Wenn disable_commandline_tagsgesetzt, lädt sie kernel @. 0×0 Andernfalls lädt sie kernel @ 0×8000und setzt ATAGS auf0×100
  5. kernel.img wird dann auf dem ARM ausgeführt.

Alles wird auf der GPU ausgeführt, bis kernel.imges auf den ARM geladen wird.

Ich fand dieses Diagramm sehr nützlich:

Startvorgang

SG60
quelle
2
Sinnvoll. Könnte geklärt werden, ob der Bootloader der zweiten Stufe bootcode.binCode ist, der von der GPU, dem ARM (und dann von welcher Art von Code) oder einer Mischung aus diesen ausgeführt wird? Dasselbe gilt für die 3. Stufe loader.bin(wenn diese nicht weg ist, wie es scheint).
8.
3
@fgrieu Ich habe die Antwort bearbeitet, um eine Klarstellung einzuschließen. Alles wird auf der GPU ausgeführt, bis kernel.imges auf dem ARM ausgeführt wird.
SG60
1
Nach dieser loader.bin wird nicht mehr verwendet. bootcode.binstart.elf
Lädt
@ SG60: Kannst du deine Antwort mit den Informationen von HeatfanJohn aktualisieren?
Peter Mortensen
Kennt jemand NOOBS Boot? Anscheinend ist der Prozess etwas anders und beinhaltet recover.elf und ein paar Softboot-Possen. Ich bin neugierig darauf, Uboot auf einem etwas niedrigeren Level zum Laufen zu bringen.
Sam