Building Crazyflie 2.0 firmware

Dependencies

You’ll need to use either the Crazyflie VM, the toolbelt or install some ARM toolchain.

Install a toolchain

OS X

brew tap PX4/homebrew-px4
brew install gcc-arm-none-eabi

Debian/Ubuntu

Tested on Ubuntu 14.04 64b, Ubuntu 16.04 64b, and Ubuntu 18.04 64b:

For Ubuntu 14.04 :

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install libnewlib-arm-none-eabi

For Ubuntu 16.04 and Ubuntu 18.04:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt install gcc-arm-embedded

Note: Do not use the gcc-arm-none-eabi package that is part of the Ubuntu repository as this is outdated.

Arch Linux

sudo pacman -S community/arm-none-eabi-gcc community/arm-none-eabi-gdb community/arm-none-eabi-newlib

Windows

The GCC ARM Embedded toolchain for Windows is available at launchpad.net. Download the zip archive rather than the executable installer. There are a few different systems for running UNIX-style shells and build systems on Windows; the instructions below are for Cygwin.

Install Cygwin with setup-x86_64.exe. Use the standard C:\cygwin64 installation directory and install at least the make and git packages.

Download the latest gcc-arm-none-eabi-*-win32.zip archive from launchpad.net. Create the directory C:\cygwin64\opt\gcc-arm-none-eabi and extract the contents of the zip file to it.

Launch a Cygwin terminal and run the following to append to your ~/.bashrc file:

echo '[[ $PATH == */opt/gcc-arm-none-eabi/bin* ]] || export PATH=/opt/gcc-arm-none-eabi/bin:$PATH' >>~/.bashrc
source ~/.bashrc

Verify the toolchain installation with arm-none-eabi-gcc --version

Cloning

This repository uses git submodules. Clone with the --recursive flag

git clone --recursive https://github.com/bitcraze/crazyflie-firmware.git

If you already have cloned the repo without the --recursive option, you need to get the submodules manually

cd crazyflie-firmware
git submodule init
git submodule update

Compiling

Crazyflie 2.X

This is the default build so just running make is enough or:

make PLATFORM=cf2

or with the toolbelt

tb make PLATFORM=cf2

Roadrunner

Use the tag platform

make PLATFORM=tag

or with the toolbelt

tb make PLATFORM=tag

config.mk

To create custom build options create a file called config.mk in the tools/make/ folder and fill it with options. E.g.

PLATFORM=CF2
DEBUG=1
CLOAD=0

Make targets:

all        : Shortcut for build
compile    : Compile cflie.hex. WARNING: Do NOT update version.c
build      : Update version.c and compile cflie.elf/hex
clean_o    : Clean only the Objects files, keep the executables (ie .elf, .hex)
clean      : Clean every compiled files
mrproper   : Clean every compiled files and the classical editors backup files

cload      : If the crazyflie-clients-python is placed on the same directory level and 
             the Crazyradio/Crazyradio PA is inserted it will try to flash the firmware 
             using the wireless bootloader.
flash      : Flash .elf using OpenOCD
halt       : Halt the target using OpenOCD
reset      : Reset the target using OpenOCD
openocd    : Launch OpenOCD