Toolchain installation on Linux
We recommend using the Contiki-NG Docker image for easy setup of a consistent development environment: doc:docker.
Alternatively, you can install the toolchains natively on your system. This page describes how to do so, for a Linux development environment.
Install development tools for Contiki-NG
Start by installing some necessary packages:
$ sudo apt update
$ sudo apt install build-essential doxygen git git-lfs curl wireshark python3-serial srecord rlwrap
On recent Ubuntu releases, you may get an error ifconfig: not found
and netstat: not found
when trying to run tunslip6
. If this is the case, use apt to install net-tools
.
While installing Wireshark, select enable the feature that lets non-superuser capture packets (select “yes”).
Now add yourself to the wireshark
group:
$ sudo usermod -a -G wireshark <user>
Then you will - if you intend to develop or re-configure examples - also need to install an code/text editor. There are many alternatives so we leave that up to you!
Install ARM compiler
An ARM compiler is needed to compile for ARM-based platforms such as CC2538DK and Zoul.
You should download it from https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads or you can grab an older version from launchpad.net.
$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2
$ tar -xjf gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2
This will create a directory named gcc-arm-none-eabi-9-2020-q2-update
in your current working dir. Add <working-directory>/gcc-arm-none-eabi-9-2020-q2-update/bin
to your path.
Install MSP430 compiler
A compiler for MSP430 is needed to use the MSPSim emulator in Cooja. It is possible to install a GCC compiler for MSP430 from the Ubuntu package repository (sudo apt install gcc-msp430
) but that version is too old to support the full memory of newer versions of MSP430.
The preferred version of MSP430 gcc is 4.7.2. To install it on /usr/local
if you’re using 64-bit Linux, run:
$ wget -nv http://simonduq.github.io/resources/mspgcc-4.7.2-compiled.tar.bz2 && \
tar xjf mspgcc*.tar.bz2 -C /tmp/ && \
cp -f -r /tmp/msp430/* /usr/local/ && \
rm -rf /tmp/msp430 mspgcc*.tar.bz2
If desired, a script to compile MSP430 GCC 4.7.2 from source can be found here.
Install Java for the Cooja network simulator
$ sudo apt install default-jdk ant
$ update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Nothing to configure.
Install JTAG software for CC2538 (optional)
Many platforms such as Zolertia Zoul can be programmed via builtin USB but for programming a device using a JTAG dongle, Segger J-Link has been verified to work well with CC2538. The software for Segger J-Link can be downloaded from Segger. Download the installation file for Debian Linux.
$ sudo dpkg --install jlink_4.98.5_i386.deb
Install a CoAP client (optional)
Optionally and if you want to use CoAP examples, you can install the CoAP client coap-cli
:
$ sudo apt-get install -y npm \
&& sudo apt-get clean \
&& sudo npm install coap-cli -g \
&& sudo ln -s /usr/bin/nodejs /usr/bin/node
Install the Mosquitto MQTT broker and accompanying clients (optional)
Install Mosquitto, if you need MQTT:
$ sudo apt-get install -y mosquitto mosquitto-clients
User access to USB
To be able to access the USB without using sudo, the user should be part of the groups plugdev
and dialout
.
$ sudo usermod -a -G plugdev <user>
$ sudo usermod -a -G dialout <user>
Improve stability for CC2538
The modem manager might interfere with the USB for CC2538. Update the configuration with:
echo 'ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16c8", ENV{ID_MM_DEVICE_IGNORE}="1"' >> /lib/udev/rules.d/77-mm-usb-device-blacklist.rules
After configuration
Reboot the system after all configurations have been made.
Clone Contiki-NG
$ git clone https://github.com/contiki-ng/contiki-ng.git
$ cd contiki-ng
$ git submodule update --init --recursive
Note: we recommend cloning and then initializing the submodules rather than using git clone --recursive
.
The latter results in submodules that use absolute paths to the top-level git, rather than relative paths, which are more flexible for a number of reasons.