Difference between revisions of "How to setup a development environment"

From IGEP - ISEE Wiki

Jump to: navigation, search
m (Copy kernel and rootfs in flash memory)
Line 1: Line 1:
This tutorial was written for the [http://www.igep-platform.com/index.php?option=com_content&view=article&id=46&Itemid=55 ''igep revB''] board, but it is transposable to other ''OMAP3530'' boards (above all for the ''DSP'' part). It is a summary (with some adaptations) of several tutorials found on Internet (see [[How_to_setup_a_development_environment#References|References]]). All files will be installed in the $HOME directory.
+
This tutorial was written for the [http://www.igep-platform.com/index.php?option=com_content&view=article&id=46&Itemid=55 ''igep revB''] board, but it is transposable to other ''OMAP3530'' boards (above all for the ''DSP'' part). It is a summary (with some adaptations) of several tutorials found on Internet (see [[How to setup a development environment#References|References]]). All files will be installed in the $HOME directory.  
  
This tutorial is a translation of a French tutorial we wrote on our robotic [http://as.tech.free.fr/wiki/index.php?title=Cr%C3%A9er_un_environnement_de_d%C3%A9veloppement_pour_l%27OMAP3530 web site]. Sorry for the English, feel free to correct mistakes.
+
This tutorial is a translation of a French tutorial we wrote on our robotic [http://as.tech.free.fr/wiki/index.php?title=Cr%C3%A9er_un_environnement_de_d%C3%A9veloppement_pour_l%27OMAP3530 web site]. Sorry for the English, feel free to correct mistakes.  
  
= ''Rootfs'' =
+
= ''Rootfs'' =
  
This section describes how to obtain the [http://www.pokylinux.org/ ''Poky''] distribution. This is the distribution shipped with the ''igep'' boad; it is based on [http://wiki.openembedded.net/index.php/Main_Page ''Open Embedded''].
+
This section describes how to obtain the [http://www.pokylinux.org/ ''Poky''] distribution. This is the distribution shipped with the ''igep'' boad; it is based on [http://wiki.openembedded.net/index.php/Main_Page ''Open Embedded''].  
  
The first thing to do is set ''Bash'' as default ''sh'' ''shell'':
+
The first thing to do is set ''Bash'' as default ''sh'' ''shell'':  
 
+
<pre>sudo dpkg-reconfigure dash
<pre>
+
</pre>  
sudo dpkg-reconfigure dash
+
answer no to the question. Thus, "/bin/sh" will point towards "/bin/bash" (and not "/bin/dash"). Then, some kernels settings have to be changed. Edit the file "/etc/sysctl.conf" as ''root'' and set&nbsp;:  
</pre>
+
<pre>vm.mmap_min_addr = 0
 
+
</pre>  
answer no to the question. Thus, "/bin/sh" will point towards "/bin/bash" (and not "/bin/dash"). Then, some kernels settings have to be changed. Edit the file "/etc/sysctl.conf" as ''root'' and set :  
+
then, to take the modification into account:  
 
+
<pre>sudo sysctl -p
<pre>
+
</pre>  
vm.mmap_min_addr = 0
+
Some additional packages need to be installed to satisfy ''bitbake'' dependencies. First, add the following repositories to "/etc/apt/sources.list"&nbsp;:  
</pre>
+
<pre>deb http://debian.o-hand.com etch/
then, to take the modification into account:
 
<pre>
 
sudo sysctl -p
 
</pre>
 
 
 
Some additional packages need to be installed to satisfy ''bitbake'' dependencies. First, add the following repositories to "/etc/apt/sources.list" :
 
<pre>
 
deb http://debian.o-hand.com etch/
 
 
deb http://debian.o-hand.com unstable/
 
deb http://debian.o-hand.com unstable/
 
deb http://debian.o-hand.com feisty/
 
deb http://debian.o-hand.com feisty/
 
deb http://debian.o-hand.com gutsy/
 
deb http://debian.o-hand.com gutsy/
 
deb http://debian.o-hand.com hardy/
 
deb http://debian.o-hand.com hardy/
</pre>
+
</pre>  
Update the data base and install the following packages:
+
Update the data base and install the following packages:  
<pre>
+
<pre>sudo apt-get update
sudo apt-get update
 
 
sudo aptitude install python-psyco hgsvn qemu poky-depends poky-scripts
 
sudo aptitude install python-psyco hgsvn qemu poky-depends poky-scripts
</pre>
+
</pre> <!--
<!--
 
 
a priori ceci est automatiquement installé :
 
a priori ceci est automatiquement installé :
 
sudo aptitude install subversion cvs git-core \
 
sudo aptitude install subversion cvs git-core \
Line 42: Line 32:
 
       libncurses5-dev gawk python-dev python-psyco python-pysqlite2 \
 
       libncurses5-dev gawk python-dev python-psyco python-pysqlite2 \
 
       scrollkeeper gnome-doc-utils gettext automake hgsvn qemu poky-depends poky-scripts
 
       scrollkeeper gnome-doc-utils gettext automake hgsvn qemu poky-depends poky-scripts
  -->
+
  -->  
Then, download and decompress the last stable version of ''Poky'':
+
Then, download and decompress the last stable version of ''Poky'':  
 
+
<pre>mkdir -p $HOME/igep/poky
<pre>
 
mkdir -p $HOME/igep/poky
 
 
cd $HOME/igep/poky
 
cd $HOME/igep/poky
 
wget http://pokylinux.org/releases/poky-purple-3.2.tar.bz2
 
wget http://pokylinux.org/releases/poky-purple-3.2.tar.bz2
 
tar -xjf poky-purple-3.2.tar.bz2
 
tar -xjf poky-purple-3.2.tar.bz2
</pre>
+
</pre>  
 
+
The configuration file of ''Poky'' is located in the directory $HOME/igep/poky/build/conf&nbsp;:  
The configuration file of ''Poky'' is located in the directory $HOME/igep/poky/build/conf :
+
<pre>cd build/conf
<pre>
 
cd build/conf
 
 
nano local.conf
 
nano local.conf
</pre>
+
</pre>  
And paste the modified version for the ''igep'' board:
+
And paste the modified version for the ''igep'' board:  
<pre>
+
<pre># Where to cache the files Poky downloads
# Where to cache the files Poky downloads
+
DL_DIR&nbsp;?= "${OEROOT}/sources"
DL_DIR ?= "${OEROOT}/sources"
 
 
BBFILES += "\
 
BBFILES += "\
 
     ${OEROOT}/meta/packages/*/*.bb \
 
     ${OEROOT}/meta/packages/*/*.bb \
Line 75: Line 60:
 
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
 
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
 
# be appropriate.
 
# be appropriate.
# BB_NUMBER_THREADS = "2"
+
BB_NUMBER_THREADS = "4"
 
# Also, make can be passed flags so it run parallel threads e.g.:
 
# Also, make can be passed flags so it run parallel threads e.g.:
 
# PARALLEL_MAKE = "-j 2"
 
# PARALLEL_MAKE = "-j 2"
  
 
# The machine to target
 
# The machine to target
MACHINE ?= "igep0020b"
+
MACHINE&nbsp;?= "igep0020b"
  
TARGET_FPU_arm ?= "hard"
+
TARGET_FPU_arm&nbsp;?= "hard"
  
 
# Other supported machines
 
# Other supported machines
#MACHINE ?= "qemux86"
+
#MACHINE&nbsp;?= "qemux86"
#MACHINE ?= "qemuarm"
+
#MACHINE&nbsp;?= "qemuarm"
#MACHINE ?= "c7x0"
+
#MACHINE&nbsp;?= "c7x0"
#MACHINE ?= "akita"
+
#MACHINE&nbsp;?= "akita"
#MACHINE ?= "spitz"
+
#MACHINE&nbsp;?= "spitz"
#MACHINE ?= "nokia770"
+
#MACHINE&nbsp;?= "nokia770"
#MACHINE ?= "nokia800"
+
#MACHINE&nbsp;?= "nokia800"
#MACHINE ?= "fic-gta01"
+
#MACHINE&nbsp;?= "fic-gta01"
#MACHINE ?= "bootcdx86"
+
#MACHINE&nbsp;?= "bootcdx86"
#MACHINE ?= "cm-x270"
+
#MACHINE&nbsp;?= "cm-x270"
#MACHINE ?= "em-x270"
+
#MACHINE&nbsp;?= "em-x270"
#MACHINE ?= "htcuniversal"
+
#MACHINE&nbsp;?= "htcuniversal"
#MACHINE ?= "mx31ads"
+
#MACHINE&nbsp;?= "mx31ads"
#MACHINE ?= "mx31litekit"
+
#MACHINE&nbsp;?= "mx31litekit"
#MACHINE ?= "mx31phy"
+
#MACHINE&nbsp;?= "mx31phy"
#MACHINE ?= "netbook"
+
#MACHINE&nbsp;?= "netbook"
#MACHINE ?= "zylonite"
+
#MACHINE&nbsp;?= "zylonite"
  
DISTRO ?= "poky"
+
DISTRO&nbsp;?= "poky"
 
# For bleeding edge / experimental / unstable package versions
 
# For bleeding edge / experimental / unstable package versions
# DISTRO ?= "poky-bleeding"
+
# DISTRO&nbsp;?= "poky-bleeding"
  
 
# Poky has various extra metadata collections (openmoko, extras).
 
# Poky has various extra metadata collections (openmoko, extras).
Line 155: Line 140:
 
# include 'package_deb' for debs
 
# include 'package_deb' for debs
 
# include 'package_ipk' for ipks
 
# include 'package_ipk' for ipks
#PACKAGE_CLASSES ?= "package_deb package_ipk"
+
#PACKAGE_CLASSES&nbsp;?= "package_deb package_ipk"
PACKAGE_CLASSES ?= "package_ipk"
+
PACKAGE_CLASSES&nbsp;?= "package_ipk"
  
 
# POKYMODE controls the characteristics of the generated packages/images by
 
# POKYMODE controls the characteristics of the generated packages/images by
Line 165: Line 150:
 
#
 
#
 
# The default is "eabi"
 
# The default is "eabi"
# Use "oabi" for machines with kernels < 2.6.18 on ARM for example.
+
# Use "oabi" for machines with kernels &lt; 2.6.18 on ARM for example.
 
# Use "external-MODE" to use the precompiled external toolchains where MODE
 
# Use "external-MODE" to use the precompiled external toolchains where MODE
 
# is the type of external toolchain to use e.g. eabi.
 
# is the type of external toolchain to use e.g. eabi.
Line 173: Line 158:
 
# Note that a full build of everything in OpenEmbedded will take GigaBytes of hard
 
# Note that a full build of everything in OpenEmbedded will take GigaBytes of hard
 
# disk space, so make sure to free enough space. The default TMPDIR is
 
# disk space, so make sure to free enough space. The default TMPDIR is
# <build directory>/tmp
+
# &lt;build directory&gt;/tmp
 
TMPDIR = "${OEROOT}/build/tmp-${MACHINE}"
 
TMPDIR = "${OEROOT}/build/tmp-${MACHINE}"
  
Line 221: Line 206:
 
# Supported values are i586 and x86_64
 
# Supported values are i586 and x86_64
 
SDKMACHINE="i586"
 
SDKMACHINE="i586"
</pre>
+
</pre>  
 
+
The following section needs to be adapted to the number of CPU the host machine has:  
The following section needs to be adapted to the number of CPU the host machine has:
+
<pre># Uncomment and set to allow bitbake to execute multiple tasks at once.
<pre>
 
# Uncomment and set to allow bitbake to execute multiple tasks at once.
 
 
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
 
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
 
# be appropriate.
 
# be appropriate.
Line 231: Line 214:
 
# Also, make can be passed flags so it run parallel threads e.g.:
 
# Also, make can be passed flags so it run parallel threads e.g.:
 
# PARALLEL_MAKE = "-j 2"
 
# PARALLEL_MAKE = "-j 2"
</pre>
+
</pre>  
 
+
The build environment needs to be setup by the following command:  
The build environment needs to be setup by the following command:
+
<pre>cd ../..
<pre>
 
cd ../..
 
 
source poky-init-build-env
 
source poky-init-build-env
</pre>
+
</pre>  
A target can be built using:
+
A target can be built using:  
<pre>
+
<pre>bitbake &lt;target&gt;
bitbake <target>
+
</pre>  
</pre>
+
there is a lot of targets, which can be an image (take a look at the "meta/packages/images/" directory) or more simply a ''recipe'' corresponding to a software. A detailed list of images can be found on the [http://www.pokylinux.org/doc/poky-handbook.html#ref-images Poky Handbook]. To build an image without ''X11'' server:  
there is a lot of targets, which can be an image (take a look at the "meta/packages/images/" directory) or more simply a ''recipe'' corresponding to a software. A detailed list of images can be found on the [http://www.pokylinux.org/doc/poky-handbook.html#ref-images Poky Handbook]. To build an image without ''X11'' server:
+
<pre>bitbake poky-image-base
<pre>
+
</pre>  
bitbake poky-image-base
+
This step is very long (several hours) and take a lot of space (like 16 gigas) on the host's hard disk. If you are behind a ''proxy'', take a look at this [http://www.pokylinux.org/doc/poky-handbook.html#id3403214 part] of ''Poky's'' FAQ.
</pre>
 
  
This step is very long (several hours) and take a lot of space (like 16 gigas) on the host's hard disk. If you are behind a ''proxy'', take a look at this [http://www.pokylinux.org/doc/poky-handbook.html#id3403214 part] of ''Poky's'' FAQ.
+
If everything compiles well, the resulting image (''rootfs'' and kernel) will be placed in the directory:  
 
+
<pre>tmp-igep0020b/deploy/images/
If everything compiles well, the resulting image (''rootfs'' and kernel) will be placed in the directory:
+
</pre>  
<pre>
+
and ''.ipk'' packages in:  
tmp-igep0020b/deploy/images/
+
<pre>tmp-igep0020b/deploy/ipk/
</pre>
+
</pre>  
and ''.ipk'' packages in:
+
We will see in section [[How to setup a development environment#Boot_on_the_rootfs_and_the_kernel|''Boot'' on ''rootfs'' and kernel]] how to use it. Yet, ''bitbake'' will download by default the kernel "linux-omap-2.6.28.10-igep0020b-0" which is not the last one provided by ''ISEE''. See section [[How to setup a development environment#Kernel_compilation|Kernel compilation]] to compile another version.
<pre>
 
tmp-igep0020b/deploy/ipk/
 
</pre>
 
  
We will see in section [[How_to_setup_a_development_environment#Boot_on_the_rootfs_and_the_kernel|''Boot'' on ''rootfs'' and kernel]] how to use it. Yet, ''bitbake'' will download by default the kernel "linux-omap-2.6.28.10-igep0020b-0" which is not the last one provided by ''ISEE''. See section [[How_to_setup_a_development_environment#Kernel_compilation|Kernel compilation]] to compile another version.
+
TODO: modify ''recipes'' to download another kernel version  
  
TODO: modify ''recipes'' to download another kernel version
+
= Cross toolchain for the ''ARM'' =
  
= Cross toolchain for the ''ARM''=
+
Aparently, there is a ''bug'' in one of ''Poky's'' ''recipes'', which implies that the cross toolchain doesn't include automatically the ''C++'' ''headers'', see [http://lists.o-hand.com/poky/1420.html this thread]. A ''patch'' has been proposed; to apply it&nbsp;:  
 
+
<pre>cd $HOME/igep/poky
Aparently, there is a ''bug'' in one of ''Poky's'' ''recipes'', which implies that the cross toolchain doesn't include automatically the ''C++'' ''headers'', see [http://lists.o-hand.com/poky/1420.html this thread]. A ''patch'' has been proposed; to apply it :
 
<pre>
 
cd $HOME/igep/poky
 
 
wget http://lists.o-hand.com/poky/att-1420/fix-gxx-include-dir.patch
 
wget http://lists.o-hand.com/poky/att-1420/fix-gxx-include-dir.patch
patch -p1 < fix-gxx-include-dir.patch
+
patch -p1 &lt; fix-gxx-include-dir.patch
</pre>
+
</pre>  
 
+
The cross toolchain can be built using ''bitbake'':  
The cross toolchain can be built using ''bitbake'':
+
<pre>source poky-init-build-env
<pre>
 
source poky-init-build-env
 
 
bitbake meta-toolchain-sdk
 
bitbake meta-toolchain-sdk
</pre>
+
</pre>  
The result will be placed in the directory:
+
The result will be placed in the directory:  
<pre>
+
<pre> tmp-igep0020b/deploy/sdk/
tmp-igep0020b/deploy/sdk/
+
</pre>  
</pre>
+
as an archive to decompress in the directory "/usr/local/poky".  
as an archive to decompress in the directory "/usr/local/poky".
 
  
In order to cross compile code for the ''ARM'', the following script needs to be run to set up paths:
+
In order to cross compile code for the ''ARM'', the following script needs to be run to set up paths:  
<pre>
+
<pre>source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
+
</pre>  
</pre>
+
= Kernel compilation  =
  
= Kernel compilation =
+
Currently, the last stable kernel provided by ''ISEE'' is "linux-omap-2.6.28.10-igep0020b-2". Check in the ''download'' section of [http://www.myigep.com/index.php?option=com_weblinks&view=category&id=50&Itemid=85 www.myigep.com] which is the last one. More recent versions (but unstable) can be downloaded on the [http://git.myigep.com/gitweb ''git''] of ''ISEE''.
  
Currently, the last stable kernel provided by ''ISEE'' is "linux-omap-2.6.28.10-igep0020b-2". Check in the ''download'' section of [http://www.myigep.com/index.php?option=com_weblinks&view=category&id=50&Itemid=85 www.myigep.com] which is the last one. More recent versions (but unstable) can be downloaded on the [http://git.myigep.com/gitweb ''git''] of ''ISEE''.
+
=== Kernel compilation under ''bitbake''  ===
  
=== Kernel compilation under ''bitbake'' ===
+
=== Kernel compilation outside ''bitbake'' ===
  
=== Kernel compilation outside ''bitbake'' ===
+
First, download the kernel sources:  
 
+
<pre>cd $HOME/igep
First, download the kernel sources:
 
<pre>
 
cd $HOME/igep
 
 
wget http://downloads.myigep.com/sources/kernel/linux-omap-2.6.28.10-igep0020b-2.tar.gz
 
wget http://downloads.myigep.com/sources/kernel/linux-omap-2.6.28.10-igep0020b-2.tar.gz
 
tar -xzf linux-omap-2.6.28.10-igep0020b-2.tar.gz
 
tar -xzf linux-omap-2.6.28.10-igep0020b-2.tar.gz
 
cd linux-omap-2.6.28.10-igep0020b-2
 
cd linux-omap-2.6.28.10-igep0020b-2
</pre>
+
</pre>  
 
+
Configure the kernel:  
Configure the kernel:
+
<pre>source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
<pre>
 
source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
 
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- igep0020b_defconfig
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- igep0020b_defconfig
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- menuconfig
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- menuconfig
</pre>
+
</pre>  
The last line is only needed if you want to customize the kernel.
+
The last line is only needed if you want to customize the kernel.
 +
 
 +
To compile kernel and modules:
 +
<pre>make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- uImage modules
 +
</pre>
 +
The resulting image is placed in "arch/arm/boot" directory.  
  
To compile kernel and modules:
+
We will see in the section [[How to setup a development environment#Boot_on_the_rootfs_and_the_kernel|Boot on the ''rootfs'' and the kernel]] how to use kernel and modules.
<pre>
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- uImage modules
 
</pre>
 
  
The resulting image is placed in "arch/arm/boot" directory.
+
= Boot on the ''rootfs'' and the kernel  =
  
We will see in the section [[How_to_setup_a_development_environment#Boot_on_the_rootfs_and_the_kernel|Boot on the ''rootfs'' and the kernel]] how to use kernel and modules.
+
There are several methods to do it. For developing purposes, the easiest way is to boot over network, which avoid flashing operations or coping on the memory card. Yet, these two solutions are essentials for applications where the board need to be independent from the host computer.  
  
= Boot on the ''rootfs'' and the kernel =
+
=== Over network  ===
  
There are several methods to do it. For developing purposes, the easiest way is to boot over network, which avoid flashing operations or coping on the memory card. Yet, these two solutions are essentials for applications where the board need to be independent from the host computer.
+
Two servers are needed. The ''NFS'' (''Network File System'') server allows the target to accede its ''rootfs'' by the network. The ''TFTP'' (''Trivial File Transfer Protocol'') server allows the target to download the kernel over network. Thus, ''UBoot'' needs to be correctly setup to boot on the correct files. To do this, plug a serial cable on the board (''115200n8'') and stop ''UBoot'' by pressing a key. The environment variable of ''UBoot'' we need to change are:
  
=== Over network ===
+
*''serverip'': the server's ''IP'' address, need to be on the ''192.168.254.x'' subred (except if you change the board address, which is not explained here). By default, the server's ''IP'' address is ''192.168.254.10''.
 +
*''distro'': the distribution's name, by default ''poky''.
 +
*''machine'': the card's name, by default ''igep0020b''.
 +
*''project'': the project's name, that is to say the ''rootfs'' generated [[How to setup a development environment#Rootfs|previously]].
  
Two servers are needed. The ''NFS'' (''Network File System'') server allows the target to accede its ''rootfs'' by the network. The ''TFTP'' (''Trivial File Transfer Protocol'') server allows the target to download the kernel over network. Thus, ''UBoot'' needs to be correctly setup to boot on the correct files. To do this, plug a serial cable on the board (''115200n8'') and stop ''UBoot'' by pressing a key. The environment variable of ''UBoot'' we need to change are:
+
To change a variable, use the command ''setenv''. Thus, to change the project's name and use the one we have just made, set:
*''serverip'': the server's ''IP'' address, need to be on the ''192.168.254.x'' subred (except if you change the board address, which is not explained here). By default, the server's ''IP'' address is ''192.168.254.10''.
+
<pre>setenv project poky-image-base
*''distro'': the distribution's name, by default ''poky''.
+
</pre>
*''machine'': the card's name, by default ''igep0020b''.
+
Then, to boot:
*''project'': the project's name, that is to say the ''rootfs'' generated [[How_to_setup_a_development_environment#Rootfs|previously]].
+
<pre>run bootcmd
 +
</pre>
 +
which will execute the contents of the ''bootcmd'' variable. The 'printenv''command allow to show the content of a variable; for example:''  
 +
<pre>printenv bootcmd
 +
</pre>
 +
returns by default:  
 +
<pre>run mmc-boot; run nfs-boot; run onenand-boot
 +
</pre>
 +
That is to say the board will first check if a memory card is present to boot with it. If memory card is not present, the board will newt ''ping'' the server to boot over network. If server does not answer, the board will boot on the flash. Take a look at ''mmc-boot'', ''nfs-boot'' and ''onenand-boot'' variables for more details. In addition, the factory settings of ''UBoot'' are given [http://wiki.myigep.com/trac/wiki/HowToSetupUBootFactorySetting here].  
  
To change a variable, use the command ''setenv''. Thus, to change the project's name and use the one we have just made, set:
+
In order to save ''UBoot'' environment variables in the flash, do:  
<pre>
+
<pre>saveenv
setenv project poky-image-base
+
</pre>  
</pre>
+
which will avoid to reenter it every time...  
Then, to boot:
 
<pre>
 
run bootcmd
 
</pre>
 
which will execute the contents of the ''bootcmd'' variable. The 'printenv'' command allow to show the content of a variable; for example:
 
<pre>
 
printenv bootcmd
 
</pre>
 
returns by default:
 
<pre>
 
run mmc-boot; run nfs-boot; run onenand-boot
 
</pre>
 
That is to say the board will first check if a memory card is present to boot with it. If memory card is not present, the board will newt ''ping'' the server to boot over network. If server does not answer, the board will boot on the flash. Take a look at ''mmc-boot'', ''nfs-boot'' and ''onenand-boot'' variables for more details. In addition, the factory settings of ''UBoot'' are given [http://wiki.myigep.com/trac/wiki/HowToSetupUBootFactorySetting here].
 
  
In order to save ''UBoot'' environment variables in the flash, do:
+
Once ''&lt;serverip&gt;'', ''&lt;distro&gt;'', ''&lt;project&gt;'', and ''&lt;machine&gt;'' variables setup, ''UBoot'' will search on the server of address ''&lt;serverip&gt;'':  
<pre>
 
saveenv
 
</pre>
 
which will avoid to reenter it every time...
 
  
Once ''<serverip>'', ''<distro>'', ''<project>'', and ''<machine>'' variables setup, ''UBoot'' will search on the server of address ''<serverip>'':
+
*a kernel image ''uImage'' in the directory "/srv/tftp/''&lt;distro&gt;''/''&lt;project&gt;''/''&lt;machine&gt;''" accessible by ''TFTP''.  
* a kernel image ''uImage'' in the directory "/srv/tftp/''<distro>''/''<project>''/''<machine>''" accessible by ''TFTP''.
+
*a ''rootfs'' in the directory "/srv/nfs/''&lt;distro&gt;''/''&lt;project&gt;''/''&lt;machine&gt;''" accessible by ''NFS''.
* a ''rootfs'' in the directory "/srv/nfs/''<distro>''/''<project>''/''<machine>''" accessible by ''NFS''.
 
  
We assume now that ''<distro>=poky'', ''<project>=poky-image-base'' and ''<machine>=igep0020b''.
+
We assume now that ''&lt;distro&gt;=poky'', ''&lt;project&gt;=poky-image-base'' and ''&lt;machine&gt;=igep0020b''.  
  
Thus, create the following directories on the host:
+
Thus, create the following directories on the host:  
<pre>
+
<pre>sudo mkdir -p /srv/nfs/poky/poky-image-base/igep0020b
sudo mkdir -p /srv/nfs/poky/poky-image-base/igep0020b
 
 
sudo mkdir -p /srv/tftp/poky/poky-image-base/igep0020b
 
sudo mkdir -p /srv/tftp/poky/poky-image-base/igep0020b
</pre>
+
</pre>  
Next, copy the kernel. If it was made [[How_to_setup_a_development_environment#Kernel_compilation_outside_bitbake|outside ''bitbake'']]:
+
Next, copy the kernel. If it was made [[How to setup a development environment#Kernel_compilation_outside_bitbake|outside ''bitbake'']]:  
<pre>
+
<pre>sudo cp $HOME/igep/linux-omap-2.6.28.10-igep0020b-2/arch/arm/boot/uImage /srv/tftp/poky/poky-image-base/igep0020b/
sudo cp $HOME/igep/linux-omap-2.6.28.10-igep0020b-2/arch/arm/boot/uImage /srv/tftp/poky/poky-image-base/igep0020b/
+
</pre>  
</pre>
+
or if it was made [[How to setup a development environment#Rootfs|with the ''rootfs'']] or [[How to setup a development environment#Kernel_compilation_under_bitbake|under''bitbake'']]:  
or if it was made [[How_to_setup_a_development_environment#Rootfs|with the ''rootfs'']] or [[How_to_setup_a_development_environment#Kernel_compilation_under_bitbake|under''bitbake'']]:
+
<pre>sudo cp $HOME/igep/poky/build/tmp-igep0020b/deploy/images/uImage /srv/tftp/poky/poky-image-base/igep0020b/
<pre>
+
</pre>  
sudo cp $HOME/igep/poky/build/tmp-igep0020b/deploy/images/uImage /srv/tftp/poky/poky-image-base/igep0020b/
+
Next, install the ''rootfs'' in the good directory:  
</pre>
+
<pre>pushd /srv/nfs/poky/poky-image-base/igep0020b
Next, install the ''rootfs'' in the good directory:
+
sudo cpio -idm&lt; $HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.cpio  
<pre>
 
pushd /srv/nfs/poky/poky-image-base/igep0020b
 
sudo cpio -idm< $HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.cpio  
 
 
popd
 
popd
</pre>
+
</pre>  
If kernel was built [[How_to_setup_a_development_environment#Kernel_compilation_outside_bitbake|outside ''bitbake'']], install kernel modules in the ''rootfs'' as follows:
+
If kernel was built [[How to setup a development environment#Kernel_compilation_outside_bitbake|outside ''bitbake'']], install kernel modules in the ''rootfs'' as follows:  
<pre>
+
<pre>cd $HOME/igep/linux-omap-2.6.28.10-igep0020b-2
cd $HOME/igep/linux-omap-2.6.28.10-igep0020b-2
 
 
source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
 
source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules_install INSTALL_MOD_PATH=/srv/nfs/poky/poky-image-base/igep0020b
 
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules_install INSTALL_MOD_PATH=/srv/nfs/poky/poky-image-base/igep0020b
</pre>
+
</pre>  
Finally, install the two servers on host:
+
Finally, install the two servers on host:  
<pre>
+
<pre>sudo apt-get install tftpd nfs-kernel-server
sudo apt-get install tftpd nfs-kernel-server
+
</pre>  
</pre>
+
By default, the ''TFTP'' server shares the "/srv/tftp" directory, which is the one we are using. If necessary, you can change this by editing the "/etc/inetd.conf" file&nbsp;:  
By default, the ''TFTP'' server shares the "/srv/tftp" directory, which is the one we are using. If necessary, you can change this by editing the "/etc/inetd.conf" file :
+
<pre>#:BOOT: TFTP service is provided primarily for booting.  Most sites
<pre>
 
#:BOOT: TFTP service is provided primarily for booting.  Most sites
 
 
#      run this only on machines acting as "boot servers."
 
#      run this only on machines acting as "boot servers."
 
tftp            dgram  udp    wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp
 
tftp            dgram  udp    wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp
 +
</pre>
 +
The configuration file of ''NFS'' server is "/etc/exports". Add the following line for each ''rootfs''&nbsp;:
 +
<pre># Poky image rootfs
 +
/srv/nfs/&lt;distro&gt;/&lt;project&gt;/&lt;machine&gt;      &lt;target_ip&gt;(rw,no_root_squash,no_subtree_check,sync)
 +
</pre>
 +
where ''&lt;target_ip&gt;'' is the ''ip'' address of the target. By default, ''igep'' address is ''192.168.254.254''. It is also possible to put ''*'' to allow a wider range of addresses. In our case, write&nbsp;:
 +
<pre>/srv/nfs/poky/poky-image-base/igep0020b      192.168.254.254(rw,no_root_squash,no_subtree_check,sync)
 
</pre>
 
</pre>
 
+
Remember execute the command:<br>
The configuration file of ''NFS'' server is "/etc/exports". Add the following line for each ''rootfs'' :
+
<pre>$ exportfs -a  
<pre>
 
# Poky image rootfs
 
/srv/nfs/<distro>/<project>/<machine>       <target_ip>(rw,no_root_squash,no_subtree_check,sync)
 
</pre>
 
where ''<target_ip>'' is the ''ip'' address of the target. By default, ''igep'' address is ''192.168.254.254''. It is also possible to put ''*'' to allow a wider range of addresses. In our case, write :
 
<pre>
 
/srv/nfs/poky/poky-image-base/igep0020b      192.168.254.254(rw,no_root_squash,no_subtree_check,sync)
 
 
</pre>
 
</pre>
 +
Every time that you modify/update the file /etc/exports.<br>
  
=== Copy kernel and ''rootfs'' in ''flash'' memory ===
+
=== Copy kernel and ''rootfs'' in ''flash'' memory ===
  
Copy can be done either from ''uboot'' or ''linux''. To copy the ''rootfs'', a ''jffs2'' file is needed. If you do not need any modification to the one created [[How_to_setup_a_development_environment#Rootfs|previously]], you can jump next step. If you have made changes to the ''rootfs'' (for example when using it for [[How_to_setup_a_development_environment#Over_network|''NFS'' boot]]), you will have to build the ''jffs2'' file from the ''rootfs'' directory.
+
Copy can be done either from ''uboot'' or ''linux''. To copy the ''rootfs'', a ''jffs2'' file is needed. If you do not need any modification to the one created [[How to setup a development environment#Rootfs|previously]], you can jump next step. If you have made changes to the ''rootfs'' (for example when using it for [[How to setup a development environment#Over_network|''NFS'' boot]]), you will have to build the ''jffs2'' file from the ''rootfs'' directory.  
  
====Create the ''jffs2'' file====
+
==== Create the ''jffs2'' file ====
  
The following package needs to be installed to create the ''jffs2'' file:
+
The following package needs to be installed to create the ''jffs2'' file:  
<pre>
+
<pre>sudo apt-get install mtd-utils
sudo apt-get install mtd-utils
+
</pre>  
</pre>
+
Then use the command:  
Then use the command:
+
<pre>mkfs.jffs2 -r &lt;root file system&gt; -e &lt;erase block size&gt; -o &lt;output file&gt;
<pre>
+
</pre>  
mkfs.jffs2 -r <root file system> -e <erase block size> -o <output file>
+
where &lt;root file system&gt; is the path to the directory to copy (ie /srv/nfs/poky/poky-image-base/igep0020b), &lt;erase block size&gt; is the block size to erase in KB and &lt;output file&gt; name of the output file. Block size can be seen with the following command:  
</pre>
+
<pre>cat /proc/mtd
where <root file system> is the path to the directory to copy (ie /srv/nfs/poky/poky-image-base/igep0020b), <erase block size> is the block size to erase in KB and <output file> name of the output file.
+
</pre>  
Block size can be seen with the following command:
+
On ''igep'', it returns:  
<pre>
+
<pre>dev:    size  erasesize  name
cat /proc/mtd
 
</pre>
 
On ''igep'', it returns:
 
<pre>
 
dev:    size  erasesize  name
 
 
mtd0: 00080000 00040000 "X-Loader"
 
mtd0: 00080000 00040000 "X-Loader"
 
mtd1: 00180000 00040000 "U-Boot"
 
mtd1: 00180000 00040000 "U-Boot"
Line 435: Line 385:
 
mtd3: 00300000 00040000 "Kernel"
 
mtd3: 00300000 00040000 "Kernel"
 
mtd4: 1fa80000 00040000 "File System"
 
mtd4: 1fa80000 00040000 "File System"
</pre>
+
</pre>  
Thus, the size is 0x40000=265KB.
+
Thus, the size is 0x40000=265KB.  
  
====Copy from ''uboot''====
+
==== Copy from ''uboot'' ====
  
 +
==== Copy from ''linux'' ====
  
====Copy from ''linux''====
+
To do this, you will have to boot the card from ''nfs'' or memory card; but not from flash.
  
To do this, you will have to boot the card from ''nfs'' or memory card; but not from flash.
+
Partitions can be seen with the following command:  
 
+
<pre>cat /proc/mtd
Partitions can be seen with the following command:
+
</pre>  
<pre>
+
On ''igep'', it returns:  
cat /proc/mtd
+
<pre>dev:    size  erasesize  name
</pre>
 
On ''igep'', it returns:
 
<pre>
 
dev:    size  erasesize  name
 
 
mtd0: 00080000 00040000 "X-Loader"
 
mtd0: 00080000 00040000 "X-Loader"
 
mtd1: 00180000 00040000 "U-Boot"
 
mtd1: 00180000 00040000 "U-Boot"
Line 457: Line 404:
 
mtd3: 00300000 00040000 "Kernel"
 
mtd3: 00300000 00040000 "Kernel"
 
mtd4: 1fa80000 00040000 "File System"
 
mtd4: 1fa80000 00040000 "File System"
</pre>
+
</pre>  
To copy the kernel, erase the corresponding memory area before doing the copy:
+
To copy the kernel, erase the corresponding memory area before doing the copy:  
<pre>
+
<pre>flash_eraseall /dev/mtd3
flash_eraseall /dev/mtd3
 
 
nandwrite -p /dev/mtd3 uImage
 
nandwrite -p /dev/mtd3 uImage
</pre>
+
</pre>  
same thing for the ''rootfs''
+
same thing for the ''rootfs''  
<pre>
+
<pre>flash_eraseall /dev/mtd4
flash_eraseall /dev/mtd4
 
 
nandwrite -p /dev/mtd4 rootfs.jffs2
 
nandwrite -p /dev/mtd4 rootfs.jffs2
</pre>
+
</pre>  
Note that if you are using the ''rootfs'' built [[How_to_setup_a_development_environment#Rootfs|previously]], the corresponding file should be located there:
+
Note that if you are using the ''rootfs'' built [[How to setup a development environment#Rootfs|previously]], the corresponding file should be located there:  
<pre>
+
<pre>$HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.jffs2
$HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.jffs2
+
</pre>  
</pre>
+
And now reboot. In case of errors (such as ''bad crc'' on the ''kernel'' for example), it is necessary to reflash all, see [http://wiki.myigep.com/trac/wiki/HowToUpgradeTheFactoryFirmware this].
  
And now reboot. In case of errors (such as ''bad crc'' on the ''kernel'' for example), it is necessary to reflash all, see [http://wiki.myigep.com/trac/wiki/HowToUpgradeTheFactoryFirmware this].
+
=== Copy kernel and ''rootfs'' in memory card  ===
  
=== Copy kernel and ''rootfs'' in memory card ===
+
= Chaine de développement croisée ''DSP'' =
  
 +
Note: certains des outils de cette section nécessitent un compte sur le site de TI pour pouvoir les télécharger. La page principale des téléchargements est [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/index.html celle-ci].
  
= Chaine de développement croisée ''DSP'' =
+
=== ''Code generation tools'' ===
  
Note: certains des outils de cette section nécessitent un compte sur le site de TI pour pouvoir les télécharger. La page principale des téléchargements est [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/index.html celle-ci].
+
''TI CGT'' est le cross compilateur pour le DSP. Récupérer la dernière version [https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm ici] et installer (par exemple dans le répertoire $HOME/TI/TI_CGT).  
  
=== ''Code generation tools'' ===
+
=== ''DSP BIOS'' ===
  
''TI CGT'' est le cross compilateur pour le DSP. Récupérer la dernière version [https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm ici] et installer (par exemple dans le répertoire $HOME/TI/TI_CGT).
+
''DSP BIOS'' est le système d'exploitation résidant dans le ''DSP''. A télécharger [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dspbios/index.html ici] et installer (par exemple dans le répertoire $HOME/TI/BIOS).  
  
=== ''DSP BIOS'' ===
+
=== ''XDC Tools'' ===
  
''DSP BIOS'' est le système d'exploitation résidant dans le ''DSP''. A télécharger [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dspbios/index.html ici] et installer (par exemple dans le répertoire $HOME/TI/BIOS).
+
A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/rtsc/index.html ici] et installer (par exemple dans le répertoire '$HOME/TI/xdctools).  
  
=== ''XDC Tools'' ===
+
=== ''DSP Link'' ===
  
A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/rtsc/index.html ici] et installer (par exemple dans le répertoire '$HOME/TI/xdctools).
+
''DSPLink'' permet la communication entre ''ARM'' et ''DSP''. A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/link/link_1_60/index.html ici]. Décompresser le par exemple dans le répertoire $HOME/igep/dsplink.  
  
=== ''DSP Link'' ===
+
Ajouter une variable d'environnement DSPLINK contenant le chemin du répertoire de ''DSPLINK'', par exemple en ajoutant au .bashrc la ligne suivante: (penser à faire un log out/log in ensuite)  
 
+
<pre>export DSPLINK=$HOME/igep/dsplink_linux_1_63/dsplink
''DSPLink'' permet la communication entre ''ARM'' et ''DSP''. A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/link/link_1_60/index.html ici]. Décompresser le par exemple dans le répertoire $HOME/igep/dsplink.
+
</pre>  
 
+
aller dans le répertoire $(DSPLINK)/config/bin et lancer&nbsp;:  
Ajouter une variable d'environnement DSPLINK contenant le chemin du répertoire de ''DSPLINK'', par exemple en ajoutant au .bashrc la ligne suivante: (penser à faire un log out/log in ensuite)
+
<pre>perl dsplinkcfg.pl --platform=OMAP3530 --nodsp=1 --dspcfg_0=OMAP3530SHMEM --dspos_0=DSPBIOS5XX --gppos=OMAPLSP --comps=PONSLRMC
 
+
</pre>
<pre>
+
pour configurer ''DSPLINK''. Pour comprendre ce que fait chacune de ces options, lancer simplement&nbsp;:
export DSPLINK=$HOME/igep/dsplink_linux_1_63/dsplink
+
<pre>perl dsplinkcfg.pl
</pre>
 
 
 
aller dans le répertoire $(DSPLINK)/config/bin et lancer :
 
 
 
<pre>
 
perl dsplinkcfg.pl --platform=OMAP3530 --nodsp=1 --dspcfg_0=OMAP3530SHMEM --dspos_0=DSPBIOS5XX --gppos=OMAPLSP --comps=PONSLRMC
 
 
</pre>  
 
</pre>  
pour configurer ''DSPLINK''. Pour comprendre ce que fait chacune de ces options, lancer simplement :
+
et ajouter les options au fur et à mesure. Si tout se passe bien, le message suivant devrait apparaitre&nbsp;:  
<pre>
+
<pre>Please edit the following files for toolchains, kernel sources, etc changes.
perl dsplinkcfg.pl
 
</pre>
 
et ajouter les options au fur et à mesure. Si tout se passe bien, le message suivant devrait apparaitre :
 
 
 
<pre>
 
Please edit the following files for toolchains, kernel sources, etc changes.
 
 
GPP side distribution file: $DSPLINK/make/Linux/omap3530_2.6.mk
 
GPP side distribution file: $DSPLINK/make/Linux/omap3530_2.6.mk
 
GPP side distribution file: $DSPLINK/gpp/src/Rules.mk
 
GPP side distribution file: $DSPLINK/gpp/src/Rules.mk
 
DSP side distribution file: $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk
 
DSP side distribution file: $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk
</pre>
+
</pre>  
ce sont les fichiers à éditer pour adapter à notre configuration.
+
ce sont les fichiers à éditer pour adapter à notre configuration.  
  
Pour le fichier $DSPLINK/make/Linux/omap3530_2.6.mk, changer (et adapter si besoin) les valeurs suivantes:
+
Pour le fichier $DSPLINK/make/Linux/omap3530_2.6.mk, changer (et adapter si besoin) les valeurs suivantes:  
<pre>
+
<pre>#  ============================================================================
#  ============================================================================
 
 
#  Set the values of necessary variables to be used for the OS.
 
#  Set the values of necessary variables to be used for the OS.
 
#  ============================================================================
 
#  ============================================================================
Line 532: Line 465:
 
#  Base directory for the GPP OS
 
#  Base directory for the GPP OS
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_BUILDOS   :=${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2
+
BASE_BUILDOS   &nbsp;:=${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2
  
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
 
#  Base for toolchain
 
#  Base for toolchain
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_TOOLCHAIN := /usr/local/poky/eabi-glibc
+
BASE_TOOLCHAIN &nbsp;:= /usr/local/poky/eabi-glibc
  
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
 
#  Base directory for include files provided by GPP OS
 
#  Base directory for include files provided by GPP OS
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_OSINC     := $(BASE_BUILDOS)/include
+
BASE_OSINC     &nbsp;:= $(BASE_BUILDOS)/include
  
OSINC_GENERIC   := $(BASE_OSINC)
+
OSINC_GENERIC &nbsp;:= $(BASE_OSINC)
OSINC_PLATFORM := $(BASE_TOOLCHAIN)/lib/gcc/arm-poky-linux-gnueabi/4.3.3/include
+
OSINC_PLATFORM &nbsp;:= $(BASE_TOOLCHAIN)/lib/gcc/arm-poky-linux-gnueabi/4.3.3/include
OSINC_TARGET   := $(BASE_TOOLCHAIN)/arm-poky-linux-gnueabi/libc/usr/include
+
OSINC_TARGET   &nbsp;:= $(BASE_TOOLCHAIN)/arm-poky-linux-gnueabi/libc/usr/include
  
 
#  ============================================================================
 
#  ============================================================================
Line 555: Line 488:
 
#  Name of the compiler
 
#  Name of the compiler
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
COMPILER       := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc
+
COMPILER       &nbsp;:= $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc
LD             := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ld
+
LD             &nbsp;:= $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ld
  
CROSS_COMPILE   := arm-poky-linux-gnueabi-
+
CROSS_COMPILE &nbsp;:= arm-poky-linux-gnueabi-
 
export CROSS_COMPILE
 
export CROSS_COMPILE
  
Line 564: Line 497:
 
#  ARCHIVER2 - This denotes the archiver.
 
#  ARCHIVER2 - This denotes the archiver.
 
#  ============================================================================
 
#  ============================================================================
ARCHIVER       := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ar
+
ARCHIVER       &nbsp;:= $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ar
  
 
#  ============================================================================
 
#  ============================================================================
 
#  LINKER - The compiler is used for linking purpose as well.
 
#  LINKER - The compiler is used for linking purpose as well.
 
#  ============================================================================
 
#  ============================================================================
LINKER     := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc
+
LINKER     &nbsp;:= $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc
</pre>
+
</pre>  
Pour le fichier $DSPLINK/gpp/src/Rules.mk, changer (et adapter si besoin) :
+
Pour le fichier $DSPLINK/gpp/src/Rules.mk, changer (et adapter si besoin)&nbsp;:  
<pre>
+
<pre>ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
+
KERNEL_DIR   &nbsp;:= ${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2
KERNEL_DIR   := ${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2
+
TOOL_PATH   &nbsp;:= /usr/local/poky/eabi-glibc/bin
TOOL_PATH     := /usr/local/poky/eabi-glibc/bin
 
 
endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
 
endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
</pre>
+
</pre>  
ainsi que :
+
ainsi que&nbsp;:  
<pre>
+
<pre>ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")
ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")
 
 
CG_PREFIX = arm-linux-uclibcgnueabi-
 
CG_PREFIX = arm-linux-uclibcgnueabi-
 
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-linux-uclibcgnueabi-
 
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-linux-uclibcgnueabi-
Line 587: Line 518:
 
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-poky-linux-gnueabi-
 
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-poky-linux-gnueabi-
 
endif # ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")
 
endif # ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")
</pre>
+
</pre>  
Pour le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk, changer (et adapter si besoin) :
+
Pour le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk, changer (et adapter si besoin)&nbsp;:  
<pre>
+
<pre>#  ----------------------------------------------------------------------------
#  ----------------------------------------------------------------------------
 
 
#  Base directory for the DSP OS
 
#  Base directory for the DSP OS
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_INSTALL   := $(HOME)/TI
+
BASE_INSTALL   &nbsp;:= $(HOME)/TI
BASE_SABIOS     := $(BASE_INSTALL)/bios_5_41_03_17
+
BASE_SABIOS   &nbsp;:= $(BASE_INSTALL)/bios_5_41_03_17
BASE_BUILDOS   := $(BASE_SABIOS)/packages/ti/bios
+
BASE_BUILDOS   &nbsp;:= $(BASE_SABIOS)/packages/ti/bios
  
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
 
#  Base directory for the XDC tools
 
#  Base directory for the XDC tools
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
XDCTOOLS_DIR   := $(BASE_INSTALL)/xdctools_3_15_00_50
+
XDCTOOLS_DIR   &nbsp;:= $(BASE_INSTALL)/xdctools_3_15_00_50
  
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
 
#  Base for code generation tools - compiler, linker, archiver etc.
 
#  Base for code generation tools - compiler, linker, archiver etc.
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_CGTOOLS   := $(BASE_INSTALL)/TI_CGT_C6000_6.1.13
+
BASE_CGTOOLS   &nbsp;:= $(BASE_INSTALL)/TI_CGT_C6000_6.1.13
BASE_CGTOOLSBIN := $(BASE_CGTOOLS)/bin
+
BASE_CGTOOLSBIN&nbsp;:= $(BASE_CGTOOLS)/bin
</pre>
+
</pre>  
 
+
Aller ensuite dans le répertoire $DSPLINK/dsp/src et faire&nbsp;:  
Aller ensuite dans le répertoire $DSPLINK/dsp/src et faire :
+
<pre>make -s
 
+
</pre>  
<pre>
+
de même dans le répertoire $DSPLINK/gpp/src&nbsp;:  
make -s
+
<pre>make -s
</pre>
+
</pre>  
 
+
ce qui aura pour effet de compiler le module dsplinkk.ko (dans le répertoire $DSPLINK/gpp/export/BIN/Linux/OMAP3530/RELEASE)  
de même dans le répertoire $DSPLINK/gpp/src :
 
<pre>
 
make -s
 
</pre>
 
ce qui aura pour effet de compiler le module dsplinkk.ko (dans le répertoire $DSPLINK/gpp/export/BIN/Linux/OMAP3530/RELEASE)
 
  
 
Des programmes exemples se trouvent dans les répertoires $DSPLINK/dsp/src/samples et $DSPLINK/gpp/src/samples, à compiler avec  
 
Des programmes exemples se trouvent dans les répertoires $DSPLINK/dsp/src/samples et $DSPLINK/gpp/src/samples, à compiler avec  
<pre>
+
<pre>make
make
+
</pre>  
</pre>
+
=== ''CMEM'' ===
 
 
=== ''CMEM'' ===
 
  
 
'''NOTE:''' les versions 2.25 et 2.25.01.06 ont des soucis au niveau des ''ioctl'' [http://e2e.ti.com/support/arm174_microprocessors/omap_applications_processors/f/42/p/36278/126821.aspx#126821 voir ici], ce qui affecte notamment les manipulations de cache (writeback et invalidate). La version 2.25.02.08 est sensée corriger cela (à tester). Sinon, travailler sur les versions 2.24  
 
'''NOTE:''' les versions 2.25 et 2.25.01.06 ont des soucis au niveau des ''ioctl'' [http://e2e.ti.com/support/arm174_microprocessors/omap_applications_processors/f/42/p/36278/126821.aspx#126821 voir ici], ce qui affecte notamment les manipulations de cache (writeback et invalidate). La version 2.25.02.08 est sensée corriger cela (à tester). Sinon, travailler sur les versions 2.24  
  
 
+
<br> ''CMEM'', ou ''contiguous memory manager'' permet d'allouer de la mémoire partagée entre ''ARM'' et ''DSP''. Il fait partie des ''linuxutils'', à télécharger [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/index.html ici]. Aller dans le répertoire linuxutils_2_25_02_08/packages/ti/sdo/linuxutils/cmem et donner l'accès en écriture au fichier Rules.make&nbsp;:  
''CMEM'', ou ''contiguous memory manager'' permet d'allouer de la mémoire partagée entre ''ARM'' et ''DSP''. Il fait partie des ''linuxutils'', à télécharger [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/index.html ici]. Aller dans le répertoire linuxutils_2_25_02_08/packages/ti/sdo/linuxutils/cmem et donner l'accès en écriture au fichier Rules.make :
+
<pre>chmod +w Rules.make
<pre>
+
</pre>  
chmod +w Rules.make
+
Puis éditer ce fichier et changer (adapter si besoin)&nbsp;:  
</pre>
+
<pre># For "kernel_org" builds
Puis éditer ce fichier et changer (adapter si besoin) :
 
<pre>
 
# For "kernel_org" builds
 
 
MVTOOL_PREFIX=/usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-
 
MVTOOL_PREFIX=/usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-
  
Line 645: Line 565:
 
# For OMAP3530 2.6.29 Linux kernel
 
# For OMAP3530 2.6.29 Linux kernel
 
LINUXKERNEL_INSTALL_DIR=$(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2
 
LINUXKERNEL_INSTALL_DIR=$(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2
</pre>
+
</pre>  
 
+
Puis faire  
Puis faire
+
<pre>make release
<pre>
+
</pre>  
make release
+
pour compiler le module cmemk.ko (dans le réperoire ./src/module).  
</pre>
 
pour compiler le module cmemk.ko (dans le réperoire ./src/module).
 
 
 
=== ''Framework Components'' ===
 
  
Les ''Framework Components'' incluent entre autres les librairies ''DMAN3'' et ''ACPY3'', permettant les copies par ''DMA''. A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/FC/index.html ici] et à décompresser par exemple dans "$HOME/TI/framework_components_2_24_01".
+
=== ''Framework Components'' ===
  
 +
Les ''Framework Components'' incluent entre autres les librairies ''DMAN3'' et ''ACPY3'', permettant les copies par ''DMA''. A télécharger [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/FC/index.html ici] et à décompresser par exemple dans "$HOME/TI/framework_components_2_24_01".
  
=== ''Local Power Manager (LPM)'' ===
+
<br>
  
''LPM'' fait aussi partie des ''Linux Utilities'', mais ne semble plus intégré dans les nouvelles versions. Il se trouve avec les anciennes versions de ''linuxutils'', [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/linuxutils/old.html ici].
+
=== ''Local Power Manager (LPM)'' ===
  
''LPM'' permet de redémarrer le ''DSP'' à la volée. En effet, par défaut ''DSPLink'' garde dans la mémoire cache le programme exécuté par le ''DSP''. La même application peut donc être lancée plusieurs fois à la suite, par contre si une nouvelle application est lancée, il y aura plantage; d'où l'intérêt de ''LPM''.
+
''LPM'' fait aussi partie des ''Linux Utilities'', mais ne semble plus intégré dans les nouvelles versions. Il se trouve avec les anciennes versions de ''linuxutils'', [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_sb/targetcontent/linuxutils/old.html ici].  
  
Aller dans le répertoire local_power_manager_1_24/packages/ti/bios/power/modules/omap3530/lpm et éditer le Makefile pour changer:
+
''LPM'' permet de redémarrer le ''DSP'' à la volée. En effet, par défaut ''DSPLink'' garde dans la mémoire cache le programme exécuté par le ''DSP''. La même application peut donc être lancée plusieurs fois à la suite, par contre si une nouvelle application est lancée, il y aura plantage; d'où l'intérêt de ''LPM''.
  
<pre>
+
Aller dans le répertoire local_power_manager_1_24/packages/ti/bios/power/modules/omap3530/lpm et éditer le Makefile pour changer:
LINUXKERNEL_INSTALL_DIR = $(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2
+
<pre>LINUXKERNEL_INSTALL_DIR = $(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2
 
MVTOOL_PREFIX = /usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-
 
MVTOOL_PREFIX = /usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-
 
DSPLINK_REPO = $(HOME)/igep/dsplink_linux_1_63
 
DSPLINK_REPO = $(HOME)/igep/dsplink_linux_1_63
</pre>
+
</pre>  
 +
puis compiler
 +
<pre>make
 +
</pre>
 +
le module lpm_omap3530.ko sera fait dans le répertoire courent.
  
puis compiler
+
Les exécutables lpmON.x470uC et lpmOFF.x470uC sont déjà compilés et se trouvent dans les répertoires:
<pre>
 
make
 
</pre>
 
le module lpm_omap3530.ko sera fait dans le répertoire courent.
 
  
Les exécutables lpmON.x470uC et lpmOFF.x470uC sont déjà compilés et se trouvent dans les répertoires:
+
local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/debug/
  
local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/debug/
+
local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/release/  
  
local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/release/
+
=== Librairies  ===
  
=== Librairies ===
+
Les principales librairies sont les suivantes:
  
Les principales librairies sont les suivantes:
+
*[http://focus.ti.com/docs/toolsw/folders/print/sprc265.html dsplib]  
*[http://focus.ti.com/docs/toolsw/folders/print/sprc265.html dsplib]
+
*[http://focus.ti.com/docs/toolsw/folders/print/sprc264.html dsp image lib]  
*[http://focus.ti.com/docs/toolsw/folders/print/sprc264.html dsp image lib]
 
 
*[http://focus.ti.com/docs/toolsw/folders/print/sprc542.html IQ Math]
 
*[http://focus.ti.com/docs/toolsw/folders/print/sprc542.html IQ Math]
  
A noter, pour les dsplib v210, le lien Linux semble ne pas marcher. A partir de la version Windows, il faut changer le fichier C64x+DSPLIB/dsplib_v210/dsplib64plus.h. Tous les chemins relatifs sont en notation Windows "\" qu'il faut remplacer par des "/".
+
A noter, pour les dsplib v210, le lien Linux semble ne pas marcher. A partir de la version Windows, il faut changer le fichier C64x+DSPLIB/dsplib_v210/dsplib64plus.h. Tous les chemins relatifs sont en notation Windows "\" qu'il faut remplacer par des "/".  
 
 
  
 
<!-- pour loop fft, changer le fichier sources pour mettre le chemin des fichiers c de dsplib
 
<!-- pour loop fft, changer le fichier sources pour mettre le chemin des fichiers c de dsplib
changer aussi le chemin des .h dans tskloop.c -->
+
changer aussi le chemin des .h dans tskloop.c -->  
  
= Configurer ''DSPLINK'' pour la compilation de projets =
+
= Configurer ''DSPLINK'' pour la compilation de projets =
  
 
Cette partie explique comment rajouter les diverses librairies à l'environnement ''DSPLINK''  
 
Cette partie explique comment rajouter les diverses librairies à l'environnement ''DSPLINK''  
  
=== ''Includes'' ===
+
=== ''Includes'' ===
  
Éditer le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk pour rajouter les répertoires ''includes'':
+
Éditer le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk pour rajouter les répertoires ''includes'':  
 
+
<pre>#  ----------------------------------------------------------------------------
<pre>
 
#  ----------------------------------------------------------------------------
 
 
#  Base directory for include files
 
#  Base directory for include files
 
#  ----------------------------------------------------------------------------
 
#  ----------------------------------------------------------------------------
BASE_OSINC     := $(BASE_BUILDOS)/include
+
BASE_OSINC     &nbsp;:= $(BASE_BUILDOS)/include
BASE_CGTOOLSINC := $(BASE_CGTOOLS)/include
+
BASE_CGTOOLSINC&nbsp;:= $(BASE_CGTOOLS)/include
BASE_RTDXINC   := $(BASE_RTDX)/include/c6000
+
BASE_RTDXINC   &nbsp;:= $(BASE_RTDX)/include/c6000
BASE_PSLINC     := $(BASE_PSL)/include
+
BASE_PSLINC   &nbsp;:= $(BASE_PSL)/include
BASE_CSLINC     :=
+
BASE_CSLINC   &nbsp;:=
 
BASE_XDCINC := $(BASE_INSTALL)/xdctools_3_15_00_50/packages
 
BASE_XDCINC := $(BASE_INSTALL)/xdctools_3_15_00_50/packages
 
BASE_FCINC := $(BASE_INSTALL)/framework_components_2_24_01/packages
 
BASE_FCINC := $(BASE_INSTALL)/framework_components_2_24_01/packages
Line 720: Line 633:
 
BASE_IQMATHINC := $(BASE_INSTALL)/IQmath_v213/include
 
BASE_IQMATHINC := $(BASE_INSTALL)/IQmath_v213/include
  
OSINC_GENERIC   := $(BASE_OSINC)
+
OSINC_GENERIC &nbsp;:= $(BASE_OSINC)
OSINC_PLATFORM := $(BASE_CGTOOLSINC) $(BASE_RTDXINC) \
+
OSINC_PLATFORM &nbsp;:= $(BASE_CGTOOLSINC) $(BASE_RTDXINC) \
 
                   $(BASE_PSLINC) $(BASE_CSLINC)  $(BASE_XDCINC) $(BASE_FCINC) $(BASE_FCTOOLINC) $(BASE_IMGLIBINC) $(BASE_IQMATHINC)
 
                   $(BASE_PSLINC) $(BASE_CSLINC)  $(BASE_XDCINC) $(BASE_FCINC) $(BASE_FCTOOLINC) $(BASE_IMGLIBINC) $(BASE_IQMATHINC)
</pre>
+
</pre>  
Les variables OSINC_GENERIC et OSINC_PLATFORM permettent de définir les répertoires où ''DSPLINK'' cherchera les ''.h''.
+
Les variables OSINC_GENERIC et OSINC_PLATFORM permettent de définir les répertoires où ''DSPLINK'' cherchera les ''.h''.  
  
=== Librairies ===
+
=== Librairies ===
  
Par défaut, ''DSPLINK'' cherche les librairies dans les répertoires:
+
Par défaut, ''DSPLINK'' cherche les librairies dans les répertoires:  
<pre>
+
<pre>$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
 
 
$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
 
$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
</pre>
+
</pre>  
Il faut donc y copier les différentes libraires:
+
Il faut donc y copier les différentes libraires:  
<pre>
+
<pre>cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/debug/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/debug/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
 
 
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/release/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
 
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/release/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
 
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/acpy3/lib/debug/acpy3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
 
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/acpy3/lib/debug/acpy3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
Line 741: Line 652:
 
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
 
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
 
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
 
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
</pre>
+
</pre>  
 +
= Configure ''CodeBlocks'' for ''ARM'' =
  
= Configure ''CodeBlocks'' for ''ARM''=
+
This part explains how to setup ''CodeBlocks'' to develop programs using ''dsplink'' library.
  
This part explains how to setup ''CodeBlocks'' to develop programs using ''dsplink'' library.
+
Go to ''settings/compiler and debugger'' menu, choose ''GNU ARM GCC compiler'' as compiler. You should see the following window:
  
Go to ''settings/compiler and debugger'' menu, choose ''GNU ARM GCC compiler'' as compiler. You should see the following window:
+
[[Image:Settings.jpg|center|500px]]
  
[[Image:settings.jpg|center|500px]]
+
Select ''Search directories'' tab and ''Compiler''. Then add the following directories (and adapt it if necessary):  
 
+
<pre>/usr/local/poky/eabi-glibc/arm-none-linux-gnueabi/lib
Select ''Search directories'' tab and ''Compiler''. Then add the following directories (and adapt it if necessary):
 
<pre>
 
/usr/local/poky/eabi-glibc/arm-none-linux-gnueabi/lib
 
 
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux
 
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux
 
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/export/INCLUDE/Linux/OMAP3530/usr
 
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/export/INCLUDE/Linux/OMAP3530/usr
</pre>
+
</pre>  
Which should give the following result:
+
Which should give the following result:  
 +
 
 +
[[Image:Compiler.jpg|center|500px]]
  
[[Image:compiler.jpg|center|500px]]
+
In ''Search directories'', now choose ''Linker'' and add the following directories:
 +
<pre>$(HOME)/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux
 +
</pre>
 +
Which should give the following result:  
  
In ''Search directories'', now choose ''Linker'' and add the following directories:
+
[[Image:Linker.jpg|center|500px]]
<pre>
 
$(HOME)/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux
 
</pre>
 
Which should give the following result:
 
  
[[Image:linker.jpg|center|500px]]
+
Choose ''Toolchain executables'' tab and ''Compiler's installations directory'':
 +
<pre>/usr/local/poky/eabi-glibc/
 +
</pre>
 +
Then, enter the ''Program Files'' as follows:  
  
Choose ''Toolchain executables'' tab and ''Compiler's installations directory'':
+
[[Image:Executables.jpg|center|500px]]
<pre>
 
/usr/local/poky/eabi-glibc/
 
</pre>
 
Then, enter the ''Program Files'' as follows:
 
  
[[Image:executables.jpg|center|500px]]
+
= References =
  
= References=
+
[http://wiki.myigep.com/trac/wiki/HowToGetThePokyLinuxDistribution How To Get The Poky Linux Distribution]  
[http://wiki.myigep.com/trac/wiki/HowToGetThePokyLinuxDistribution How To Get The Poky Linux Distribution]
 
  
[http://www.pokylinux.org/doc/poky-handbook.html Poky Handbook]
+
[http://www.pokylinux.org/doc/poky-handbook.html Poky Handbook]  
  
[http://wiki.myigep.com/trac/wiki/HowToCrossCompileTheLinuxKernel How To Cross Compile The Linux Kernel]
+
[http://wiki.myigep.com/trac/wiki/HowToCrossCompileTheLinuxKernel How To Cross Compile The Linux Kernel]  
  
[http://wiki.myigep.com/trac/wiki/HowToUpgradeTheFactoryFirmware How To Upgrade The Factory Firmware]
+
[http://wiki.myigep.com/trac/wiki/HowToUpgradeTheFactoryFirmware How To Upgrade The Factory Firmware]  
  
 
[http://wiki.davincidsp.com/index.php/Building_DSPLink Building DSPLink]
 
[http://wiki.davincidsp.com/index.php/Building_DSPLink Building DSPLink]

Revision as of 22:36, 29 March 2010

This tutorial was written for the igep revB board, but it is transposable to other OMAP3530 boards (above all for the DSP part). It is a summary (with some adaptations) of several tutorials found on Internet (see References). All files will be installed in the $HOME directory.

This tutorial is a translation of a French tutorial we wrote on our robotic web site. Sorry for the English, feel free to correct mistakes.

Rootfs

This section describes how to obtain the Poky distribution. This is the distribution shipped with the igep boad; it is based on Open Embedded.

The first thing to do is set Bash as default sh shell:

sudo dpkg-reconfigure dash

answer no to the question. Thus, "/bin/sh" will point towards "/bin/bash" (and not "/bin/dash"). Then, some kernels settings have to be changed. Edit the file "/etc/sysctl.conf" as root and set :

vm.mmap_min_addr = 0

then, to take the modification into account:

sudo sysctl -p

Some additional packages need to be installed to satisfy bitbake dependencies. First, add the following repositories to "/etc/apt/sources.list" :

deb http://debian.o-hand.com etch/
deb http://debian.o-hand.com unstable/
deb http://debian.o-hand.com feisty/
deb http://debian.o-hand.com gutsy/
deb http://debian.o-hand.com hardy/

Update the data base and install the following packages:

sudo apt-get update
sudo aptitude install python-psyco hgsvn qemu poky-depends poky-scripts

Then, download and decompress the last stable version of Poky:

mkdir -p $HOME/igep/poky
cd $HOME/igep/poky
wget http://pokylinux.org/releases/poky-purple-3.2.tar.bz2
tar -xjf poky-purple-3.2.tar.bz2

The configuration file of Poky is located in the directory $HOME/igep/poky/build/conf :

cd build/conf
nano local.conf

And paste the modified version for the igep board:

# Where to cache the files Poky downloads
DL_DIR ?= "${OEROOT}/sources"
BBFILES += "\
    ${OEROOT}/meta/packages/*/*.bb \
    ${OEROOT}/meta-moblin/packages/*/*.bb"

BBFILE_COLLECTIONS = "normal moblin"
BBFILE_PATTERN_normal = "^${OEROOT}/meta/"
BBFILE_PATTERN_moblin = "^${OEROOT}/meta-moblin/"

BBFILE_PRIORITY_normal = "5"
BBFILE_PRIORITY_moblin = "5"

# Uncomment and set to allow bitbake to execute multiple tasks at once.
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
# be appropriate.
BB_NUMBER_THREADS = "4"
# Also, make can be passed flags so it run parallel threads e.g.:
# PARALLEL_MAKE = "-j 2"

# The machine to target
MACHINE ?= "igep0020b"

TARGET_FPU_arm ?= "hard"

# Other supported machines
#MACHINE ?= "qemux86"
#MACHINE ?= "qemuarm"
#MACHINE ?= "c7x0"
#MACHINE ?= "akita"
#MACHINE ?= "spitz"
#MACHINE ?= "nokia770"
#MACHINE ?= "nokia800"
#MACHINE ?= "fic-gta01"
#MACHINE ?= "bootcdx86"
#MACHINE ?= "cm-x270"
#MACHINE ?= "em-x270"
#MACHINE ?= "htcuniversal"
#MACHINE ?= "mx31ads"
#MACHINE ?= "mx31litekit"
#MACHINE ?= "mx31phy"
#MACHINE ?= "netbook"
#MACHINE ?= "zylonite"

DISTRO ?= "poky"
# For bleeding edge / experimental / unstable package versions
# DISTRO ?= "poky-bleeding"

# Poky has various extra metadata collections (openmoko, extras).
# To enable these, uncomment all (or some of) the following lines:
# BBFILES = "\
#    ${OEROOT}/meta/packages/*/*.bb \
#    ${OEROOT}/meta-extras/packages/*/*.bb \
#    ${OEROOT}/meta-openmoko/packages/*/*.bb \
#    ${OEROOT}/meta-moblin/packages/*/*.bb \
#    "
# BBFILE_COLLECTIONS = "normal extras openmoko moblin"
# BBFILE_PATTERN_normal = "^${OEROOT}/meta/"
# BBFILE_PATTERN_extras = "^${OEROOT}/meta-extras/"
# BBFILE_PATTERN_openmoko = "^${OEROOT}/meta-openmoko/"
# BBFILE_PATTERN_moblin = "^${OEROOT}/meta-moblin/"
# BBFILE_PRIORITY_normal = "5"
# BBFILE_PRIORITY_extras = "5"
# BBFILE_PRIORITY_openmoko = "5"
# BBFILE_PRIORITY_moblin = "5"

BBMASK = ""

# EXTRA_IMAGE_FEATURES allows extra packages to be added to the generated images
# (Some of these are automatically added to certain image types)
# "dbg-pkgs"     - add -dbg packages for all installed packages
#                  (adds symbol information for debugging/profiling)
# "dev-pkgs"     - add -dev packages for all installed packages
#                  (useful if you want to develop against libs in the image)
# "tools-sdk"      - add development tools (gcc, make, pkgconfig etc.)
# "tools-debug"    - add debugging tools (gdb, strace)
# "tools-profile"  - add profiling tools (oprofile, exmap, lttng valgrind (x86 only))
# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.)
# "debug-tweaks"   - make an image for suitable of development
#                    e.g. ssh root access has a blank password
# There are other application targets too, see meta/classes/poky-image.bbclass
# and meta/packages/tasks/task-poky.bb for more details.

EXTRA_IMAGE_FEATURES = "tools-debug tools-profile tools-testapps debug-tweaks"

# The default IMAGE_FEATURES above are too large for the mx31phy and
# c700/c750 machines which have limited space. The code below limits
# the default features for those machines.
EXTRA_IMAGE_FEATURES_c7x0 = "tools-testapps debug-tweaks"
EXTRA_IMAGE_FEATURES_mx31phy = "debug-tweaks"
EXTRA_IMAGE_FEATURES_mx31ads = "tools-testapps debug-tweaks"

# A list of packaging systems used in generated images
# The first package type listed will be used for rootfs generation
# include 'package_deb' for debs
# include 'package_ipk' for ipks
#PACKAGE_CLASSES ?= "package_deb package_ipk"
PACKAGE_CLASSES ?= "package_ipk"

# POKYMODE controls the characteristics of the generated packages/images by
# telling poky which type of toolchain to use.
#
# Options include several different EABI combinations and a compatibility
# mode for the OABI mode poky previously used.
#
# The default is "eabi"
# Use "oabi" for machines with kernels < 2.6.18 on ARM for example.
# Use "external-MODE" to use the precompiled external toolchains where MODE
# is the type of external toolchain to use e.g. eabi.
# POKYMODE = "external-eabi"

# Uncomment this to specify where BitBake should create its temporary files.
# Note that a full build of everything in OpenEmbedded will take GigaBytes of hard
# disk space, so make sure to free enough space. The default TMPDIR is
# <build directory>/tmp
TMPDIR = "${OEROOT}/build/tmp-${MACHINE}"


# Uncomment this if you are using the Openedhand provided qemu deb - see README
ASSUME_PROVIDED += "qemu-native"

# Comment this out if you don't have a 3.x gcc version available and wish
# poky to build one for you. The 3.x gcc is required to build qemu-native.
#ASSUME_PROVIDED += "gcc3-native"

# Uncomment these two if you want BitBake to build images useful for debugging.
# DEBUG_BUILD = "1"
# INHIBIT_PACKAGE_STRIP = "1"

# Uncomment these to build a package such that you can use gprof to profile it.
# NOTE: This will only work with 'linux' targets, not
# 'linux-uclibc', as uClibc doesn't provide the necessary
# object files.  Also, don't build glibc itself with these
# flags, or it'll fail to build.
#
# PROFILE_OPTIMIZATION = "-pg"
# SELECTED_OPTIMIZATION = "${PROFILE_OPTIMIZATION}"
# LDFLAGS =+ "-pg"

# Uncomment this if you want BitBake to emit debugging output
# BBDEBUG = "yes"
# Uncomment this if you want BitBake to emit the log if a build fails.
BBINCLUDELOGS = "yes"

# Specifies a location to search for pre-generated tarballs when fetching
# a cvs:// or svn:// URI.  Uncomment this, if you do not want to pull directly
# from CVS or Subversion
SRC_TARBALL_STASH = "http://pokylinux.org/sources/"

# Set this if you wish to make pkgconfig libraries from your system available
# for native builds. Combined with extra ASSUME_PROVIDEDs this can allow
# native builds of applications like oprofileui-native (unsupported feature).
#EXTRA_NATIVE_PKGCONFIG_PATH = ":/usr/lib/pkgconfig"
#ASSUME_PROVIDED += "gtk+-native libglade-native"

ENABLE_BINARY_LOCALE_GENERATION = "0"

# The architecture to build SDK items for, by setting this you can build SDK
# packages for architectures other than the host i.e. building i586 packages
# on an x86_64 host.
# Supported values are i586 and x86_64
SDKMACHINE="i586"

The following section needs to be adapted to the number of CPU the host machine has:

# Uncomment and set to allow bitbake to execute multiple tasks at once.
# For a quadcore, BB_NUMBER_THREADS = "4", PARALLEL_MAKE = "-j 4" would
# be appropriate.
# BB_NUMBER_THREADS = "2"
# Also, make can be passed flags so it run parallel threads e.g.:
# PARALLEL_MAKE = "-j 2"

The build environment needs to be setup by the following command:

cd ../..
source poky-init-build-env

A target can be built using:

bitbake <target>

there is a lot of targets, which can be an image (take a look at the "meta/packages/images/" directory) or more simply a recipe corresponding to a software. A detailed list of images can be found on the Poky Handbook. To build an image without X11 server:

bitbake poky-image-base

This step is very long (several hours) and take a lot of space (like 16 gigas) on the host's hard disk. If you are behind a proxy, take a look at this part of Poky's FAQ.

If everything compiles well, the resulting image (rootfs and kernel) will be placed in the directory:

tmp-igep0020b/deploy/images/

and .ipk packages in:

tmp-igep0020b/deploy/ipk/

We will see in section Boot on rootfs and kernel how to use it. Yet, bitbake will download by default the kernel "linux-omap-2.6.28.10-igep0020b-0" which is not the last one provided by ISEE. See section Kernel compilation to compile another version.

TODO: modify recipes to download another kernel version

Cross toolchain for the ARM

Aparently, there is a bug in one of Poky's recipes, which implies that the cross toolchain doesn't include automatically the C++ headers, see this thread. A patch has been proposed; to apply it :

cd $HOME/igep/poky
wget http://lists.o-hand.com/poky/att-1420/fix-gxx-include-dir.patch
patch -p1 < fix-gxx-include-dir.patch

The cross toolchain can be built using bitbake:

source poky-init-build-env
bitbake meta-toolchain-sdk

The result will be placed in the directory:

 tmp-igep0020b/deploy/sdk/

as an archive to decompress in the directory "/usr/local/poky".

In order to cross compile code for the ARM, the following script needs to be run to set up paths:

source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi

Kernel compilation

Currently, the last stable kernel provided by ISEE is "linux-omap-2.6.28.10-igep0020b-2". Check in the download section of www.myigep.com which is the last one. More recent versions (but unstable) can be downloaded on the git of ISEE.

Kernel compilation under bitbake

Kernel compilation outside bitbake

First, download the kernel sources:

cd $HOME/igep
wget http://downloads.myigep.com/sources/kernel/linux-omap-2.6.28.10-igep0020b-2.tar.gz
tar -xzf linux-omap-2.6.28.10-igep0020b-2.tar.gz
cd linux-omap-2.6.28.10-igep0020b-2

Configure the kernel:

source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- igep0020b_defconfig
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- menuconfig

The last line is only needed if you want to customize the kernel.

To compile kernel and modules:

make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- uImage modules

The resulting image is placed in "arch/arm/boot" directory.

We will see in the section Boot on the rootfs and the kernel how to use kernel and modules.

Boot on the rootfs and the kernel

There are several methods to do it. For developing purposes, the easiest way is to boot over network, which avoid flashing operations or coping on the memory card. Yet, these two solutions are essentials for applications where the board need to be independent from the host computer.

Over network

Two servers are needed. The NFS (Network File System) server allows the target to accede its rootfs by the network. The TFTP (Trivial File Transfer Protocol) server allows the target to download the kernel over network. Thus, UBoot needs to be correctly setup to boot on the correct files. To do this, plug a serial cable on the board (115200n8) and stop UBoot by pressing a key. The environment variable of UBoot we need to change are:

  • serverip: the server's IP address, need to be on the 192.168.254.x subred (except if you change the board address, which is not explained here). By default, the server's IP address is 192.168.254.10.
  • distro: the distribution's name, by default poky.
  • machine: the card's name, by default igep0020b.
  • project: the project's name, that is to say the rootfs generated previously.

To change a variable, use the command setenv. Thus, to change the project's name and use the one we have just made, set:

setenv project poky-image-base

Then, to boot:

run bootcmd

which will execute the contents of the bootcmd variable. The 'printenvcommand allow to show the content of a variable; for example:

printenv bootcmd

returns by default:

run mmc-boot; run nfs-boot; run onenand-boot

That is to say the board will first check if a memory card is present to boot with it. If memory card is not present, the board will newt ping the server to boot over network. If server does not answer, the board will boot on the flash. Take a look at mmc-boot, nfs-boot and onenand-boot variables for more details. In addition, the factory settings of UBoot are given here.

In order to save UBoot environment variables in the flash, do:

saveenv

which will avoid to reenter it every time...

Once <serverip>, <distro>, <project>, and <machine> variables setup, UBoot will search on the server of address <serverip>:

  • a kernel image uImage in the directory "/srv/tftp/<distro>/<project>/<machine>" accessible by TFTP.
  • a rootfs in the directory "/srv/nfs/<distro>/<project>/<machine>" accessible by NFS.

We assume now that <distro>=poky, <project>=poky-image-base and <machine>=igep0020b.

Thus, create the following directories on the host:

sudo mkdir -p /srv/nfs/poky/poky-image-base/igep0020b
sudo mkdir -p /srv/tftp/poky/poky-image-base/igep0020b

Next, copy the kernel. If it was made outside bitbake:

sudo cp $HOME/igep/linux-omap-2.6.28.10-igep0020b-2/arch/arm/boot/uImage /srv/tftp/poky/poky-image-base/igep0020b/

or if it was made with the rootfs or underbitbake:

sudo cp $HOME/igep/poky/build/tmp-igep0020b/deploy/images/uImage /srv/tftp/poky/poky-image-base/igep0020b/

Next, install the rootfs in the good directory:

pushd /srv/nfs/poky/poky-image-base/igep0020b
sudo cpio -idm< $HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.cpio 
popd

If kernel was built outside bitbake, install kernel modules in the rootfs as follows:

cd $HOME/igep/linux-omap-2.6.28.10-igep0020b-2
source /usr/local/poky/eabi-glibc/environment-setup-arm-poky-linux-gnueabi
make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules_install INSTALL_MOD_PATH=/srv/nfs/poky/poky-image-base/igep0020b

Finally, install the two servers on host:

sudo apt-get install tftpd nfs-kernel-server

By default, the TFTP server shares the "/srv/tftp" directory, which is the one we are using. If necessary, you can change this by editing the "/etc/inetd.conf" file :

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

The configuration file of NFS server is "/etc/exports". Add the following line for each rootfs :

# Poky image rootfs
/srv/nfs/<distro>/<project>/<machine>       <target_ip>(rw,no_root_squash,no_subtree_check,sync)

where <target_ip> is the ip address of the target. By default, igep address is 192.168.254.254. It is also possible to put * to allow a wider range of addresses. In our case, write :

/srv/nfs/poky/poky-image-base/igep0020b       192.168.254.254(rw,no_root_squash,no_subtree_check,sync)

Remember execute the command:

$ exportfs -a 

Every time that you modify/update the file /etc/exports.

Copy kernel and rootfs in flash memory

Copy can be done either from uboot or linux. To copy the rootfs, a jffs2 file is needed. If you do not need any modification to the one created previously, you can jump next step. If you have made changes to the rootfs (for example when using it for NFS boot), you will have to build the jffs2 file from the rootfs directory.

Create the jffs2 file

The following package needs to be installed to create the jffs2 file:

sudo apt-get install mtd-utils

Then use the command:

mkfs.jffs2 -r <root file system> -e <erase block size> -o <output file> 

where <root file system> is the path to the directory to copy (ie /srv/nfs/poky/poky-image-base/igep0020b), <erase block size> is the block size to erase in KB and <output file> name of the output file. Block size can be seen with the following command:

cat /proc/mtd

On igep, it returns:

dev:    size   erasesize  name
mtd0: 00080000 00040000 "X-Loader"
mtd1: 00180000 00040000 "U-Boot"
mtd2: 00080000 00040000 "U-Boot Env"
mtd3: 00300000 00040000 "Kernel"
mtd4: 1fa80000 00040000 "File System"

Thus, the size is 0x40000=265KB.

Copy from uboot

Copy from linux

To do this, you will have to boot the card from nfs or memory card; but not from flash.

Partitions can be seen with the following command:

cat /proc/mtd

On igep, it returns:

dev:    size   erasesize  name
mtd0: 00080000 00040000 "X-Loader"
mtd1: 00180000 00040000 "U-Boot"
mtd2: 00080000 00040000 "U-Boot Env"
mtd3: 00300000 00040000 "Kernel"
mtd4: 1fa80000 00040000 "File System"

To copy the kernel, erase the corresponding memory area before doing the copy:

flash_eraseall /dev/mtd3
nandwrite -p /dev/mtd3 uImage

same thing for the rootfs

flash_eraseall /dev/mtd4
nandwrite -p /dev/mtd4 rootfs.jffs2

Note that if you are using the rootfs built previously, the corresponding file should be located there:

$HOME/igep/poky/build/tmp-igep0020b/deploy/images/poky-image-base-igep0020b.jffs2

And now reboot. In case of errors (such as bad crc on the kernel for example), it is necessary to reflash all, see this.

Copy kernel and rootfs in memory card

Chaine de développement croisée DSP

Note: certains des outils de cette section nécessitent un compte sur le site de TI pour pouvoir les télécharger. La page principale des téléchargements est celle-ci.

Code generation tools

TI CGT est le cross compilateur pour le DSP. Récupérer la dernière version ici et installer (par exemple dans le répertoire $HOME/TI/TI_CGT).

DSP BIOS

DSP BIOS est le système d'exploitation résidant dans le DSP. A télécharger ici et installer (par exemple dans le répertoire $HOME/TI/BIOS).

XDC Tools

A télécharger ici et installer (par exemple dans le répertoire '$HOME/TI/xdctools).

DSP Link

DSPLink permet la communication entre ARM et DSP. A télécharger ici. Décompresser le par exemple dans le répertoire $HOME/igep/dsplink.

Ajouter une variable d'environnement DSPLINK contenant le chemin du répertoire de DSPLINK, par exemple en ajoutant au .bashrc la ligne suivante: (penser à faire un log out/log in ensuite)

export DSPLINK=$HOME/igep/dsplink_linux_1_63/dsplink

aller dans le répertoire $(DSPLINK)/config/bin et lancer :

perl dsplinkcfg.pl --platform=OMAP3530 --nodsp=1 --dspcfg_0=OMAP3530SHMEM --dspos_0=DSPBIOS5XX --gppos=OMAPLSP --comps=PONSLRMC

pour configurer DSPLINK. Pour comprendre ce que fait chacune de ces options, lancer simplement :

perl dsplinkcfg.pl

et ajouter les options au fur et à mesure. Si tout se passe bien, le message suivant devrait apparaitre :

Please edit the following files for toolchains, kernel sources, etc changes.
GPP side distribution file: $DSPLINK/make/Linux/omap3530_2.6.mk
GPP side distribution file: $DSPLINK/gpp/src/Rules.mk
DSP side distribution file: $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk

ce sont les fichiers à éditer pour adapter à notre configuration.

Pour le fichier $DSPLINK/make/Linux/omap3530_2.6.mk, changer (et adapter si besoin) les valeurs suivantes:

#   ============================================================================
#   Set the values of necessary variables to be used for the OS.
#   ============================================================================

#   ----------------------------------------------------------------------------
#   Base directory for the GPP OS
#   ----------------------------------------------------------------------------
BASE_BUILDOS    :=${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2

#   ----------------------------------------------------------------------------
#   Base for toolchain
#   ----------------------------------------------------------------------------
BASE_TOOLCHAIN  := /usr/local/poky/eabi-glibc

#   ----------------------------------------------------------------------------
#   Base directory for include files provided by GPP OS
#   ----------------------------------------------------------------------------
BASE_OSINC      := $(BASE_BUILDOS)/include

OSINC_GENERIC   := $(BASE_OSINC)
OSINC_PLATFORM  := $(BASE_TOOLCHAIN)/lib/gcc/arm-poky-linux-gnueabi/4.3.3/include
OSINC_TARGET    := $(BASE_TOOLCHAIN)/arm-poky-linux-gnueabi/libc/usr/include

#   ============================================================================
#   COMPILER
#   ============================================================================

#   ----------------------------------------------------------------------------
#   Name of the compiler
#   ----------------------------------------------------------------------------
COMPILER        := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc
LD              := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ld

CROSS_COMPILE   := arm-poky-linux-gnueabi-
export CROSS_COMPILE

#   ============================================================================
#   ARCHIVER2 - This denotes the archiver.
#   ============================================================================
ARCHIVER        := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-ar

#   ============================================================================
#   LINKER - The compiler is used for linking purpose as well.
#   ============================================================================
LINKER      := $(BASE_CGTOOLS)/arm-poky-linux-gnueabi-gcc

Pour le fichier $DSPLINK/gpp/src/Rules.mk, changer (et adapter si besoin) :

ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
KERNEL_DIR    := ${HOME}/igep/linux-omap-2.6.28.10-igep0020b-2
TOOL_PATH     := /usr/local/poky/eabi-glibc/bin
endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")

ainsi que :

ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")
CG_PREFIX = arm-linux-uclibcgnueabi-
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-linux-uclibcgnueabi-
else
CG_PREFIX = arm-poky-linux-gnueabi-
MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(TOOL_PATH)/arm-poky-linux-gnueabi-
endif # ifeq ("$(TI_DSPLINK_GPPOSPREFIX)", "uc")

Pour le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk, changer (et adapter si besoin) :

#   ----------------------------------------------------------------------------
#   Base directory for the DSP OS
#   ----------------------------------------------------------------------------
BASE_INSTALL    := $(HOME)/TI
BASE_SABIOS     := $(BASE_INSTALL)/bios_5_41_03_17
BASE_BUILDOS    := $(BASE_SABIOS)/packages/ti/bios

#   ----------------------------------------------------------------------------
#   Base directory for the XDC tools
#   ----------------------------------------------------------------------------
XDCTOOLS_DIR    := $(BASE_INSTALL)/xdctools_3_15_00_50

#   ----------------------------------------------------------------------------
#   Base for code generation tools - compiler, linker, archiver etc.
#   ----------------------------------------------------------------------------
BASE_CGTOOLS    := $(BASE_INSTALL)/TI_CGT_C6000_6.1.13
BASE_CGTOOLSBIN := $(BASE_CGTOOLS)/bin

Aller ensuite dans le répertoire $DSPLINK/dsp/src et faire :

make -s

de même dans le répertoire $DSPLINK/gpp/src :

make -s

ce qui aura pour effet de compiler le module dsplinkk.ko (dans le répertoire $DSPLINK/gpp/export/BIN/Linux/OMAP3530/RELEASE)

Des programmes exemples se trouvent dans les répertoires $DSPLINK/dsp/src/samples et $DSPLINK/gpp/src/samples, à compiler avec

make

CMEM

NOTE: les versions 2.25 et 2.25.01.06 ont des soucis au niveau des ioctl voir ici, ce qui affecte notamment les manipulations de cache (writeback et invalidate). La version 2.25.02.08 est sensée corriger cela (à tester). Sinon, travailler sur les versions 2.24


CMEM, ou contiguous memory manager permet d'allouer de la mémoire partagée entre ARM et DSP. Il fait partie des linuxutils, à télécharger ici. Aller dans le répertoire linuxutils_2_25_02_08/packages/ti/sdo/linuxutils/cmem et donner l'accès en écriture au fichier Rules.make :

chmod +w Rules.make

Puis éditer ce fichier et changer (adapter si besoin) :

# For "kernel_org" builds
MVTOOL_PREFIX=/usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-

# Equivalent path for uClibc compiler tools
UCTOOL_PREFIX=/usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-

# For OMAP3530 2.6.29 Linux kernel
LINUXKERNEL_INSTALL_DIR=$(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2

Puis faire

make release

pour compiler le module cmemk.ko (dans le réperoire ./src/module).

Framework Components

Les Framework Components incluent entre autres les librairies DMAN3 et ACPY3, permettant les copies par DMA. A télécharger ici et à décompresser par exemple dans "$HOME/TI/framework_components_2_24_01".


Local Power Manager (LPM)

LPM fait aussi partie des Linux Utilities, mais ne semble plus intégré dans les nouvelles versions. Il se trouve avec les anciennes versions de linuxutils, ici.

LPM permet de redémarrer le DSP à la volée. En effet, par défaut DSPLink garde dans la mémoire cache le programme exécuté par le DSP. La même application peut donc être lancée plusieurs fois à la suite, par contre si une nouvelle application est lancée, il y aura plantage; d'où l'intérêt de LPM.

Aller dans le répertoire local_power_manager_1_24/packages/ti/bios/power/modules/omap3530/lpm et éditer le Makefile pour changer:

LINUXKERNEL_INSTALL_DIR = $(HOME)/igep/linux-omap-2.6.28.10-igep0020b-2
MVTOOL_PREFIX = /usr/local/poky/eabi-glibc/bin/arm-poky-linux-gnueabi-
DSPLINK_REPO = $(HOME)/igep/dsplink_linux_1_63

puis compiler

make

le module lpm_omap3530.ko sera fait dans le répertoire courent.

Les exécutables lpmON.x470uC et lpmOFF.x470uC sont déjà compilés et se trouvent dans les répertoires:

local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/debug/

local_power_manager_1_24/packages/ti/bios/power/test/bin/ti_platforms_evm3530/linux/release/

Librairies

Les principales librairies sont les suivantes:

A noter, pour les dsplib v210, le lien Linux semble ne pas marcher. A partir de la version Windows, il faut changer le fichier C64x+DSPLIB/dsplib_v210/dsplib64plus.h. Tous les chemins relatifs sont en notation Windows "\" qu'il faut remplacer par des "/".


Configurer DSPLINK pour la compilation de projets

Cette partie explique comment rajouter les diverses librairies à l'environnement DSPLINK

Includes

Éditer le fichier $DSPLINK/make/DspBios/c64xxp_5.xx_linux.mk pour rajouter les répertoires includes:

#   ----------------------------------------------------------------------------
#   Base directory for include files
#   ----------------------------------------------------------------------------
BASE_OSINC      := $(BASE_BUILDOS)/include
BASE_CGTOOLSINC := $(BASE_CGTOOLS)/include
BASE_RTDXINC    := $(BASE_RTDX)/include/c6000
BASE_PSLINC     := $(BASE_PSL)/include
BASE_CSLINC     :=
BASE_XDCINC	:= $(BASE_INSTALL)/xdctools_3_15_00_50/packages
BASE_FCINC	:= $(BASE_INSTALL)/framework_components_2_24_01/packages
BASE_FCTOOLINC	:= $(BASE_INSTALL)/framework_components_2_24_01/fctools/packages
BASE_IMGLIBINC	:= $(BASE_INSTALL)/imglib_v201/include
BASE_IQMATHINC	:= $(BASE_INSTALL)/IQmath_v213/include

OSINC_GENERIC   := $(BASE_OSINC)
OSINC_PLATFORM  := $(BASE_CGTOOLSINC) $(BASE_RTDXINC) \
                   $(BASE_PSLINC) $(BASE_CSLINC)  $(BASE_XDCINC) $(BASE_FCINC) $(BASE_FCTOOLINC) $(BASE_IMGLIBINC) $(BASE_IQMATHINC)

Les variables OSINC_GENERIC et OSINC_PLATFORM permettent de définir les répertoires où DSPLINK cherchera les .h.

Librairies

Par défaut, DSPLINK cherche les librairies dans les répertoires:

$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
$DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/

Il faut donc y copier les différentes libraires:

cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/debug/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/dman3/lib/release/dman3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/acpy3/lib/debug/acpy3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
cp $HOME/TI/framework_components_2_24_01/packages/ti/sdo/fc/acpy3/lib/release/acpy3.a64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/DEBUG/
cp $HOME/TI/imglib_v201/lib/target/imglib2.l64P $DSPLINK/dsp/BUILD/OMAP3530_0/EXPORT/RELEASE/

Configure CodeBlocks for ARM

This part explains how to setup CodeBlocks to develop programs using dsplink library.

Go to settings/compiler and debugger menu, choose GNU ARM GCC compiler as compiler. You should see the following window:

Settings.jpg

Select Search directories tab and Compiler. Then add the following directories (and adapt it if necessary):

/usr/local/poky/eabi-glibc/arm-none-linux-gnueabi/lib
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux
$(HOME)/igep/dsplink_linux_1_63/dsplink/gpp/export/INCLUDE/Linux/OMAP3530/usr

Which should give the following result:

Compiler.jpg

In Search directories, now choose Linker and add the following directories:

$(HOME)/dsplink_linux_1_63/dsplink/gpp/inc/sys/Linux

Which should give the following result:

Linker.jpg

Choose Toolchain executables tab and Compiler's installations directory:

/usr/local/poky/eabi-glibc/

Then, enter the Program Files as follows:

Executables.jpg

References

How To Get The Poky Linux Distribution

Poky Handbook

How To Cross Compile The Linux Kernel

How To Upgrade The Factory Firmware

Building DSPLink