为 Beaglebone Black Kernel 4.4.17 加载设备树覆盖并加载 PRU .bin
Load device tree overlay for Beaglebone Black Kernel 4.4.17 and load PRU .bin
我在 BBB 上加载设备树覆盖时遇到问题。我是 运行 Debian Linux 8 (jessie),内核 4.4.17-bone13
OS 没有安装 cape 管理器所以我从这里得到它...
https://github.com/beagleboard/bb.org-overlays
我按照说明进行了设置,一切似乎都很顺利。现在我尝试加载我的设备树覆盖...
root@beaglebone:~# cd /lib/firmware
root@beaglebone:/lib/firmware# dtc -O dtb -I dts -o /lib/firmware/PRU-GPIO-EXAMP LE-00A0.dtbo -b 0 -@ PRU-GPIO-EXAMPLE-00A0.dts
root@beaglebone:/lib/firmware# cat /sys/devices/platform/bone_capemgr/slots
0: PF---- -1
1: PF---- -1
2: PF---- -1
3: PF---- -1
root@beaglebone:/lib/firmware# sudo sh -c "echo 'PRU-GPIO-EXAMPLE-00A0' > /sys/devices/platform/bone_capemgr/slots"
root@beaglebone:/lib/firmware# 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,PRU-GPIO-EXAMPLE
到目前为止看起来不错,现在我尝试加载我的 PRU 程序...
root@beaglebone:/usr# cd /usr/local/test
root@beaglebone:/usr/local/test# ls
Makefile libprussdrv.a pasm pruss_intc_mapping.h prussdrv.h testPRU testPRU.c testPRU_Off.bin testPRU_Off.p testPRU_On.bin testPRU_On.p
root@beaglebone:/usr/local/test# ./testPRU testPRU_On.bin
prussdrv_open() failed
我几乎让一切正常,但我收到 prussdrv_open() 失败错误,不知道为什么。一切的代码都在这里......
http://credentiality2.blogspot.com/2015/09/beaglebone-pru-gpio-example.html
// If this segfaults, make sure you're executing as root.
prussdrv_init();
if (prussdrv_open(PRU_EVTOUT_0) == -1) {
printf("prussdrv_open() failed\n");
return 1;
}
如果我不得不猜测我一直遵循的示例已经过时并且发生了一些变化。我已经知道加载树覆盖的方式已经改变。也许 .dts 文件格式已更改,或者我必须在现在调用 prussdrv_open() 之前再次调用 prussdrv 库。让我知道您认为可能导致此问题的原因。
我的解决方案是回到旧版本,我尝试了 4.1 仍然有问题。所以我回到了 3.8,其中所有内容都预装在 OS 上。现在一切正常!
对于登陆此处的任何人:如果使用内核 >=4.1,请不要尝试使用插槽文件动态加载设备树。不管怎样,它一定会给你带来悲伤。您应该使用 u-boot 叠加层,即在启动时加载叠加层。
我在 BBB 上加载设备树覆盖时遇到问题。我是 运行 Debian Linux 8 (jessie),内核 4.4.17-bone13
OS 没有安装 cape 管理器所以我从这里得到它... https://github.com/beagleboard/bb.org-overlays
我按照说明进行了设置,一切似乎都很顺利。现在我尝试加载我的设备树覆盖...
root@beaglebone:~# cd /lib/firmware
root@beaglebone:/lib/firmware# dtc -O dtb -I dts -o /lib/firmware/PRU-GPIO-EXAMP LE-00A0.dtbo -b 0 -@ PRU-GPIO-EXAMPLE-00A0.dts
root@beaglebone:/lib/firmware# cat /sys/devices/platform/bone_capemgr/slots
0: PF---- -1
1: PF---- -1
2: PF---- -1
3: PF---- -1
root@beaglebone:/lib/firmware# sudo sh -c "echo 'PRU-GPIO-EXAMPLE-00A0' > /sys/devices/platform/bone_capemgr/slots"
root@beaglebone:/lib/firmware# 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,PRU-GPIO-EXAMPLE
到目前为止看起来不错,现在我尝试加载我的 PRU 程序...
root@beaglebone:/usr# cd /usr/local/test
root@beaglebone:/usr/local/test# ls
Makefile libprussdrv.a pasm pruss_intc_mapping.h prussdrv.h testPRU testPRU.c testPRU_Off.bin testPRU_Off.p testPRU_On.bin testPRU_On.p
root@beaglebone:/usr/local/test# ./testPRU testPRU_On.bin
prussdrv_open() failed
我几乎让一切正常,但我收到 prussdrv_open() 失败错误,不知道为什么。一切的代码都在这里...... http://credentiality2.blogspot.com/2015/09/beaglebone-pru-gpio-example.html
// If this segfaults, make sure you're executing as root.
prussdrv_init();
if (prussdrv_open(PRU_EVTOUT_0) == -1) {
printf("prussdrv_open() failed\n");
return 1;
}
如果我不得不猜测我一直遵循的示例已经过时并且发生了一些变化。我已经知道加载树覆盖的方式已经改变。也许 .dts 文件格式已更改,或者我必须在现在调用 prussdrv_open() 之前再次调用 prussdrv 库。让我知道您认为可能导致此问题的原因。
我的解决方案是回到旧版本,我尝试了 4.1 仍然有问题。所以我回到了 3.8,其中所有内容都预装在 OS 上。现在一切正常!
对于登陆此处的任何人:如果使用内核 >=4.1,请不要尝试使用插槽文件动态加载设备树。不管怎样,它一定会给你带来悲伤。您应该使用 u-boot 叠加层,即在启动时加载叠加层。