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:
- Was ist der Rücksetzvektor für die ARM-CPU und wie / wo ist dieser definiert?
- Aus welchem Speicher werden die ersten ARM-CPU-Anweisungen abgerufen? Wo ist das und mit welcher Technologie wird dieser Code gespeichert?
- Ist das ARM32 oder Thumb (oder vielleicht Jazelle) Code? Hängt das vom niederwertigen Bit des Rücksetzvektors ab?
- 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.
- In welcher Reihenfolge werden Peripheriegeräte initialisiert und mit welchem Code?
- 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.
Antworten:
Die Startreihenfolge des Raspberry Pi ist im Wesentlichen wie folgt:
bootcode.bin
. Aktiviert SDRAM und lädt Stufe 3loader.bin
. Es kennt das.elf
Format und lädtstart.elf
start.elf
lädtkernel.img
. Es liest dann auchconfig.txt
,cmdline.txt
undbcm2835.dtb
wenn die dtb-Datei existiert, wird sie bei0×100
& kernel @ geladen.0×8000
Wenndisable_commandline_tags
gesetzt, lädt sie kernel @.0×0
Andernfalls lädt sie kernel @0×8000
und setzt ATAGS auf0×100
kernel.img
wird dann auf dem ARM ausgeführt.Alles wird auf der GPU ausgeführt, bis
kernel.img
es auf den ARM geladen wird.Ich fand dieses Diagramm sehr nützlich:
quelle
bootcode.bin
Code 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. Stufeloader.bin
(wenn diese nicht weg ist, wie es scheint).kernel.img
es auf dem ARM ausgeführt wird.loader.bin
wird nicht mehr verwendet.bootcode.bin
start.elf