c - Beaglebone Black 启用 PRU 问题

标签 c linux debian real-time beagleboneblack

我花了整整 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 的示例代码。这是我在编程方面做得更好之前的事,所以有点粗糙。

Beaglebone PRU ESC Controller

以下是我在研究时发现的一些有用链接,以防我的链接失效:

这是我用来设置它们的脚本:

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/

相关文章:

Python解析未知类型的缩进C文件

linux - 如何限制一组docker容器的内存资源?

linux - Oracle Linux 上的 NodeJS 安装错误

c - 编写 linux 守护进程

c - 莫尔斯电码(数组方法)代码C语言

linux - 使用 getchar() 在原始模式下捕获 Ctrl-Enter?

python - 在启动时启动 couchpotato.py,无需保持 ssh session 打开。 ReadyNAS (Debian 7)

PHP 显示为文本

mysql - Raspbian - 尝试安装 mysql-server 时出现 dpkg 错误

c - 为什么当我在 fork() 之前使用 dup2() 时它不起作用?