User Tools

Site Tools


embedded_software

Introduction

CoBo utilizes a dual PowerPC 440 processor inside the Virtex-5. CoBo embedded software currently runs on VxWorks 6.3 or Linux 3.9.0. IRFU is responsible for VxWorks development. In this page, the focus is on the Linux embedded software, which is compiled and built using standard open source cross compilers.

Two operating systems have been tested

  • RedHat Based. Fedora 19 64-bit (Setup)
  • Debian Based. Ubuntu 12.04 32-bit (Setup)

Environment

For CoBo we could use crosstool-ng and buildroot or ELDK as a toolchain.

CrossTool-NG

This tool will generate the powerpc compatible cross platform compilers.

mkdir -p $HOME/dev
cd $HOME/dev
wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.18.0.tar.bz2
tar -jvxf crosstool-ng-1.18.0.tar.bz2
cd crosstool-ng-1.18.0
./configure --prefix=$HOME/dev/ct-ng
make install
PATH=$PATH:$HOME/dev/ct-ng
mkdir -p $HOME/dev/ct-wd
cd $HOME/dev/ct-wd

If you are running Fedora 19 then download :.config and save it in the ct-wd as .config

If you are running Ubuntu 12.04 then download .config and save it in ct-wd as .config

Now type the following and take a coffee break.

ct-ng build

The cross compiler should be in $HOME/dev/x-tools

BuildRoot

As the name indicates this package will create the root file system. I listed in environment because it also creates some useful tools for the host system.

cd $HOME/dev
wget http://buildroot.uclibc.org/downloads/buildroot-2013.05.tar.bz2
tar -jvxf buildroot-2013.05.tar.bz2
cd buildroot-2013.05

Download :.config and save it in buildroot directory as .config

Now type the following and take a walk

make

This should generate a RAM disk, squashfs, jffs2, etc images. We will utilize the tar file system as an NFS rootfs for testing purposes.

Root File System

Initrd RAMDISK

TBR

NFS root file system

cd $HOME/dev
mkdir coborootfs
sudo tar -C coborootfs -xf $HOME/dev/buildroot-2013.05/output/images/rootfs.tar
sudo mkdir -p coborootfs/usr/local
# chown must be reverted back to root later
sudo chown -R $USER:$USER coborootfs/usr/local
# sudo chown -R root:root coborootfs/usr/local

Linux Kernel

We will use the Xilinx Linux git repo. Currently, xilinx-v14.6.02 tag generates a linux 3.9.0 image.

git clone http://github.com/Xilinx/linux-xlnx.git
cd linux-xlnx
git describe
#xilinx-v14.6.02
# if that is not the tag then type the following
# git checkout tags/xilinx-v14.6.02
git checkout -b myChanges

We will now patch the Linux kernel to turn off autoneg on 1000base-x to support Vadatech 10GbE switch. We will also add a nice boot parameter to allow us to change the MTU of the ethernet interface on boot. This is very useful when using NFS root file system. Download :cobo.patch and save it in linux-xlnx as cobo.patch then

git apply --ignore-space-change --ignore-whitespace --check cobo.patch

Now download the Linux Kernel Configuration :.config and save it as .config in linux-xlnx Next download the cobo NFS device tree :virtex440-cobo02_nfs.dts and save it in linux-xlnx/arch/powerpc/boot/dts If a ramdisk is to be merged with the kernel then download :virtex440-cobo02_ram.dts

It is important that you edit the dts file boot args to match your NFS root file system. Note that mem=128M memmap=128M@128M forces linux kernel to use upper half of memory only. Also, ipmtu=8982 is not a linux kernel standard, you must apply the patch above in order to set eth0 mtu at boot.

Use the environment below to build the kernel.

export ARCH=powerpc
export TARGET=powerpc-440-linux-gnu
export CROSS_COMPILE=$TARGET-
export PATH=$PATH:$HOME/dev/x-tools/$TARGET/bin

Finally, to build the Linux kernel for NFS rootfs type:

make ARCH=powerpc simpleImage.virtex440-cobo02_nfs

To build the Linux kernel for a ramdisk type:

make ARCH=powerpc simpleImage.initrd.virtex440-cobo02_ram

One the compilation is done you can copy the elf file to your fpga xmd directory

cp arch/powerpc/boot/simpleImage.virtex440-cobo02_nfs.elf TO_XMD_DIR
# for ramdisk
cp arch/powerpc/boot/simpleImage.initrd.virtex440-cobo02_ram.elf TO_XMD_DIR

IRFU MDaq software

This is not currently supported by IRFU.

To build IRFU's Mdaq embedded software for a Linux Target follow the steps below: All the steps/sections above except XMD should be performed.

We need to use crosstool-ng toolchain

