我尝试在Beaglebone黑色上加载设备树覆盖时遇到了一个奇怪的问题。加载程序无法加载.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/slots
我看到了错误:
-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 Tue Oct 13 20:44:55 UTC 2015 armv7l GNU / Linux
感谢您的帮助!
答案 0 :(得分:0)
设备树加载器看起来有点简单,并假设文件名名称中的正好 16个字符。如果设备树片段没有16个字符的名称,则在加载片段时可能会出现各种级别的填充或截断。
然后正确的事情就是将上面的片段重命名为:
TEST-DT-12345678-00A0.dtbo
(-00A0.dtbo之前的16个字符)
然后,这将正确加载设备树加载器重命名。
另外,要小心尝试使用路径加载文件:
echo /lib/firmware/TEST-DT-12345678-00A0.dtbo> / SYS /装置/ bone_capemgr。* /槽
路径中的字符将计入16个字符的预期名称长度,导致设备树加载程序尝试加载片段:
TE-00A0.dtbo
如果您在尝试加载片段时遇到“没有此类文件或目录”错误,请务必检查dmesg!
答案 1 :(得分:0)
请注意,Device Tree Overlays 现在已过时,应该使用 Uboot 在启动时进行配置或使用 config-pin 命令。
查看这里部分:slots 文件去哪儿了? https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays
UART4 config-pin 脚本示例
#!/bin/sh
config-pin p9.11 uart
config-pin p9.13 uart
stty -F /dev/ttyO4 sane