= Instructions for ML403 Build = (And current framework tweaks) To fully follow these instructions, a couple things are needed: * Linux machine for software development * Windows machine with Xilinx ISE and EDK 10.1.03. * Trac login for this website * Select ''Register'' at the top of this page and complete the form. Email ''ossie at vt dot edu'' '''with your trac user ID''' to have your access enabled. * [http://www.xilinx.com/products/devkits/HW-V4-ML403-UNI-G.htm ML403] Eval Board * Serial Cable, most likely a null modem cable * a CompactFlash card * Hyperterminal, gtkterm, etc. on one of the machines. * ''(optional)'' Ethernet cable for ML403 === Partitioning the CompactFlash Card === Three partitions will need to be created for the CF card. These will hold the root file system, ACE image and swap space. More instructions will be added. === Base System Build === Within Xilinx EDK, create a base system build. Set up the software options for the device tree and generate the ''xilinx.dts'' as well as the BIT image. Instructions for this section will be added. === Building the Cross Compiler === The following instructions describe how to cross compile a linux kernel for the PowerPC 405. This discussion centers around the use of [http://www.kegel.com/crosstool/ Crosstools], a simple utility for creating a Cross-Compiler. This cross compiler will be needed when compiling the linux kernel, OSSIE, omniORB (CORBA) and any other software targeted for the PowerPC. Make sure that you have the following utilities already installed on your machine before moving forward: {{{ $ sudo apt-get install bison $ sudo apt-get install flex }}} Download Crosstools-0.43 {{{ $ wget http://kegel.com/crosstool/crosstool-0.43.tar.gz $ tar -xzvf crosstool-0.43.tar.gz $ cd crosstool-0.43 }}} Create the directory where the cross-compiler will be installed {{{ $ sudo mkdir /opt/crosstool $ sudo chown $USER.$USER /opt/crosstool }}} Append the 'powerpc-405.dat' file with the following options: {{{ TARBALLS_DIR=~/downloads # where it will save source tarballs RESULT_TOP=/opt/crosstool # where it will install the tools GCC_LANGUAGES="c,c++" # which languages it will make compilers for }}} Now, build gcc-4.1.1 and glibc-2.3.6 for the PowerPC {{{ $ eval `cat powerpc-405.dat gcc-4.1.0-glibc-2.3.6.dat` sh all.ah --notest }}} === Linux on PowerPC 405 Installation === Rename the ''xilinx.dts'' file from EDK to ''virtex405-ml403.dts'' and place it within the kernel source in arch/powerpc/boot/dts directory. The kernel must first be configured before compiling it. The kernel configure used in this development is given here: [http://ossie.wireless.vt.edu/trac/browser/ossiedev/branches/mcarrick/linuxKernel/2.6.27-rc9-xlnx/.config .config]. Replace the ''.config'' file in the top level directory of the kernel source. Otherwise, to configure a kernel from scratch find the top level directory of the kernel and enter the following command: {{{ $ make xconfig ARCH=powerpc }}} Now that the kernel is configured, compile it: {{{ $ make simpleImage.virtex405-ml403 ARCH=powerpc CROSS_COMPILE=powerpc-405-linux-gnu- }}} The resulting ''simpleImage.virtex405-ml403.elf'' image must then be copied from ''arch/powerpc/boot'' to a machine running the Xilinx toolset. Copy this ELF image into a directory with the ''download.bit'' image produced by EDK and a ''.opt'' file. Create a ''.opt'' file for use in this build by opening a text editor and adding the following lines: {{{ -jprog -board ml403 -target ppc_hw -hw download.bit -elf simpleImage.virtex405-ml403.elf -ace system.ace }}} Open the EDK Shell, and move into this directory and run the following command: {{{ $ xmd -tcl genace.tcl -opt ml403Genace.opt }}} This will generate an ACE image which can then be placed on the CompactFlash card. === Download OSSIE Source === Download the source through subversion: {{{ $ cd /home/USER $ svn co https://ossie.wireless.vt.edu/repos/ossie/ossiedev/trunk ossie-trunk }}} Build the ''system/ossie'' directory: {{{ $ cd ossie-trunk/system/ossie $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu # make "CXXFLAGS=-DBOOST_1_34" # make install }}} Build the ''system/standardinterfaces'' directory: {{{ $ cd ossie-trunk/system/standardinterfaces $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu OSSIE_LIBS=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/lib/ # make "CXXFLAGS=-I/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/include/" # make install }}} Build ''system/nodebooter'': {{{ $ cd ossie-trunk/system/nodebooter $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu # make "CXXFLAGS=-I/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/include/ -L/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/lib/" }}} Build ''system/c_wavLoader'': {{{ $ cd ossie-trunk/system/c_wavLoader $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu # make "CXXFLAGS=-I/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/include/ -L/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/lib/" }}} Cross Compiling Components or Devices:[[BR]] (That do not require linking against a C driver library) {{{ $ cd ossie-trunk/components/COMPONENT $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu "CXXFLAGS=-lossiecf -lossieidl -lossieparser -lomniORB4 -lomniDynamic4 -lomnithread" # make "CXXFLAGS=-I/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/include/ -L/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/lib/" }}} Cross Compiling Components or Devices:[[BR]] (That link against a C driver library) First compile the C driver into a static library: {{{ # make -f C_Makefile }}} Run reconf and configure on the component: {{{ $ ./reconf # ./configure --prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/ --host=powerpc-405-linux-gnu "CXXFLAGS=-lossiecf -lossieidl -lossieparser -lomniORB4 -lomniDynamic4 -lomnithread" }}} Open ''Makefile'' to link against the static library, and find the following line: {{{ LIBS = -lstandardInterfaces -lomniDynamic4 -lomnithread -lomniORB4 -L/usr/local/lib -lossieidl -lossieparser -lossiecf }}} Add ''-L. -lFPGAController'' to the end of the line: {{{ LIBS = -lstandardInterfaces -lomniDynamic4 -lomnithread -lomniORB4 -L/usr/local/lib -lossieidl -lossieparser -lossiecf -L. -lFPGAController }}} The static library containing the FPGA Controller may be named differently, so open ''C_Makefile'' to verify the name of the driver. These [http://ossie.wireless.vt.edu/trac/browser/ossiedev/branches/mcarrick/FPGAController files] are a good place to start if you would like to test the interface to the FPGA independent of OSSIE or start building your own driver. Examples of OSSIE components that interface with the FPGA are give here: * [http://ossie.wireless.vt.edu/trac/browser/ossiedev/branches/mcarrick/TxDemo TxDemo], [http://ossie.wireless.vt.edu/trac/browser/ossiedev/branches/mcarrick/ossiedev-trunk/components/CostasLoop CostasLoop] Run make: {{{ # make "CXXFLAGS=-I/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/include/ -L/opt/crosstool/gcc-4.1.1-glibc-2.3.6/powerpc-405-linux-gnu/powerpc-405-linux-gnu/lib/" }}} Rename the component to specify the architecture: (For example TxDemo -> TxDemo_powerpc) {{{ $ mv COMPONENT COMPONENT_arch }}} Manually copy the binary to the CompactFlash drive: {{{ # cp COMPONENT_arch /media/CF_ROOT_FILE_SYSTEM/sdr/bin/ }}} === Running OSSIE === The file system is in a state of transition and currently only supports a flat directory structure. Therefore, symbolic links will need to be added to overcome this limitation. The capability to allow sub-directories lies in the file manager ''list()'' function, where recursion is not used. There is a single line which needs to be uncommented to allow recursion, but this fix needs to be verified with the rest of the framework and tools. Create Symbolic Link for nodeBooter {{{ $ cd /sdr/domain/ $ ln -s ../../sdr/ sdr }}} Run nodeBooter {{{ $ nodeBooter -D -d nodes/default_ml403_node/DeviceManager.dcd.xml }}} Set up ''/sdr'' for c_wavLoader {{{ $ cd /sdr/nodes/default_ml403_node/ $ ln -s ../../xml/ xml $ ln -s ../../waveforms/ml403_ossie_demo/ml403_ossie_demo_DAS.xml ml403_ossie_demo_DAS.xml $ ln -s ../../waveforms/ml403_ossie_demo/ml403_ossie_demo.sad.xml ml403_ossie_demo.sad.xml }}} Only a single waveform (SAD and DAS files) can be listed within any node directory as c_wavLoader crashes with more than one waveform. This will be fixed in the future. Run c_wavLoader {{{ $ cd /sdr $ c_wavLoader }}}