树莓派如何知道要加载哪个设备树 blob (dtb)?

How does the raspbery pi know which device tree blob (dtb) to load?

A raspberry pi 卡映像在引导分区中包含几个不同的 dtb 文件。例如:

bcm2708-rpi-0-w.dtb
bcm2708-rpi-b.dtb
bcm2708-rpi-b-plus.dtb
bcm2708-rpi-cm.dtb
bcm2709-rpi-2-b.dtb
bcm2710-rpi-3-b.dtb
bcm2710-rpi-3-b-plus.dtb
bcm2710-rpi-cm3.dtb

当 pi 启动时,它如何知道 dtb 何时变为 select?

在 U-Boot 文件 board/raspberrypi/rpi/rpi.c 中,函数 get_board_rev() 读取电路板修订版并根据修订版确定 dtb 名称。 dtb 文件名在环境变量 ftdfile 中设置,可以在引导脚本中使用它来加载适当的文件,然后传递给操作系统。

我不确定 对于 Raspberry Pi OS 是否正确 - 至少“官方文档”对它的解释完全不同。还不清楚为什么 u-boot 是答案的一部分,因为 Raspberry Pi OS 不使用 u-boot;并且 OP 没有提到 u-boot.

我不是“质量警察”,并声称在这方面没有专业知识 - 此问答列在搜索结果中,似乎有点偏离...因此,这个答案。

最后 - 一个答案:这些不同的 .dtb 文件包含 Raspberry Pi 各种硬件模型的 “硬件定义”;您可以在文件名中看到型号名称;例如bcm2710-rpi-3-b-plus.dtb 表示树莓派 3B+。 .dtb 扩展名是 shorthand for "device tree blob/binary" - 从 .dts "device tree 编译来源” 文件。在 boot process 期间检测硬件型号,并用于 select 使用哪个 .dtb 文件,进而用于设置内核。 Rpi 硬件型号名称可以在任何 RPi 上找到,如下所示:

cat /proc/cpuinfo | grep Model

“官方”文档有更多内容detailed answer. The documentation also has more details on device trees in general,如果您有兴趣的话。