Moving PRU App from Linux 3.8.x to new 4.1.x

564 views
Skip to first unread message

jalod...@gmail.com

unread,
Aug 11, 2015, 1:53:09 PM8/11/15
to BeagleBoard
I current have PRU code working on Linux 3.8.13-bone73, and now 
want to move to Linux 4.1.x

Having troubles - here is what I have done so far:

1. apt-get install linux-image-4.1.4-ti-r9
   (good, or should I use linux-image-4.1.4-bone15 ?)

2. Add dtb=am335x-boneblack-overlay.dtb to uEnv.txt


4. Rebuild my dt overlay:
   dtc -O dtb -o bbb-k-pru-00A0.dtbo -b 0 -@ bbb-k-pru.dts
   cp bbb-k-pru-00A0.dtbo /lib/firmware/

5. Loading the overlay with:
   echo "bbb-k-pru" > /sys/devices/platform/bone_capemgr/slots 

   Which produces this:
   [   43.410941] bone_capemgr bone_capemgr: part_number 'bbb-k-pru', version 'N/A'
   [   43.421476] bone_capemgr bone_capemgr: slot #4: override
   [   43.426969] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
   [   43.434081] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,bbb-k-pru'
   [   43.458733] gpio-of-helper ocp:gpio_helper: ready
   [   43.474759] bone_capemgr bone_capemgr: slot #4: dtbo 'bbb-k-pru-00A0.dtbo' loaded; overlay id #0
   [   43.543242] pruss_uio 4a300000.pruss: No children


Now Attempting to run my PRU app produces:
   "Failed to open the PRU-ICSS, have you loaded the overlay?"

But, lsmod shows uio_pruss loaded.

Any ideas about what is wrong?

(One thing I was wondering is if I need a new version of the libprussdrv
which I link with for the PRU app.  If so, how/where would I get this?)

Thanks.


BTW, For reference my bbb-k-pru.dts is below:

-----cut-----

// Device Tree Overlay for enabling PRU stuff

/dts-v1/;
/plugin/;

/ {
   compatible = "ti,beaglebone", "ti,beaglebone-black";

   part-number = "bbb-k-pru";
   version = "00A0";

   /* This overlay uses the following resources */
   exclusive-use =
         "P9.11", "P9.13", "P9.27", "P9.28", "P9.25", "P9.29", "P9.30", "pru0";

   fragment@0 {
      target = <&am33xx_pinmux>;
      __overlay__ {

         gpio_pins: pinmux_gpio_pins {         // The GPIO pins
            pinctrl-single,pins = <
               0x070 0x07  // P9_11 MODE7 | OUTPUT | GPIO pull-down
               0x074 0x27  // P9_13 MODE7 | INPUT  | GPIO pull-down
            >;
         };

         pru_pru_pins: pinmux_pru_pru_pins {   // The PRU pin modes
            pinctrl-single,pins = <
               0x1a4 0x05  // P9_27 pr1_pru0_pru_r31_5, MODE5 | OUTPUT | PRU
               0x19c 0x26  // P9_28 pr1_pru0_pru_r30_3, MODE6 | INPUT  | PRU
               0x1ac 0x26  // P9_25 pr1_pru0_pru_r30_7, MODE6 | INPUT  | PRU
               0x194 0x26  // P9_29 pr1_pru0_pru_r30_1, MODE6 | INPUT  | PRU
               0x198 0x26  // P9_30 pr1_pru0_pru_r30_2, MODE6 | INPUT  | PRU
            >;
         };
      };
   };

   fragment@1 {         // Enable the PRUSS
      target = <&pruss>;
      __overlay__ {
         status = "okay";
         pinctrl-names = "default";
         pinctrl-0 = <&pru_pru_pins>;
      };
   };

   fragment@2 {         // Enable the GPIOs
      target = <&ocp>;
      __overlay__ {
         gpio_helper {
            compatible = "gpio-of-helper";
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&gpio_pins>;
         };
      };
   };
};

-----cut-----

Robert Nelson

unread,
Aug 11, 2015, 1:57:39 PM8/11/15
to Beagle Board
On Tue, Aug 11, 2015 at 12:53 PM, <jalod...@gmail.com> wrote:
> I current have PRU code working on Linux 3.8.13-bone73, and now
> want to move to Linux 4.1.x
>
> Having troubles - here is what I have done so far:
>
> 1. apt-get install linux-image-4.1.4-ti-r9
> (good, or should I use linux-image-4.1.4-bone15 ?)

That's good, it'll be best to stick with the 4.1.x-ti branch..
yeah, libprussdrv will need to be rebuilt..

Regards,

--
Robert Nelson
https://rcn-ee.com/

jalod...@gmail.com

unread,
Aug 11, 2015, 4:10:51 PM8/11/15
to BeagleBoard
Thanks Robert.


I grabbed the am335x_pru_package here:

Rebuilt it, and installed the various parts, then rebuilt my PRU code.  

Still have the SAME basic problem: prussdrv_open() fails.

if (prussdrv_open(PRU_EVTOUT_0) != 0)
{
    fprintf(stderr, "Failed to open the PRU-ICSS, have you loaded the overlay?\n");
    exit(1);
}
 
