Ich möchte etwas über das BIOS eines Raspberry Pi-Motherboards erfahren. Wie heißt das BIOS? Hat es einen bestimmten Namen oder heißt es nur ein BIOS auf einem Raspberry Pi?
Das BIOS speichert einige Software zur Steuerung Ihres PCs vor dem Booten (Beispiel-Setup-Festplatte, Speicher usw.). Der Pi verwendet kein "BIOS" wie in einem PC. Es wird lediglich der Broadcom-Chip (CPU, Cache, GPU) mit der für diesen Chip geschriebenen Firmware initialisiert und direkt an das Betriebssystem übergeben. Das Betriebssystem erkennt dann die von Broadcom gemeldete Hardware und den RAM. Das macht das Booten sehr schnell, aber nur Broadcom weiß, wie man Eigenschaften im laufenden Betrieb debuggt oder "einstellt".
Piotr Kula
Antworten:
32
Die Firmware ist ein proprietärer Closed-Source-Code, der im SoC-Prozessor (System on a Chip) programmiert ist und nicht geändert werden kann. Beim Einschalten der Firmware wird ein Bootloader auf der SD-Karte gestartet. Ich glaube nicht, dass andere Dienste über die SoC-Firmware bereitgestellt werden, daher handelt es sich nicht wirklich um ein "BIOS" (Basic Input / Output System) an sich. Danach kommt alles andere von der SD-Karte.
Gemäß dem Software- Abschnitt des Wikis ist die Startreihenfolge wie folgt:
First Stage Bootloader - Hiermit wird die FAT32-Bootpartition auf der SD-Karte bereitgestellt, sodass auf den Bootloader der zweiten Stufe zugegriffen werden kann. Es wird während der Herstellung des RPi in den SoC selbst programmiert und kann von einem Benutzer nicht neu programmiert werden.
Second Stage Bootloader (bootcode.bin) - Hiermit wird die GPU-Firmware von der SD-Karte abgerufen, die Firmware programmiert und dann die GPU gestartet.
GPU-Firmware (start.elf) - Nach dem Laden kann die GPU die CPU starten. Eine zusätzliche Datei, fixup.dat, wird verwendet, um die SDRAM-Partition zwischen der GPU und der CPU zu konfigurieren. Zu diesem Zeitpunkt wird die CPU vom Reset befreit und die Ausführung übertragen.
Benutzercode - Dies kann eine beliebige Anzahl von Binärdateien sein. Standardmäßig handelt es sich um den Linux-Kernel (normalerweise kernel.img), es kann sich aber auch um einen anderen Bootloader (z. B. U-Boot) oder eine Bare-Bones-Anwendung handeln.
Ich möchte nur hinzufügen, dass der Bootloader der ersten Stufe auf einem kleinen ROM in SoC gebrannt ist. Wie bereits erwähnt, liegt die alleinige Verantwortung beim Laden bootcode.binvon der SD-Karte. Dies ist der Grund, warum es unmöglich ist, RaspberryPi von einem anderen Medium als der SD-Karte zu starten.
Krzysztof Adamski
@ TevoD, nette Antwort! Ich liebe die gründlichen Details.
Devyn Collier Johnson
16
@TevoD hat beinahe recht mit dem, was er in seiner Antwort geschrieben hat - RaspberryPi verwendet als Bootloader eine Closed-Source-Firmware-Binärdatei. Die aktuelle Version finden Sie hier . Die beiden Dateien, mit denen die Firmware erstellt wird, sind bootcode.bin(2nd Stage Bootloader) und start.elf(GPU "Firmware"). Das Interessante und Einzigartige an RaspberryPi ist, dass es von GPU(Grafikchip) ausgeht und hier der Bootloader ausgeführt wird. GPUDann wird ARM CPUder Linux-Kernel gestartet und ausgeführt.
Nach dem Start von Linux wird Code on GPUjedoch nicht entladen. Stattdessen wird ein einfaches Betriebssystem namens VCOS( Video Core Operating System) ausgeführt. Der Linux-Kernel kommuniziert mit seinen Diensten über spezielle mailbox protocolInterrupts (GPU kann ARM-Interrupts erzeugen). Sie können verwendet werden einige Informationen über Mailbox - Protokoll lesen framebufferhier . Die GPU ist nicht nur für Grafik zuständig, sondern steuert auch Uhren und produziert beispielsweise Audio. In dieser Hinsicht kann die GPU-Firmware als ähnlich wie BIOSbei normalen PC-Computern angesehen werden. Weitere Informationen finden Sie unter RaspberryPi Linux-Kerneltreiber.
Weitere Informationen finden Sie auch in dieser Antwort.
Guter Punkt. Ich dachte, die BIOS-Frage beziehe sich ausdrücklich auf die Onboard-Firmware, nicht auf die SD-Karte, und fügte die Startreihenfolge hinzu, um eine vollständigere Antwort zu erhalten. Mit freundlichen Grüßen nimmt es von dort auf. +1
Antworten:
Die Firmware ist ein proprietärer Closed-Source-Code, der im SoC-Prozessor (System on a Chip) programmiert ist und nicht geändert werden kann. Beim Einschalten der Firmware wird ein Bootloader auf der SD-Karte gestartet. Ich glaube nicht, dass andere Dienste über die SoC-Firmware bereitgestellt werden, daher handelt es sich nicht wirklich um ein "BIOS" (Basic Input / Output System) an sich. Danach kommt alles andere von der SD-Karte.
Gemäß dem Software- Abschnitt des Wikis ist die Startreihenfolge wie folgt:
quelle
bootcode.bin
von der SD-Karte. Dies ist der Grund, warum es unmöglich ist, RaspberryPi von einem anderen Medium als der SD-Karte zu starten.@TevoD hat beinahe recht mit dem, was er in seiner Antwort geschrieben hat - RaspberryPi verwendet als Bootloader eine Closed-Source-Firmware-Binärdatei. Die aktuelle Version finden Sie hier . Die beiden Dateien, mit denen die Firmware erstellt wird, sind
bootcode.bin
(2nd Stage Bootloader) undstart.elf
(GPU "Firmware"). Das Interessante und Einzigartige an RaspberryPi ist, dass es vonGPU
(Grafikchip) ausgeht und hier der Bootloader ausgeführt wird.GPU
Dann wirdARM CPU
der Linux-Kernel gestartet und ausgeführt.Nach dem Start von Linux wird Code on
GPU
jedoch nicht entladen. Stattdessen wird ein einfaches Betriebssystem namensVCOS
(Video Core Operating System
) ausgeführt. Der Linux-Kernel kommuniziert mit seinen Diensten über speziellemailbox protocol
Interrupts (GPU kann ARM-Interrupts erzeugen). Sie können verwendet werden einige Informationen über Mailbox - Protokoll lesenframebuffer
hier . Die GPU ist nicht nur für Grafik zuständig, sondern steuert auch Uhren und produziert beispielsweise Audio. In dieser Hinsicht kann die GPU-Firmware als ähnlich wieBIOS
bei normalen PC-Computern angesehen werden. Weitere Informationen finden Sie unter RaspberryPi Linux-Kerneltreiber.Weitere Informationen finden Sie auch in dieser Antwort.
quelle