NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.
PRU Linux Application Loader
Contents
General Overview[edit]
The PRU application loader for Linux is a software tool which can be used to load a binary to PRU’s memory area and to manage the code executed in the PRU from the user space. The software stack consists of two main sections: the user space driver and low level kernel driver. For the convenience of the user, the PRUSSDRV user space library talks to the low level kernel driver (uio_pru), which is responsible for the device setup and the primary interrupt handling. The PRUSSDRV library contains options to start and stop PRU, map PRU, L3, and external memories, and manage PRU-generated interrupts. The software architecture of the Linux-based loader is illustrated in Figure 1.
Installing the Kernel Driver[edit]
Before Getting Started[edit]
- 1. Install the PSP by following the Getting Started Guide for OMAP-L1.
NOTE
The PSP release 03.20.00.12 version is required for the PRU application loader.
- 2. Checkout the PRU_SW Project containing the loader and example code.
- host$ svn export https://gforge.ti.com/svn/pru_sw -r 24
or try also
- host$ svn checkout --username anonymous https://gforge.ti.com/svn/pru_sw -r 24
when it asks for a password, just hit enter.
Preparing the Kernel[edit]
- 1. If U-Boot is not built yet, build U-Boot first. Building Linux Kernel requires mkimage utility, which gets built along with U-Boot. Refer to Rebuilding U-Boot for steps to build U-Boot. Once built, mkimage will be present under the tools folder of U-Boot source (/home/<user>/OMAP_L138_arm_x_xx_xx_xx/DaVinci-PSP-SDK-xx.xx.xx.xx/src/u-boot/uboot-xx.xx.xx.xx/tools). Ensure that this path is added to the $PATH variable by adding the following
- host$ export PATH=home/<user>/OMAP_L138_arm_x_xx_xx_xx/DaVinci-PSP-SDK-xx.xx.xx.xx/src/u-boot/uboot-xx.xx.xx.xx/tools:$PATH
- to the ~/.bashrc file. You can then source the ~/.bashrc file with the following command
- host$ source ~/.bashrc
- 2. Apply the uio_pruss.patch to the kernel.
- host$ cd the ../../linux-03.20.00.12 directory
- Example path to this directory: /home/<user>/OMAP_L138_arm_x_xx_xx_xx/DaVinci-PSP-SDK-03.20.00.12/src/kernel/linux-03.20.00.12
- host$ patch -p1 < /home/<user>/pru_sw/trunk/kernel_loader/uio/patch/uio_pruss.patch
- host$ cd the ../../linux-03.20.00.12 directory
Rebuilding the Kernel[edit]
- 1. Preparing your environment
- If you have not already done so, install the CodeSourcery tools on your Linux host. For additional documentation on installing the CodeSourcery tools, please visit the CodeSourcery website http://www.codesourcery.com/sgpp/lite/arm/portal/release1039
- The steps below assume that the CodeSourcery tools are already present in your $PATH variable. Information on how to add the tools to your $PATH can be obtained form the Getting Started Guide for the CodeSourcery tools.
- 2. Configuring the kernel.
- host$ make distclean ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
- host$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- da850_omapl138_defconfig
- 3. (Optional) To build module into the kernel, run a menuconfig.
NOTE
The patch by default installs the driver as a module.
- host$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
- Within the configuration menu, ensure that UIO support is enabled and that Texas Instruments PRUSS driver is also selected by the following:
- 1. From the Linux Kernel Configuration menu, select Device Drivers.
- 2. In the Device Driver menu, scroll down to Userspace I/O drivers. Press ‘Y’ to enable and then select.
- 3. In the Userspace I/O drivers, scroll down to Texas Instruments PRUSS driver. Press ‘Y’ to include.
- 4. Exit and save configuration.
- 4. Building uImage.
NOTE
U-boot must be first built and path added to the $PATH variable before making uImage. Refer to Preparing the Kernel for these steps.
- host$ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
- 5. Building modules.
NOTE
Verify tool chain is included in path.
- host$ make modules ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
- host$ sudo make modules_install INSTALL_MOD_PATH=<root fs path> ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
- where the <root fs path> is the path of your target root file system on the host machine (/home/<user>/workdir/filesys for example).
Installing the PRUSSDRV User Space Library[edit]
The user space library is provided by pru_sw/trunk/app_loader/interface/prussdrv.c.
- 1. Compile prussdrv.c
- $host cd pru_sw/trunk/app_loader/interface
- $host make clean
- $host make
- 2. Compile application code using PRUSSDRV APIs.
- 3. Download executable file and PRU binaries to your file system.
Running applications[edit]
- 1. Boot the device.
- 2. If kernel driver is configured as a module (default), initialize driver with following command:
- EVM # modprobe uio_pru
- If kernel driver is built-in, the driver should be already loaded.
- 3. Verify driver is installed by checking if the following is visible in the file system:
- EVM # cat /sys/class/uio/uio0/maps/map0/addr
- 4. Execute application
- EVM # cd <path to application>
- EVM # ./<application name>