Skip to content
George Oikonomou edited this page Aug 19, 2013 · 5 revisions

This guide lists the packages required before you can build/use Contiki's 8051-based ports.

Information on this page has been tested on Ubuntu and on Mac OS X. Things should work on Cygwin but may require some tweaking.

This guide is a clone of the guide on GitHub. In cases where you see conflicting information, this page here wins.

Required Software

Make sure you have the following installed:

OS X specific

  • If you want to run border routers on Mac OS X, you will also need http://tuntaposx.sourceforge.net/ TunTap
  • Do yourself a favour and start by installing homebrew if you don't have it.
  • You should be able to brew install srecord. At the time of writing, this command would result in boost getting installed as well so two birds with one stone.
  • If you want to build srecord from source, you may need to install GNU libtool. An easy way to do it is via homebrew.
This is what happens if you try to compile srecord with the Apple libtool:
make
libtool --mode=compile --tag=CXX g++  \
		-g -O2 -I. -c srec_cat/arglex3.cc -o \
		srec_cat/arglex3.lo 
libtool: unknown option character `-' in: --mode=compile
Usage: libtool -static [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-sacLT]
Usage: libtool -dynamic [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-o output]
[-install_name name] [-compatibility_version #] [-current_version #] [-seg1addr 0x#] [-segs_read_only_addr 0x#]
[-segs_read_write_addr 0x#] [-seg_addr_table <filename>] [-seg_addr_table_filename <file_system_path>]
[-all_load] [-noall_load]
make: *** [srec_cat/arglex3.lo] Error 1

Try this:

libtool -V
Apple Inc. version cctools-822

If you install GNU libtool via homebrew, it will be prefixed with a 'g':

glibtool --version
libtool (GNU libtool) 2.4.2
Written by Gordon Matzigkeit <[email protected]>, 1996

Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Change srecord's build system to use glibtool instead of libtool and you are sorted.

  • Homebrew is also an easy way to install libboost
brew install boost

Build your Toolchain (SDCC)

In order to compile contiki, you need a version of the SDCC compiler. Unfortunately, the binary packages don't contain all the libraries we need so you will have to compile SDCC from sources.

Before anything else, make sure you don't have a pre-installed version from the Ubuntu archive!

SDCC supports various device types. You can compile it with support for all of them or only some. The port of interest to us is the mcs51. Disabling all other ports will make the compile considerably faster.

Recent Tested SDCC revisions: 8737

  • Download a recommended revision from the SDCC svn (replace [rev] with one of the numbers above):
svn co -r [rev] svn://svn.code.sf.net/p/sdcc/code/trunk/sdcc

SDCC revisions between 7102 and 8719 suffer from a bug and can't build banked firmware. Make sure you are not using one of those revisions. If you are getting the error below, this is most probably the cause and you need to rebuild SDCC:

srec_cat -disable_sequence_warnings border-router.banked-hex -intel -crop 0x18000 0x1FFFF -offset -65536 -o bank1.hex -intel
srec_cat -disable_sequence_warnings border-router.banked-hex -intel -crop 0x28000 0x2FFFF -offset -98304 -o bank2.hex -intel
srec_cat -disable_sequence_warnings border-router.banked-hex -intel -crop 0x38000 0x3FFFF -offset -131072 -o bank3.hex -intel
srec_cat -disable_sequence_warnings border-router.banked-hex -intel -crop 0x48000 0x4FFFF -offset -163840 -o bank4.hex -intel
srec_cat -disable_sequence_warnings border-router.banked-hex -intel -crop 0x00000 0x07FFF -o home.ihx -intel
srec_cat home.ihx -intel bank1.hex -intel bank2.hex -intel bank3.hex -intel bank4.hex -intel -o border-router.hex -intel
srec_cat: bank1.hex: 1: file contains no data
make: *** [border-router.hex] Error 1
rm border-router.flags border-router.banked-hex 
obj_cc2530dk/border-router.app.rel
  • cd into the extracted directory. This will be called sdcc
  • Now you need to hack sdcc's build system a bit, in order to get correct library versions.
    • Edit device/lib/incl.mk. We need model-huge and model-large libraries. To instruct the build system to build model-huge libraries, find this line:
      MODELS = small medium large
      Add huge. You may remove small and medium if you only use SDCC for contiki, but make sure you keep large. So your new line may end up looking like this
      MODELS = small large huge
    • Edit device/lib/Makefile.in. Find this line:
      TARGETS += models small-mcs51-stack-auto
      Replace it with this
      TARGETS += models model-mcs51-stack-auto
  • Run this:
./configure --disable-gbz80-port --disable-z80-port --disable-ds390-port \
  --disable-ds400-port --disable-pic14-port --disable-pic16-port \
  --disable-hc08-port --disable-r2k-port --disable-z180-port \
  --disable-sdcdb --disable-ucsim
    • If you don't have root access you will probably want to change the installation directory. You can do that with the --prefix=dir option of the ./configure stage.
    • If you get any errors about missing packages, fix them.
  • make
  • make install as root or with sudo
You now have a working compiler and libraries. The SDCC executable might be outside the PATH, depending where you installed it. Try running sdcc -v and see if it's in the PATH. If not, add it. If SDCC is in the PATH and you have compiled excluding unused ports, sdcc -v will show you something like this:
SDCC : mcs51 3.0.6 #7000 (Nov  1 2011) (Linux)

The list of supported ports appears after the : and before the version number. If you build everything this message will be a lot longer.

Clone this wiki locally