除了最需要的序列概述之外,我对早期阶段最感兴趣:
复位向量是什么?
从什么内存中获取第一条ARM CPU指令?那在哪里,用什么技术存储此代码?
是ARM32还是Thumb(或者也许是Jazelle)代码?这是否取决于复位向量的低位?
该早期启动代码的源(或反汇编或转储)是否可用?如果不是,是否有任何技术手段阻止使用JTAG端口来确定这一点?至于法律方面,我准备冒风险信任我对自己居住地所适用法律(法国)的理解的风险,这就是说,至少在没有明确合同的情况下,我完全可以分析自己的计算机。要求不要这样做。
以什么顺序初始化外设,并通过什么代码初始化?
在ARM CPU旁,BCM2835中是否运行着某些处理器/自动机,
我准备深入了解ARM CPU的技术参考手册和BCM2835 ARM外围设备或任何其他文档。
更新:发布后,我发现了这一点,并指出BCM2835的GPU充当了ARM的主人,并大量参与了启动顺序。
#1 楼
Raspberry Pi的启动顺序基本上是这样的:第1阶段启动位于片上ROM中。将阶段2加载到L2缓存中。阶段2是
bootcode.bin
。启用SDRAM并加载第3阶段。第3阶段是loader.bin
。它了解.elf
格式并加载start.elf
start.elf
加载kernel.img
。然后还会读取config.txt
,cmdline.txt
和bcm2835.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
评论
我只能说大部分信息都是封闭源代码,例如源代码,引导加载程序和SoC固件。。目前,分配是未知的。你应该知道一件事。 BCM是GPU ...而不是CPU。引导加载程序从GPU部分开始,在那里初始化RAM,然后移交给CPU,这是我们可以访问源代码的第一个地方……又名Raspbian。祝好运。这个问题非常广泛,很难回答。相关:在启动过程中会发生什么?重复吗?