我花了整整 12 个小时试图让 beaglebone 上的 PRU 正常工作。到目前为止,我似乎完全停留在让设备覆盖工作以及启用 remoteproc 上。我试图拼凑我在互联网上找到的所有信息,但这些信息要么已过时,要么极其零散。我似乎找不到当前可用的示例,或者我在按照之前所说的进行操作时遇到了困难。
设置/环境
我已经更新了 beaglebone 上的内核,然后是多个“更新”、“升级”和“dist-upgrades”。据我所知,我使用的是最新版本的所有内容。
- 比格骨黑
- Debian 8.6
- 内核 4.4.30-ti-r64
- dtc 1.4.1
示例代码
设备覆盖文件[PRU-GPIO-BLINK.dts]:
// Setup file for basic PRU GPIO Blinking LED
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
part-number = "PRU-GPIO-BLINK";
version = "00A0";
// This overlay uses the following resources
exclusive-use = "P8.11";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
gpio_pins: pinmux_gpio_pins {
pinctrl-single,pins = <
0x034 0x06
>;
};
};
};
fragment@1 {
target = <&pruss>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&gpio_pins>;
};
};
};
以上代码编译使用:
root@beaglebone:/lib/firmware# dtc -I dts -O dtb -o/lib/firmware/PRU-GPIO-BLINK-00A0.dtbo/lib/firmware/PRU-GPIO-BLINK.dts
当我使用以下方法将其添加到 bone_capemgr 时:
root@beaglebone:/lib/firmware# echo "PRU-GPIO-BLINK">/sys/devices/platform/bone_capemgr/slots
我最终得到了 File or directory cannot be found
错误或 File Exists
错误。我已经像许多人推荐的那样在 uEnvt.txt 中禁用了 HDMI,但仍然没有成功。
除此之外,我尝试按照此处的练习进行操作:http://elinux.org/EBC_Exercise_30_PRU_via_remoteproc_and_RPMsg
我完成了大部分练习,直到我点击启用 remoteproc 部分。当我转到“取消注释”#include "am33xx-pruss-rproc.dtsi"
时,我似乎无法在文件中的任何地方找到它。当我简单地将行添加到文件并尝试调用 make
时,编译器提示找不到文件并导致构建失败。
如果有人好奇这里是我运行 cat/sys/devices/platform/bone_capemgr/slots
时的输出
0: PF---- -1
1: PF---- -1
2: PF---- -1
3: PF---- -1
4: P-O-L- 0 Override Board Name,00A0,Override Manuf,univ-emmc
问题
对于为什么我的设备覆盖无法正常工作并且我无法在 elinux 上进行练习,有人有什么建议吗?我几乎被困在这一点上,大多数在线示例都引用了过时的路径或方法。有没有我缺少的包裹?从我读到的内容来看,似乎所有的编译器和加载器现在都内置到新的 beaglebone 发行版中。如果有人需要澄清或我忘记提及某些内容,我会很乐意提供。
更新(2016 年 11 月 11 日):
就像快速更新一样。我在另一个论坛上收到了关于我无法遵循上面提到的 elinux 示例的回复。事实证明,我所要做的就是使用 git pull
更新我的存储库,然后出现了我要查找的行。这解决了我关于 remote_proc 的问题,但它仍然没有解决我无法启用设备覆盖树的主要问题。
更新(2017 年 3 月 22 日)
我没有忘记这个问题。在另一个论坛的帮助下,我最终以不同的方式自己解决了这个问题。当我有时间时,我会写下我的详细解决方案,以便有相同问题的任何人都可以解决它。
最佳答案
不幸的是,我没有太多详细信息,因为在所有信息都是最新的时候我没能发回这个答案。这是我多年前建立的 repo 协议(protocol),其中包括用于启动和停止 PRU 的脚本以及设置设备树的内容以及一些用于从 PRU 驱动 ESC 的示例代码。这是我在编程方面做得更好之前的事,所以有点粗糙。
以下是我在研究时发现的一些有用链接,以防我的链接失效:
有关 PRU 的官方 elinux 页面链接:http://elinux.org/EBC_Exercise_30_PRU_via_remoteproc_and_RPMsg
指向 TI PRU 支持包的链接:https://git.ti.com/pru-software-support-package
- 链接到详细说明他的 PRU 设置和使用的其他论坛发帖人项目:https://github.com/Greg-R/pruadc1
- 有关他的设置和项目详细信息的完整详细信息,请参阅以下文档:https://github.com/Greg-R/pruadc1/blob/master/doc/PRUADC1latex/PRUADC1.pdf
这是我用来设置它们的脚本:
export SLOTS=/sys/devices/platform/bone_capemgr
config-pin P9_28 pruout
config-pin P9_29 pruout
config-pin P9_30 pruout
config-pin P9_31 pruout
下面是我在 bash 脚本中用来启动 PRU 的命令
#!/bin/bash
echo "4a334000.pru0" > /sys/bus/platform/drivers/pru-rproc/bind
echo "4a338000.pru1" > /sys/bus/platform/drivers/pru-rproc/bind
这是我将如何阻止他们
#!/bin/bash
echo "4a334000.pru0" > /sys/bus/platform/drivers/pru-rproc/unbind
echo "4a338000.pru1" > /sys/bus/platform/drivers/pru-rproc/unbind
我希望所有这些都能在某种程度上有所帮助。如果我能找到关于解决此问题的手写笔记,我会发布它们。
关于c - Beaglebone Black 启用 PRU 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486573/