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

评论

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

#1 楼

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

根据Wiki的软件部分,引导顺序如下: >第一阶段引导程序-用于将FAT32引导分区挂载到SD卡上,以便可以访问第二阶段引导程序。它在RPi的制造过程中被编程到SoC本身中,并且用户无法对其进行重新编程。 SD卡,编程固件,然后启动GPU。另一个文件fixup.dat用于在GPU和CPU之间配置SDRAM分区。此时,CPU从复位释放,执行转移过来。

用户代码-这可以是任意数量的二进制文件之一。默认情况下,它是Linux内核(通常称为kernel.img),但也可以是另一个引导程序(例如U-Boot)或准系统应用程序。


评论


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

– Krzysztof Adamski
13年7月17日在18:38

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

–德文·科利尔·约翰逊(Devyn Collier Johnson)
13年7月17日在19:26

#2 楼

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

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

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

评论


好点子。我正在考虑将BIOS问题明确地指代板载固件而不是SD卡,并添加了引导顺序以获取更完整的答案。您当然可以从那里开始。 +1

– Tevo D
13年7月17日在17:51