This page has deprecated and will be archived. Please go to [[https://www.bitcraze.io/]]. ====== Development environment ====== ===== Software Tools ===== ==== Software used ==== The following software are used by the Crazyflie development environment toolchain: * [[https://launchpad.net/gcc-arm-embedded/+download| GNU Tools for ARM Embedded Processors]] * [[http://openocd.sourceforge.net/|openOCD]] These are available for both Windows and Linux. ==== Setup on Fedora 16 ==== === Installing === In order to fix the permissions so it's possible to use the JTAG and USB Radio without being root do the following steps. sudo usermod -a -G plugdev username Note that you will need to logout and in again for the added group to take effect. Find the JTAG vendor/product ID by running lsusb. Create a file named /etc/udev/rules.d/99-jtagkey.rules and add the following: SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="0664", GROUP="plugdev" Create a file named /etc/udev/rules.d/99-crazyradio.rules and add the following: SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev" ==== Setup on Ubuntu 13.04 ==== Most of the software that you will need is now available from the repositories so just run the following command to install it: sudo apt-get -y install mercurial python2.7 python-usb python-pygame python-qt4 qt4-designer openocd build-essential Run the following to download, unpack and copy the ARM Embedded toolchain: wget https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q1-update/+download/gcc-arm-none-eabi-4_7-2013q1-20130313-linux.tar.bz2 tar xjf gcc-arm-none-eabi-4_7-2013q1-20130313-linux.tar.bz2 mkdir ~/bin mv gcc-arm-none-eabi-4_7-2013q1 ~/bin/gcc-arm-none-eabi And then also add the binaries to your path: In order for the build system to find the toolchain when building the firmware it has to be added to the path: echo -e "\nPATH=\$PATH:$HOME/bin/gcc-arm-none-eabi/bin" >> ~/.bashrc source ~/.bashrc ==== Setup on Windows ==== TBD ==== Setup on Mac OS X ==== Development environment setup is relatively easy on Mac OS X. [[http://crazyflie.ecsiii.com/archives/14-Compiling-Crazyflie-Firmware-on-Mac-OS-X.html | Please see this blog posting for an overview]]. ===== Compiling the copter code ===== The Crazyflie project is based on a Makefile. A couple of target are useful: crazyflie-fimrware$ make # Make copter firmware crazyflie-fimrware$ make V=1 # Make copter firmware and shows the full compilation commands crazyflie-fimrware$ make CLOAD=1 # Make copter firmware to be used with the bootloader crazyflie-fimrware$ make clean && make USE_ESKYLINK=1 CLOAD=1 all # Make copter firmware to be used with the bootloader, CF controlled with eSky ET6i transmitter crazyflie-fimrware$ make cload # Flash the firmware using the radio bootloader crazyflie-fimrware$ make flash # Flash firmware using openOCD and the jtagKey crazyflie-fimrware$ make reset # Reset the copter using openOCD crazyflie-fimrware$ make openocd # Launch openOCD and connect it to the copter (can then be used via the telnet interface and/or GDB) A couple of variables can be set on the command line or shell environment to configure the build process: ^ Variable ^ Default value ^ Usage ^ | CLOAD | 1 | If at 1 the firmware is liked to be used with the bootloader. | | DEBUG | 0 | If at 1 the firmware will be build without optimization and with debug symbol (the firmware is ~70K in debug mode and ~40K optimized). | | CROSS_COMPILE | arm-none-eabi- | Prefix of the cross compilation toolchain to use. Any bare arm GCC should do. The default value is good for the CodeSourcery toolchain. | | OPENOCD_INTERFACE | interface/jtagkey.cfg | JTAG interface configuration file to use with openOCD. Default is for the Amontec JtagKEY. | | V | 0 | Verbose mode. If V=1 the compilers command lines will be displayed. If V=0 only the tool type and target file are displayed. | | PYTHON2 | python | Name of the Python 2.7 interpreter | | USE_ESKYLINK| 0 | If at 1 the firmware is compiled to use with the eSky ET6i transmitter. | It is possible to create a file //config.mk// to set these variables in a more permanent manner, this file is imported at the beginning of Makefile. The openOCD targets do not make the copter code, hence the compilation must be called first with ''make'' and then ''make flash'' can be called. It is possible to flash with openOCD/jtag a bootloader version of the copter as long as the bootloader is present at the beginning of the flash. However this could interfere with GDB. It is also possible to work with the copter code from within Eclipse. ===== Compiling and flashing the bootloader ===== The copter can be loaded with a radio bootloader contained in the crazyloader folder. The dev environment is very similar to the copter one: crazyflie-bootloader$ make # Make the bootoader crazyflie-bootloader$ make flash # Flash the bootloader with openOCD