Raspberry Pi使用什么BIOS?


29

我想了解Raspberry Pi主板上的BIOS。BIOS叫什么?它有一个特定的名称,还是只是在Raspberry Pi上称为BIOS?


2
BIOS在启动之前会存储一些软件来控制PC(例如,设置硬盘,内存等)。Pi不像PC那样使用“ BIOS”。它只是使用为该芯片编写的固件初始化Broadcom芯片(CPU,高速缓存,GPU),然后直接传递给操作系统。然后,操作系统将检测Broadcom报告的硬件和内存。这样可以使启动速度非常快,但是只有Broadcom知道如何动态调试或“设置”属性。
Piotr Kula

Answers:


32

固件是已编程到SoC(片上系统)处理器中的闭源专有代码,无法修改。上电后,固件将在SD卡上启动引导加载程序。我认为SoC固件不提供任何其他服务,因此它本身并不是真正的“ BIOS”(基本输入/输出系统)。此后,其他所有内容均来自SD卡。

根据Wiki软件部分,引导顺序如下:

  1. 第一阶段引导程序 -用于将FAT32引导分区挂载在SD卡上,以便可以访问第二阶段引导程序。它在RPi的制造过程中被编程到SoC本身,并且用户无法对其进行重新编程。
  2. 第二阶段引导加载程序(bootcode.bin)-用于从SD卡中检索GPU固件,对固件进行编程,然后启动GPU。
  3. GPU固件(start.elf)-加载后,这将允许GPU启动CPU。另一个文件fixup.dat用于配置GPU和CPU之间的SDRAM分区。此时,CPU从复位中释放,执行转移过来。
  4. 用户代码 -这可以是任意数量的二进制文件之一。默认情况下,它是Linux内核(通常称为kernel.img),但也可以是另一个引导程序(例如U-Boot)或准系统应用程序。

7
我只补充说第一阶段的引导加载程序是在SoC内部的小ROM上刻录的。如前所述,仅负责bootcode.bin从SD卡加载。这就是为什么无法从SD卡以外的媒体引导RaspberryPi的原因。
Krzysztof Adamski 2013年

@TevoD,不错的答案!我喜欢详尽的细节。
Devyn Collier Johnson

16

@TevoD在他的回答中几乎是正确的-RaspberryPi使用封闭源固件二进制文件作为引导加载程序。当前版本可以在这里找到。构成固件的两个文件是bootcode.bin(2nd stage bootloader)和start.elf(GPU“ firmware”)。RaspberryPi有趣且非常独特的地方是它从GPU(图形芯片)开始,这是引导加载程序实际运行的地方。GPU然后启动ARM CPU并运行Linux内核。

Linux启动后,GPU不会卸载代码。而是运行它自己的简单操作系统,称为VCOSVideo Core Operating System)。Linux内核使用特殊mailbox protocol中断和中断(GPU可以产生ARM中断)与其服务进行通信。您可以framebuffer 在此处阅读有关邮箱协议的一些信息。GPU不仅负责图形事物-例如,它还控制时钟并产生音频。在这方面,可以将GPU固件视为与BIOS普通PC计算机类似的东西。您可以在阅读RaspberryPi Linux内核驱动程序时找到更多信息。

您也可以在答案中找到更多信息。


好点子。我正在考虑将BIOS问题明确地指代板载固件而不是SD卡,并添加了引导顺序以获取更完整的答案。您当然可以从那里开始。+1
Tevo D
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.