= Software Description = == Development Environment == === Firmware Programming === ==== JTAG Programmer Hardware ==== We are using Olimex [http://www.olimex.com/dev/arm-usb-ocd.html ARM-USB-OCD] USB based JTAG debugger that is attached to the JTAG port on the CM2 board (JXX). ==== JTAG Programmer Software ==== Software used for debugging and internal flash programming is [http://openfacts.berlios.de/index-en.phtml?title=Open_On-Chip_Debugger OpenOCD] (standard Debian package - {{{ apt-get isntall openocd }}} ). The file openocd.cfg, included in the source repository, has an appropriate configuration for programming the CM2 hardware, although you can experiment with different scripts to automate erasing the flash, verifying the image, and so forth. === Cross-compiler === Software development environment is based on [http://www.codesourcery.com/gnu_toolchains/arm GNU Toolchain for ARM Processor]. Downloaded tarball is installed in /usr/{bin,lib,libexec,arm-none-linux-gnueabi}. The toolcahin was compiled with the ''arm-none-linux-gnueabi'' prefix so that (for example) compiler can be invoked with: {{{ arm-none-linux-gnueabi-gcc program.c -o program }}} You can also get the latest version of gcc, binutils, and newlib, and compile these as {{{configure --target=arm-elf}}}. Both the Makefile and the loader know (at least in theory) how to deal with ELF format CM2 images. In this case tools are prefixed with "arm-elf", so for example an appropriate value for {{{CC}}} in the {{{Makefile}}} would be {{{CC=/usr/local/arm-elf-gcc}}} === Libraries === ==== newlib ==== Routines with entry points referenced by the GCC compiler, such as the ones for integer division, are provided by newlib, a library designed just for this sort of purpose. Impact on the size of the executeable from newlib is minimized. Newlib source is used unmodified, and not incorporated into the CM2 source repository. ==== STR71X Library ==== The ST's firmware library is used for peripheral management. We have made light modifications to ensure it works perfectly with GCC or other fully C99 compliant compilers. The source is included with the rest of the CM2 repository. ==== TCP/IP Library ==== We are using [http://www.sics.se/~adam/uip/index.php/Main_Page uIP TCP/IP stack] developed by Adam Dunkels. Significant modifications have been made to the upstream uIP library to get it to support multiple protocols at the application layer. Source to this library is also include in the CM2 source repository.