设备树覆盖命名

Device Tree Overlay naming

尝试在 Beaglebone black 上加载设备树覆盖时,我遇到了一个奇怪的问题。加载程序无法加载 .dtbo 文件,因为它正在寻找一个名称与被告知要加载的文件不同的文件。 .dts 文件是使用以下命令在同一设备上编译的:

dtc -O dtb -o TEST-DT-00A0.dtbo -b 0 -@ TEST-DT-00A0.dts

编译完成且没有错误,但是当我尝试使用以下方式加载二进制文件时:

echo TEST-DT-00A0.dtbo > /sys/devices/bone_capemgr.9/插槽

我看到错误:

-bash: echo: 写入错误: 没有那个文件或目录

使用 dmesg 检查失败的原因表明加载程序正在尝试加载名称为(-0 插入到文件名中)的文件:

TEST-DT-0-00A0.dtbo

果然,如果我将 .dtbo 文件重命名为加载程序期望的名称,它会正确加载并且工作正常。

有谁知道为什么设备树加载器会在名称中添加额外的“-0”?在第二个 Beaglebone 上,加载程序期望文件被命名为 TEST-DT-00-00A0.dtbo(-00 添加到名称中)。

如果有帮助,这里是 uname 的输出:

Linux beaglebone 3.8.13-bone79 #1 SMP 10 月 13 日星期二 20:44:55 UTC 2015 armv7l GNU/Linux

感谢您的帮助!

设备树加载器似乎有点简单化,并假定文件名中 正好 16 个字符。如果设备树片段没有 16 个字符的名称,则在加载片段时可能会发生各种级别的填充或截断。

正确的做法是将上述片段重命名为:

TEST-DT-12345678-00A0.dtbo

(-00A0.dtbo前16个字符)

然后这将正确加载设备树加载程序修改名称。

此外,尝试加载具有以下路径的文件时要小心:

echo /lib/firmware/TEST-DT-12345678-00A0.dtbo > /sys/devices/bone_capemgr.*/slots

路径中的字符将计入 16 个字符的预期名称长度,导致设备树加载程序尝试加载片段:

TE-00A0.dtbo

如果您在尝试加载片段时遇到 'No such file or directory' 错误,请务必检查 dmesg!

请注意,Device Tree Overlays 现在已过时,Uboot 应该用于在启动时或 config-pin 命令进行配置。

查看此处部分:插槽文件去哪儿了? https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays

UART4 配置引脚脚本示例

#!/bin/sh
config-pin p9.11 uart
config-pin p9.13 uart
stty -F /dev/ttyO4 sane