Table of Contents
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
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