Week 2 Progress

A project log for PRUSS support for newer kernels

A communication framework between ARM and PRUSS on BeagleBone Black

Shubhangi GuptaShubhangi Gupta 06/10/2015 at 12:060 Comments


1. Exposed appropriate sysfs attributes for data length,offset,memory type and data buffer to userspace.
2. prussdrv like functions for reading and writing to DRAM0, DRAM1 and SHR-RAM work now, allowing
a maximum of 4kB data to be written in one call.
3. Tested writing 2D integer arrays to PRU mem and subsequent read. Example code on github.
4. Dynamically boot/shutdown PRU from userspace at any time using driver-device bind/unbind function.
Allows for rmmod pruss_remoteproc without --force option.
5. Able to provide custom sysevt->channel and channel->host mapping to 3.14 pruss_remoteproc driver

Issued faced:
1. Abandon python for userspace library. Realized python is not feasible for writing code which interacts with hardware which has extremely limited space.

In python, mostly everything is an object. Even an integer is an object which pushes its size to 12 bytes ie 8bytes of unnecessary infomation. With a PAGE_SIZE of 4096 bytes which to be the size of a sysfs file, we cannot afford python. Yes, there would be workarounds using this language itself, but when time on the platter is less, C saves the day.

3. Had to decide whether to send data via sysfs or send down userspace pointer (to data buffer) to driver. Reading from sources advised against sending userspace pointers down to kernel. Hence former was chosen.

For more info as to why sending pointers is a bad idea read this:

4. A persistent segmentation fault which took significant time to debug. Was due to dereferencing a null pointer.

5. Writing to sysfs was triggering both show/store functions. Issue resolved through mentor discussion. [ use open( ),write ( ) etc
instead of fopen ( ) fwrite ( ). ]

Next Week:
1. Allow INTC mapping and configuration from userspace.
2. Ability to dynamically allocate larger circular buffers in DDR mem.
3. Extend userspace library to allow DDR read/write.

Code on github