Using Beaglebone Black PRU with prussdrv on 4.1.x kernels

It took me a while to figure it out, so here some quick notes if you want to upgrade from Debian wheezy with 3.8.x kernels to the Debian jessie image for the Beaglebone Black, which comes with a 4.1-series kernel:

  1. Make sure to use the prussdrv enabled kernel instead of the default TI kernel, which uses PRU remoteproc infrastructure:
    aptitude install linux-headers-4.1.18-bone-rt-r19
    (or whatever’s newest, otherwise install below might complain about missing headers)
    cd /opt/scripts/tools
    git pull
    ./update_kernel.sh --lts-4_1 --bone-rt-channel

  2. It’s also solid advice to follow the instructions from https://github.com/beagleboard/bb.org-overlays/blob/master/readme.md. Put your .dts file into src/arm/ and ./install.sh will do things automagically

  3. The important part: After booting your newly installed kernel, and even having recompiled your 3.8 dts file with the updated dtc tool from step 2, you might encounter this friendly message in dmesg after trying to load it:
    pruss_uio 4a300000.pruss: No children
    And trying to go ahead anyway, any call to prussdrv_open() will return -1. Take inspiration from: https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/BB-BONE-REPLICAP-00B1.dts and simply add the pins from your pinmux section again to the pruss fragment (whereas before you could get away with just having them in the pinmux fragment). It should work now!
This entry was posted in development, tinkering. Bookmark the permalink.