Linux 设备树覆盖命名

Linux 设备树覆盖命名,linux,embedded,beagleboneblack,device-tree,Linux,Embedded,Beagleboneblack,Device Tree,当我试图在Beaglebone black上加载设备树覆盖时,我发现了一个奇怪的问题。加载程序无法加载.dtbo文件,因为它正在查找一个名称与它被告知加载的名称不同的文件。使用以下命令在同一设备上编译.dts文件: dtc-O dtb-O TEST-DT-00A0.dtbo-b 0-@TEST-DT-00A0.dts 编译已完成,没有错误,但当我尝试使用以下命令加载二进制文件时: 回波测试-DT-00A0.dtbo>/sys/devices/bone_capemgr.9/slots 我看到了错误

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

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

编译已完成,没有错误,但当我尝试使用以下命令加载二进制文件时:

回波测试-DT-00A0.dtbo>/sys/devices/bone_capemgr.9/slots

我看到了错误:

-bash:echo:write错误:没有这样的文件或目录

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

试验-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


如果在尝试加载片段时遇到“无此类文件或目录”错误,请确保检查dmesg

请注意,设备树覆盖现在已经过时,应该使用Uboot在boot或config pin命令时进行配置

检查这里部分:插槽文件到哪里去了?

UART4配置pin脚本示例

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