【问题标题】:How does the raspbery pi know which device tree blob (dtb) to load?树莓派如何知道要加载哪个设备树 blob (dtb)?
【发布时间】:2019-02-14 09:40:20
【问题描述】:

树莓派卡映像在引导分区中包含多个不同的 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?

【问题讨论】:

  • 内核使用任何已加载到内存中的 dtb。引导加载程序,例如U-Boot,决定或已定义为内核加载哪个 dtb 文件。您需要检查 U-Boot 环境,看看它对您的主板有什么作用。

标签: linux-kernel raspberry-pi u-boot device-tree


【解决方案1】:

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

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

最后 - 回答:这些各种.dtb 文件包含 Raspberry Pi 各种硬件模型的“硬件定义”;您可以在文件名中看到型号名称;例如bcm2710-rpi-3-b-plus.dtb 表示 RPi 3B+。 .dtb 扩展是 "device tree blob/binary" 的简写 - 从 .dts "device tree source" 文件编译而来。在boot process 期间检测到硬件模型,用于选择要使用的.dtb 文件,该文件又用于设置内核。 Rpi 硬件型号名称可以在任何 RPi 上找到,如下所示:

cat /proc/cpuinfo | grep Model

“官方”文档有更多detailed answer。如果您有兴趣,该文档还有更多 details on device trees in general

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在 Raspberry PI OS(debian 发行版)中,不使用 u-boot。相反,第二阶段引导加载程序(即 bootcode.bin 文件)后跟 start*.elf 文件加载内核和 dtb 文件。
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2015-04-13
    • 2017-11-26
    • 1970-01-01
    • 2019-02-14
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多