我想知道Raspberry Pi的启动顺序在典型的设置(例如NOOBS)中是什么,从电源应用(或热复位,如果不同)到徽标的外观。或描述的地方。

除了最需要的序列概述之外,我对早期阶段最感兴趣:


复位向量是什么?
从什么内存中获取第一条ARM CPU指令?那在哪里,用什么技术存储此代码?
是ARM32还是Thumb(或者也许是Jazelle)代码?这是否取决于复位向量的低位?
该早期启动代码的源(或反汇编或转储)是否可用?如果不是,是否有任何技术手段阻止使用JTAG端口来确定这一点?至于法律方面,我准备冒风险信任我对自己居住地所适用法律(法国)的理解的风险,这就是说,至少在没有明确合同的情况下,我完全可以分析自己的计算机。要求不要这样做。

以什么顺序初始化外设,并通过什么代码初始化?
在ARM CPU旁,BCM2835中是否运行着某些处理器/自动机,

我准备深入了解ARM CPU的技术参考手册和BCM2835 ARM外围设备或任何其他文档。

更新:发布后,我发现了这一点,并指出BCM2835的GPU充当了ARM的主人,并大量参与了启动顺序。

评论

我只能说大部分信息都是封闭源代码,例如源代码,引导加载程序和SoC固件。。目前,分配是未知的。你应该知道一件事。 BCM是GPU ...而不是CPU。引导加载程序从GPU部分开始,在那里初始化RAM,然后移交给CPU,这是我们可以访问源代码的第一个地方……又名Raspbian。祝好运。这个问题非常广泛,很难回答。

相关:在启动过程中会发生什么?重复吗?

#1 楼

Raspberry Pi的启动顺序基本上是这样的:


第1阶段启动位于片上ROM中。将阶段2加载到L2缓存中。阶段2是bootcode.bin。启用S​​DRAM并加载第3阶段。第3阶段是loader.bin。它了解.elf格式并加载start.elf


start.elf加载kernel.img。然后还会读取config.txtcmdline.txtbcm2835.dtb
如果存在dtb文件,则将其加载到0×100和内核@ 0×8000
如果设置了disable_commandline_tags则将加载内核@ 0×0
,否则将加载内核@ 0×8000并将ATAGS放在0×100


kernel.img然后在ARM上运行。

一切都在GPU上运行,直到kernel.img加载到ARM上。 />
我发现此图非常有用:



评论


有用。是否可以澄清第二阶段bootloader bootcode.bin是由GPU,ARM(然后是哪种代码)或它们的组合运行的代码?与第三阶段loader.bin相同(如果看起来好像没有消失)。

– fgrieu
13年8月8日在9:22



@fgrieu我已经编辑了答案以包含说明。一切都在GPU上运行,直到在ARM上运行的kernel.img为止。

– SG60
2013年11月30日15:58



根据此loader.bin不再使用。 bootcode.bin根据此Git提交直接加载start.elf

–热火约翰
2014年5月27日下午16:43

@ SG60:您可以使用HeatfanJohn的信息来更新您的答案吗?

– Peter Mortensen
15年3月3日在21:46

有人知道NOOBS启动吗?显然那里的过程略有不同,涉及到recover.elf和一些软启动滑稽动作。我很好奇让uboot在较低的级别上工作。

–山姆
16-2-17在15:05

#2 楼

对于新的Pi4,随着旧的bootcode.bin从sdcard或/boot移至内部512KB EEPROM,引导流程进行了一些更改。



更多:Pi4 Bootflow