export ARCH=powerpc
export TARGET=powerpc-440-linux-gnu
export CROSS_COMPILE=$TARGET-
export PATH=$PATH:$HOME/dev/x-tools/$TARGET/bin

Download latest boost library from boost.org

cd $HOME/dev
wget boost_1_54_0.tar.bz2
cd boost_1_54_0
echo "using gcc : powerpc : powerpc-440-linux-gnu-g++ ;" >> ~/user-config.jam
./bootstrap.sh --prefix=$HOME/dev/boostppc
./b2 toolset=gcc-powerpc install --prefix=$HOME/dev/boostppc
export BOOST_LOC=$HOME/dev/boostppc 

This will install a PPC compatible boost library in $HOME/dev/boostppc

Next we need to install IceE binaries

cd $HOME/dev
wget http://www.zeroc.com/download/IceE/1.2/IceE-trans-1.2.0-bin-rhel4.tar.gz
tar -zvxf IceE-trans-1.2.0-bin-rhel4.tar.gz
export ICEBIN=$HOME/dev/IceE-1.2.0/bin

This will install x86 binaries for Ice in $HOME/dev/IceE-1.2.0

CLOSE THIS TERMINAL START A NEW TERMINAL

We will be using buildroot toolchain

export ARCH=powerpc
export TARGET=powerpc-440-linux-gnu
export CROSS_COMPILE=$TARGET-
export PATH=$PATH:$HOME/dev/buildroot-2013.05/output/host/usr/bin
export ROOTFS=$HOME/dev/coborootfs
export PREFIX=$ROOTFS/usr/local
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export SVNUSER=user
export SVNPASSWORD=pass
export BOOST_LOC=$HOME/dev/boostppc
export ICEBIN=$HOME/dev/IceE-1.2.0/bin 

Download IRFU relevant IRFU GET software. This software is not currently ported to embedded PPC linux so we have to work around few things when we reach Mdaq compilation.

First, we create a working directory

mkdir -p $HOME/dev/GET
cd $HOME/dev/GET

Fetch the code from their SVN.

svn co --username $SVNUSER --password $SVNPASSWORD https://dsm-trac.cea.fr/svn/cconfig/TinyXml/trunk TinyXml
# accept the certificate perminantely.
svn co --username $SVNUSER --password $SVNPASSWORD https://dsm-trac.cea.fr/svn/cconfig/CompoundConfig/trunk CompoundConfig
svn co --username $SVNUSER --password $SVNPASSWORD https://dsm-trac.cea.fr/svn/mordicus/Utilities/trunk Utilities
svn co --username $SVNUSER --password $SVNPASSWORD https://dsm-trac.cea.fr/svn/mordicus/IceEirfu/trunk IceEirfu
svn co --username $SVNUSER --password $SVNPASSWORD https://dsm-trac.cea.fr/svn/mordicus/MDaq/trunk Mdaq

Now we start compiling and installing

cd $HOME/dev/GET/TinyXml
./autogen.sh
mkdir -p build/ppc && cd build/ppc
../../configure --prefix=$PREFIX --host=$TARGET --build=i686-pc-linux-gnu
make install
# if install fails then fix permissions in $prefix to chown -R $USER:$USER $PREFIX
# once you are done with all packages change it back to root.

cd $HOME/dev/GET/CompoundConfig
./autogen.sh
mkdir -p build/ppc && cd build/ppc
../../configure --prefix=$PREFIX --host=$TARGET --build=i686-pc-linux-gnu --with-boost=$BOOST_LOC
make install

cd $HOME/dev/GET/Utilities
./autogen.sh
mkdir -p build/ppc && cd build/ppc
../../configure --prefix=$PREFIX --host=$TARGET --build=i686-pc-linux-gnu --with-boost=$BOOST_LOC
make install

cd $HOME/dev/GET/IceEirfu
./autogen.sh
mkdir -p build/ppc && cd build/ppc
../../configure --prefix=$PREFIX --host=$TARGET --build=i686-pc-linux-gnu --with-icee-bin=$ICEBIN
make install

We have reached MDaq, now we need to play nice with the linker.

cd $HOME/dev/GET/Mdaq
# just for Mdaq
export CPPFLAGS="-I$ROOTFS/usr/local/include"
export LDFLAGS="-L$ROOTFS/usr/lib -L$ROOTFS/usr/local/lib"
# without ncurses readline is not linked correctly
export LIBS=-lncurses
./autogen.sh
mkdir -p build/ppc && cd build/ppc
../../configure --build=i686-pc-linux-gnu --host=powerpc-440-linux-gnu --prefix=$PREFIX --with-icee-bin=$ICEBIN --with-icee=$PREFIX --with-boost=$BOOST_LOC
make install

Once Mdaq is installed we can run it on cobo like this

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
hwServer
embedded_software.txt · Last modified: 2013/09/04 10:54 by abunimeh