Difference between revisions of "BeagleBoard/DSP Howto"

From eLinux.org
Jump to: navigation, search
(update kernel section)
(DSS2 patch)
Line 23: Line 23:
  
 
  wget http://gitorious.org/vjaquez-beagleboard/marmita/blobs/raw/master/meta-marmita/linux/linux-omap-bridgedriver/defconfig -O .config
 
  wget http://gitorious.org/vjaquez-beagleboard/marmita/blobs/raw/master/meta-marmita/linux/linux-omap-bridgedriver/defconfig -O .config
make oldconfig
 
make
 
  
 
If you want DSS2 support for the Beagleboard, you should apply this patch in your kernel code: https://patchwork.kernel.org/patch/94049/
 
If you want DSS2 support for the Beagleboard, you should apply this patch in your kernel code: https://patchwork.kernel.org/patch/94049/
 +
 +
wget -q https://patchwork.kernel.org/patch/94049/mbox/ -O - | git am --3way
  
 
Then build the '''uImage''' as usual and install the modules on your rootfs:
 
Then build the '''uImage''' as usual and install the modules on your rootfs:
  
 +
make oldconfig
 +
make
 +
make uImage
 
  make INSTALL_MOD_PATH=/media/rootfs modules_install
 
  make INSTALL_MOD_PATH=/media/rootfs modules_install
  

Revision as of 18:13, 16 May 2010


This article explains how to use the DSP in OMAP3 at BeagleBoard using the bridgedriver kernel module. For DSP tool chain see C64x+ DSP.

Setup

Kernel driver

In order to use the DSP you would need TI's bridgedriver module on the kernel. You can use the linux-omap repository's branch at kernel.org:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
cd linux-omap-2.6
git checkout -b dspbridge orgin/dspbridge

This module currently is under heavy development. If you want be updated you should pull for changes weekly or so.

The default configuration for the beagle board doesn't enable de bridgedriver. You should build you own using

 make menuconfig

or fetching the one used in marmita:

wget http://gitorious.org/vjaquez-beagleboard/marmita/blobs/raw/master/meta-marmita/linux/linux-omap-bridgedriver/defconfig -O .config

If you want DSS2 support for the Beagleboard, you should apply this patch in your kernel code: https://patchwork.kernel.org/patch/94049/

wget -q https://patchwork.kernel.org/patch/94049/mbox/ -O - | git am --3way

Then build the uImage as usual and install the modules on your rootfs:

make oldconfig
make
make uImage
make INSTALL_MOD_PATH=/media/rootfs modules_install

TI binaries

In order to get the DSP binaries for multimedia processing you need to download TI's OpenMAX IL package. Once you have extracted the tarball you'll have to run the installer TI-OMX-Sample-Firmware-0.3-Linux-x86-Install and accept the license agreement.

You would end up with a bunch of binaries in lib/dsp, copy them to your root filesystem at the same location (/lib/dsp).

ping test

If you want to test the DSP you can try the simple ping test provided in this package.

Just:

./ping.out

If you get an error like:

DSPNode_Allocate failed: 0x80008008

Then it's possible that the ping DSP socket node is not loaded. If you use 'baseimage.dof' you need to load it dynamically:

./dynreg.out -r pingdyn_3430.dll64P

On the other hand, 'ddspbase_tiomap3430.dof64P' has the node statically included, so there's no need to do that.

Running

On the board use this to load the module:

modprobe bridgedriver base_img=/lib/dsp/baseimage.dof

Developing

There are two ways to compile your own DSP nodes; the official one which requires XDC tools, and the simplified one (which I prefer).

Official

Download the dsp-bridge examples from the omapzoom project. Once you extract the main tarball you'll need to extract the individual tarballs on the same directory, so you have something like:

config.bld
documents
dsp
mpu_api
mpu_driver
product.mak
samplemakefile
samples

DSP side

You'll need the C6x compiler, extract it in "/opt/dsp/cgt6x-6.0.22". The recommended version is v6.0.22.

You'll need the "DSP/BIOS" package and "RTSC/XDCtools" in order to compile the dsp-brige examples, you can download them from here. Here we will assume they are installed in "/opt/dsp".

Edit "product.mak" to match the version of your tools. Then run:

make -f samplemakefile .bridge_samples DD_XDCDIR=/opt/dsp/xdctools_3_10_02 SABIOS_DIR=/opt/dsp/bios_5_33_04/packages DEPOT=/opt/dsp

ARM side

You'll need to prepare a target directory:

export target=/tmp/dsp-target
mkdir -p $target/lib

Also, build libbridge and libqos:

cd mpu_api/src
make PREFIX=$target/.. CROSS=arm-linux- install

To build the examples:

cd samples/mpu/src
make PREFIX=$target/.. CROSS=arm-linux- LIBINCLUDES=$target/lib LDPATH=$target/lib install

All you need will be on '/tmp/dsp-target'.

Simplified

In order to develop dynamic dsp nodes you'll need a C6x compiler (the recommended version is v6.1.7) and doffbuild tools.

doffbuild tools

The only relevant tool is DLLcreate, which can be found in TI's omapzoom site, on the dspbridge_dsp package.

mkdir -p tmp
tar -xf dspbridge_dsp.tar.gz -C tmp
mv tmp/dsp/bdsptools/packages/ti/dspbridge/dsp/doffbuild /opt/doffbuild
rm -rf tmp

Example dsp node

Here is an example dsp node that is simply passing buffers back and forth.

git clone git://github.com/felipec/dsp-dummy.git
make DSP_TOOLS=/opt/dsptools DSP_DOFFBUILD=/opt/doffbuild

As a result you'll have two binaries; dummy.dll64P for dsp-side, and dummy for arm-side.

To load the dynamic node:

/dspbridge/dynreg.out -r /lib/dsp/dummy.dll64P

Now you can run the dummy test application.

More information