Difference between revisions of "BeagleBoard/DSP Howto"
(→Official: Update ARM side instructions) |
(→ARM side) |
||
Line 80: | Line 80: | ||
=== ARM side === | === ARM side === | ||
− | You'll need to prepare a ' | + | You'll need to prepare a '''target''' directory: |
export target=/tmp/dsp-target | export target=/tmp/dsp-target | ||
mkdir -p $target/lib | mkdir -p $target/lib |
Revision as of 06:33, 10 April 2009
This article explains how to use the DSP in OMAP3 at BeagleBoard with TI's deliverables. For DSP tool chain see C64x+ DSP.
Contents
Setup
Kernel driver
In order to use the DSP you would need TI's bridgedriver module on the kernel. For that you would need Hiroshi's patches on top of linux-omap:
git clone http://www.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
cd linux-omap-2.6
wget http://4869037.web.fc2.com/tidspbridge-20081021.tgz
tar xvzf tidspbridge-20081021.tgz
git am *.patch
make omap3_beagle_defconfig
Then make menuconfig
and add the following options in the menuconfig:
CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=14 #in Device Drivers->Graphics support->Support for frame buffer devices->Consistent DMA memory size CONFIG_MPU_BRIDGE=m #in Device Drivers->DSP Bridge driver
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.16". The only version tested is 6.0.16.
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 and doffbuild tools.
Apparently the only version that works is v6.0.16.
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
libdspbridge
This library is used by the user-space applications.
git clone git://github.com/felipec/libdspbridge.git cd libdspbridge make DESTDIR=$rootfs install
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 BRIDGE_DIR=../libdspbridge
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.