Beaglebone Black启用PRU问题

时间:2016-11-08 12:08:42

标签: c linux debian real-time beagleboneblack

我已经花了12个小时试图让the beaglebone上的PRU工作。到目前为止,我似乎完全停留在使设备覆盖工作以及启用remoteproc。我试图将我在互联网上找到的所有信息拼凑在一起,但它已经过时或者非常分散。我似乎无法找到一个当前的工作示例,或者如前所述,我按下了一堵墙。

设置/环境

我已经更新了beaglebone上的内核,然后是多个“更新”,“升级”和“dist-upgrades”。据我所知,我正在使用最新版本的所有内容。

  • Beaglebone Black
  • 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日)

我没有忘记这个问题。我最终通过另一个论坛的帮助以不同的方式解决问题。当我有时间的时候,我会写出我的详细解决方案,这样任何有相同问题的人都可以解决它。

1 个答案:

答案 0 :(得分:0)

不幸的是,我对细节的了解不多,因为在所有信息新鲜时,我没有将这个答案发布回去。这是我几年前建立的存储库,其中包括用于启动和停止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

我希望所有这些都对您有所帮助。如果我能找到有关解决此问题的手写笔记,则将其张贴。