ECE497 Notes on DSP via c6run

Here are some notes on how to get c6run going on the BeagleBoard. This has been modified to add detail (4/27/2011) for the ECE4356 class.

from here
This, [[Media:C6run_m_yoder.tgz]], contains the following:


 * 1) /lib/modules from target FS
 * 2) uImage itself
 * 3) C6Run package prebuilt for the above
 * 4) C6Run target software
 * 5) Kernel modules for TI components
 * 6) loadmodules.sh and unloadmodules.sh
 * 7) pre-compiled test and and example applications

from elsewhere

 * DSP toolchain - point them to same one using
 * Angstrom distribution ARM compiler
 * DSP/BIOS 5.41 - point them to same one using

Instructions for Host Setup and Build
The download instructions have been modified. It is now assumed that you have already downloaded the following 4 files and placed them into your ~/Download directory (note ~ is /home/beagle below). Since some of the download times are very slow for these, they have been made available on the EE4356 web site.
 * C6run_m_yoder.tgz
 * ti_cgt_c6000_7.0.4_setup_linux_x86.bin
 * angstrom-2010.4-test-20100422-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.2.tar.bz2
 * bios_setuplinux_5_41_09_34.bin

Now we create the toolchains directory and populate it    host$ mkdir ~/toolchains host$ cd ~/Downloads host$ chmod +x ti_cgt_c6000_7.0.4_setup_linux_x86.bin host$ ls -l ! Look for an x by ti_... to verify it is executable host$ ./ti_cgt_c6000_7.0.4_setup_linux_x86.bin --installto ~/toolchains --mode silent
 * (Already Done) Download the TI C6000 v7.0.4 code generation tools for Linux from here
 * Install the codegen tools to  (you implicitly accept a EULA when doing this)


 * (Already Done) Download the angstrom ARM toolchain from here.

host$ tar -C ~/toolchains -xjf angstrom-2010.4-test-20100422-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.2.tar.bz2
 * Install the ARM toolchain

The ARM toolchain will be in


 * Download the 5.41.09.34 DSP/Bios package from here.

host$ chmod +x bios_setuplinux_5_41_09_34.bin host$ ./bios_setuplinux_5_41_09_34.bin --mode silent --prefix ~/toolchains
 * Install the DSP/Bios package (you implicitly accept a EULA when doing this)

host$ tar -xvfz c6run_m_yoder.tgz host$ cd c6run_m_yoder host$ tar -C ~/toolchains -xzf c6run_0_95_02_02_beagleboard.tar.gz
 * Install the pre-built C6Run package. To do this you must first untar the c6run_m_yoder.tgz file

host$ cd ~/toolchains/c6run_0_95_02_02_beagleboard host$ vi environment.sh    /* the following command in vi would make the substitution on all cases */ :1,$s/\${HOME}/\/home\/beagle host$ printenv ! Prints all the environment variables, note too many to see host$ printenv | more ! Prints out a page at a time, hit space bar to advance host$ printenv | grep ARM ! Only prints lines that have “ARM” in them host$ printenv | grep C6 ! Only prints lines that have “C6” in them
 * Edit the c6run environment settings to correctly point to the location of the components on your host PC (replace ${HOME} with the absolute path)
 * We now want to set up our environment variables. But first we will check to see what they are currently.

host$ source environment.sh    host$ printenv | grep ARM ! Only prints lines that have “ARM” in them host$ printenv | grep C6 ! Only prints lines that have “C6” in them
 * The above commands, unless you ran the environment.sh command previously, should show no environment variables with ARM or C6 in them
 * Source the environment variables and rerun the checks

The preceding checks should now show that the following FOUR environment variables are set: ARM_TOOLCHAIN_PREFIX, ARM_TOOLCHAIN_PATH, CFLAGS, and C6RUN_TOOLCHAIN_PATH. At this point the environment and components are all setup to build the examples and test cases included in the the C6Run package. The compilation scripts (c6runlib and c6runapp scripts) rely on these and the other variables from the environment.sh file.

It is suggested that the test and example makefiles be used as a template for any builds done for your own code.

host$ cd example ! You should be in /home/beagle/toolchains/c6run_0_95_02_02_beagleboard/examples host$ make host$ cd c6runapp/emqbit host$ ls
 * Run make to compile the example code
 * Look at the output to make sure that no errors occurred. If errors occur then either correct them or seek instructor help
 * Go into the sub directories to see the compiled code
 * You should see in the directory listing the files bench_arm and bench_dsp (among others).

Target Preparation
host$ df ! Verify that /media/BEAGLE and /media/ANGSTROM file systems are available host$ cd /media/BEAGLE ! Or whichever file system has the uImage file host$ mv uImage uImage.bak ! Save a copy in case you mess up    host$ cd ~/Downloads/C6run_m_yoder host$ cp uImage /media/BEAGLE
 * Setup the beagleboard to boot using the included kernel image (uImage binary file). This should just require replacing the uImage file on your SD card with the provided one (rename the file to be just 'uImage'). This step can be accomplished with the following commands, after the SD card which has the Angstrom linux system has been put into the card reader and mounted on the host system.

host$ mkdir /media/ANGSTROM/opt host$ cp c6run_target.tar.gz /media/ANGSTROM/opt host$ cd /media/ANGSTROM/opt host$ tar -xvf c6run_target.tgz ! This can be done on the host or on the beagleboard when linux boots host$ cp -R ~/toolchains/c6run_0_95_02_02_beagleboard/examples. ! copy our examples directory onto the SD card host$ cd ! can't unmount a file system in use host$ umount /media/ANGSTROM host$ umount /media/BEAGLE
 * Copy the the contents of the provided /lib/modules to the target's /lib/modules path. I (Yoder) found I didn't need to do this. I (Usevitch) concur.
 * Copy the contents of c6run_target.tar.gz to the target file system. I placed it in /opt. It contains the kernel modules from the TI components and the loadmodules.sh script which should be used to install them. The pre-built examples and test cases are also included in this archive. However, we also want to see if our compiled example code will work. Therefore we will copy over our examples directory.

Target Running
beagle$ cd /opt/home/daniel/c6run_target beagle$ ./unloadmodules.sh ! sometimes modules are left over and need to be removed beagle$ ./loadmodules.sh    beagle$ cd /opt/examples/c6runapp/emqbit beagle$ ./bench_arm beagle$ ./bench_dsp
 * Remove the SD card, place it into the beagleboard, and boot Angstrom linux.
 * Before running any c6run based application, make sure you run the loadmodules.sh script to load the needed kernel modules.
 * Now we will run our compiled fft benchmark examples