I noticed when I load the overlay I get "pruss_uio 4a300000.pruss: No children".
I do not recall seeing this message under 3.8.x

BTW: linux-image-4.1.4-ti-r9 had 1 spontaneous reboot for me in about 3hrs of uptime
today so far.  Is that still to be expected, or supposed to be fixed?

William Hermans

unread,
Aug 11, 2015, 4:32:07 PM8/11/15
to beagl...@googlegroups.com
double check output of dtc -v - Must be that which is listed on the github for overlays. I made the mistake of using an older dtc myself last week, and it will just silently fail - e.g. no warning if the device tree compiler version is the wrong one.

--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Robert Nelson

unread,
Aug 11, 2015, 4:35:20 PM8/11/15
to Beagle Board
it 'should' be better, but TI's looking at it now..

jalod...@gmail.com

unread,
Aug 11, 2015, 6:35:50 PM8/11/15
to BeagleBoard

Hi William,

The notes from "https://github.com/beagleboard/bb.org-overlays" show Version: DTC 1.4.1-g2341721b
I used this as the basis for a build today and it gave me Version: DTC 1.4.1-ga2b02dea

Is this wrong or are the notes just out of sync?

Also, is it reasonable for me to expect my overlay that worked on 3.8.x to also work on 4.1.x
without modification?

Thanks.

William Hermans

unread,
Aug 11, 2015, 7:06:58 PM8/11/15
to beagl...@googlegroups.com
Hi William,

The notes from "https://github.com/beagleboard/bb.org-overlays" show Version: DTC 1.4.1-g2341721b
I used this as the basis for a build today and it gave me Version: DTC 1.4.1-ga2b02dea

Is this wrong or are the notes just out of sync?


I think that so long as the dtc version is 1.4.1* it's good enough. But the older dtc would be *I think * 1.4.0* Which is what I had a problem with. What I have now is . .
william@xanbustester:~$ dtc -v
Version: DTC 1.4.1-g8b4fb3be

Which seems to be neither what the github instructions say, or what you have. In either case it worked for the canbus dtb I needed. Technically the older dtc version worked too, but produced a device tree blob file that capemgr for kernel 4.1.x did not understand I guess. e.g. it saw the device, and the file, but would not load the device tree blob.

So, the github instructions are probably just a bit outdated - But still reasonably accurate.


Also, is it reasonable for me to expect my overlay that worked on 3.8.x to also work on 4.1.x
without modification?

Not unreasonable at all I think. It's exactly what I did for the logic supply canbus cape we use. However the device tree source file could need "adjustment" I suppose - I have no hands on with the PRU stuff yet. So I could not instruct you one way or another, unfortunately.

Robert, or Charles would definitely know more than I in the case of PRU's for sure.

jalod...@gmail.com

unread,
Aug 11, 2015, 7:33:15 PM8/11/15
to BeagleBoard

Just switched to this:


It gave me Version: DTC 1.4.1-g4b066e20 and updated the kernel to 4.1.5-bone15

Unfortunately this did not solve my PRU app problem.


Robert Nelson

unread,
Aug 11, 2015, 7:48:38 PM8/11/15
to Beagle Board

Use the beagleboard repo, mine was just for development and its behind..

As long as it says 1.4.1-xxxx your fine.

The pru's just need some software help, I've never used them personally (yet)..

William Hermans

unread,
Aug 18, 2015, 11:19:51 PM8/18/15
to beagl...@googlegroups.com
The pru's just need some software help, I've never used them personally (yet)..

makes two of us.

Rick M

unread,
Sep 20, 2015, 7:05:01 AM9/20/15
to BeagleBoard


On Tuesday, August 11, 2015 at 4:48:38 PM UTC-7, RobertCNelson wrote:

Use the beagleboard repo, mine was just for development and its behind..

As long as it says 1.4.1-xxxx your fine.


Hmm. I just got to where I had to build a newer dtc, so I got the sources from devicetree.org (in the kernel repo), and built, and got

$ dtc --version

Version: DTC 1.4.1-g554fde2c

But, my dtc doesn't like -@:

rmann@rlmubuntu:~/dtb-rebuilder$ make

  DTC     src/arm/am57xx-beagle-x15.dtb

/usr/local/bin/dtc: invalid option -- '@'


 

Rick Mann

unread,
Sep 20, 2015, 7:08:26 AM9/20/15
to beagl...@googlegroups.com
Ah, I found these instructions on how to patch dtc:

http://www.embedded-things.com/bbb/patching-the-device-tree-compiler-for-ubuntu/
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.


--
Rick Mann
rm...@latencyzero.com


Robert Nelson

unread,
Sep 20, 2015, 11:07:32 AM9/20/15
to Beagle Board

Then use the overlay dtc script and build dtc..

--

Rick Mann

unread,
Sep 21, 2015, 1:42:59 AM9/21/15
to beagl...@googlegroups.com
Ah yeah, that helped. I found older instructions to build it with -@, but didn't realize it was building an out-of-date version. I seem to be having problems on my 14.04 Ubuntu in that it fails to apt-get update on armhf stuff, but I just commented that part out of your script and it built fine. Thanks.
--
Rick Mann
rm...@latencyzero.com


Reply all
Reply to author
Forward
0 new messages