您好!
尝试在 BeagleBone Black 上启动用于 PRU 的 Remoteproc 时遇到问题。 我可以使用它、但只能使用 debian (4.4.8.88-ti-r125)、我需要使用自己的 Yocto Build (PROCESSOR-SDK-Linux-04.02.00提交: a75d8e93056181d512f6c818e8627bd4554aaf92)设置它。
debian 上的器件树(工作示例)是使用 capemanager 创建的、因此在启动后、我使用 DTC 从目录中使用"-in -format FS"选项反编译器件树以获得最终形式。
设备树:
此节点位于/OCP 中:
普劳斯@4a300000{
REG =<0x4a300000 0x2000 0x4a302000 0x2000 0x4a310000 0x3000 0x4a326000 0x2000 0x4a32e000 0x31c 0x4a332000 0x58>;
reg-names ="dram0"、"dram1"、"shrdram2"、"cfg"、"IEP"、 "MII_RT";
兼容="ti、am3352-pruss";
范围;
状态="正常";
#address-cells =<0x1>;
ti、hwmods ="pruss";
相位=<0x23d>;
大小单元格=<0x1>;
linux、phandle =<0x23d>;
MDIO@4a332400{
REG =<0x4a332400 0x90>;
兼容="ti、davinci_mdio";
时钟名称="Fck";
时钟=<0x12>;
STATUS ="禁用";
#address-cells =<0x1>;
bus_freq =<0xf4240>;
phandle =<0xd5>;
大小单元格=<0x0>;
linux、phandle =<0xd5>;
};
INTC@4a320000{
reg =<0x4a320000 0x2000>;
中断=<0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1b>;
reg-names ="intc";
兼容="ti、am3352-pruss-intc";
interrupt-names ="host2"、"host3"、"host4"、"host5"、"host6"、 "host7"、"host8"、"host9";
#interrupt-cells =<0x1>;
相位=<0xD1>;
中断控制器;
Linux、phandle =<0xD1>;
};
pru0@4a334000{
REG =<0x4a334000 0x2000 0x4a322000 0x400 0x4a322400 0x100>;
中断=<0x10 0x11>;
reg-names ="IRAM"、"control"、"debug";
兼容="ti、am3352-PRU";
中断名称="vring (振铃)"、"kick (启动)";
phandle =<0xd3>;
linux、phandle =<0xd3>;
中断父级=<0xD1>;
};
pru1@4a338000{
REG =<0x4a338000 0x2000 0x4a324000 0x400 0x4a324400 0x100>;
中断=<0x12 0x13>;
reg-names ="IRAM"、"control"、"debug";
兼容="ti、am3352-PRU";
中断名称="vring (振铃)"、"kick (启动)";
phandle =<0xd4>;
linux、phandle =<0xd4>;
中断父级=<0xD1>;
};
};
另一方面、我从编译中获取的器件树如下所示(解编译的 DTB 文件):
pruss_SoC_bus@4a326000{
兼容="ti、am3356-pruss-so-bus";
REG =<0x4a326000 0x2000>;
ti、hwmods ="pruss";
#address-cells =<0x1>;
大小单元格=<0x1>;
范围;
状态="正常";
普劳斯@4a300000{
兼容="ti、am3356-pruss";
REG =<0x4a300000 0x2000 0x4a302000 0x2000 0x4a310000 0x3000 0x4a326000 0x2000 0x4a32e000 0x31c 0x4a332000 0x58>;
reg-names ="dram0"、"dram1"、"shrdram2"、"cfg"、"IEP"、 "MII_RT";
#address-cells =<0x1>;
大小单元格=<0x1>;
范围;
状态="正常";
pinctrl-names ="default";
pinctrl-0 =<0x4f>;
ti、hwmods ="pruss";
INTC@4a320000{
兼容="ti、am3356-pruss-intc";
reg =<0x4a320000 0x2000>;
reg-names ="intc";
中断=<0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1b>;
interrupt-names ="host2"、"host3"、"host4"、"host5"、"host6"、 "host7"、"host8"、"host9";
中断控制器;
#interrupt-cells =<0x1>;
linux、phandle =<0x50>;
相位=<0x50>;
};
PRU@4a334000{
兼容="ti、am3356-PRU";
REG =<0x4a334000 0x2000 0x4a322000 0x400 0x4a322400 0x100>;
reg-names ="IRAM"、"control"、"debug";
标签="pru0";
中断父级=<0x50>;
中断=<0x10 0x11>;
中断名称="vring (振铃)"、"kick (启动)";
状态="正常";
};
PRU@4a338000{
兼容="ti、am3356-PRU";
REG =<0x4a338000 0x2000 0x4a324000 0x400 0x4a324400 0x100>;
reg-names ="IRAM"、"control"、"debug";
标签="pru1";
中断父级=<0x50>;
中断=<0x12 0x13>;
中断名称="vring (振铃)"、"kick (启动)";
状态="正常";
};
MDIO@4a332400{
兼容="ti、davinci_mdio";
REG =<0x4a332400 0x90>;
时钟=<0x13>;
时钟名称="Fck";
bus_freq =<0xf4240>;
#address-cells =<0x1>;
大小单元格=<0x0>;
STATUS ="禁用";
};
};
};
行为方式:
当我在 debian 上加载 PRU-rproc 内核模块时、器件将在/sys/class/remoteproc 中创建、dmesg 中会显示相应的消息、并且还有另外两个模块(pruss 和 pruss-intc)。 在 lsmod 输出中、PRU_rproc 由2使用。
另一方面、在我加载此模块时、构建的 ma Yocto 唯一在 debian 上类似的是加载的两个模块- dmesg 和/sys/class/remoteproc.中都没有任何内容 在中、"used for"为 PRU_rproc 显示0。
我的问题是:
1) 1)在我的版本中添加了"pruss_SoC_bus@4a326000"-我知道这只是较新内核版本随附的内容吗?
2) 2)我怀疑丢失了 phandle (和 linux、phandle)可能是问题所在。 我如何才能找出未创建它们的原因?
3) 3)我只为 pinmux 定义了一个引脚-这是否会导致问题?
此致、
Marek Slomiany