Xubuntu 10.04, SVN T2.1, Step by step
1) OS Install.
Install the OS, Ubuntu (Xubuntu uses less resources) on the box. Recommended is Xubuntu 10.04 (LTS). A simple install is fine and will take less time. Current ISO install images can be found at 10.04 ISO.
When the install is complete, boot the system, and use apt-get, synaptic or other package manager to make sure the following packages are installed:
autobook autoconf automake build-essentials libc6-dev libtool openssh-client openssh-server subversion stow git-core git-doc gitk gitmagic
sudo -s apt-get install autobook autoconf automake build-essentials apt-get install libc6-dev libtool openssh-client openssh-server apt-get install subversion stow apt-get install git-core git-doc gitk gitmagic
2) Install TinyOS toolset (msp430, avr)
We want the tinyos toolset for the msp430 (telosb) and the avr (micaz, mica2). Debian packages are available from Stanford. John Hopkins (HINRG) provides a backup if there are problems with the Stanford tools repository.
Modify the repository list using Applications->System->Software_Sources to include:
http://tinyos.stanford.edu/tinyos/dists/ubuntu lucid main <- if using Stanford http://hinrg.cs.jhu.edu/tinyos lucid main <- if using HINRG
or
echo "deb http://tinyos.stanford.edu/tinyos/dists/ubuntu lucid main" >> /etc/sources.list echo "deb http://hinrg.cs.jhu.edu/tinyos lucid main" >> /etc/sources.list
Install the following packages:
avr-binutils-tinyos avrdude-tinyos avr-gcc-tinyos avr-libc-tinyos avr-tinyos avr-tinyos-base deputy-tinyos msp430-binutils-tinyos msp430-gcc-tinyos msp430-libc-tinyos msp430-tinyos msp430-tinyos-base nesc tinyos tinyos-2.1 tinyos-base tinyos-required tinyos-tools
sudo -s apt-get update apt-get install avr-binutils-tinyos avrdude-tinyos avr-gcc-tinyos avr-libc-tinyos apt-get install avr-tinyos avr-tinyos-base deputy-tinyos msp430-binutils-tinyos apt-get install msp430-gcc-tinyos msp430-libc-tinyos msp430-tinyos msp430-tinyos-base apt-get install nesc tinyos tinyos-2.1 tinyos-base tinyos-required tinyos-tools
3) TinyOS 2.x tree checkout
Check out the current TinyOS 2.x tree. We use the head of the T2 development tree hosted at Google Code. This is a bit dangerous so pay attention to what comes in with an update.
<t2_base> refers to the root of the T2 tree. For example: /home/joe/t2_base or /home/joe/w (for working).
a) cd <t2_base> b) mkdir <t2_cur> (one suggestion is to use t2_<date_stamp> and then ln -s t2_<date_stamp> t2_cur) c) cd t2_cur d) svn checkout http://tinyos-main.googlecode.com/svn/trunk/ tinyos-2.x
This will pull the current SVN T2 source tree into /home/joe/t2_cur/tinyos-2.x.
4) Modify PATH and LD_LIBRARY_PATH
Make sure your PATH and LD_LIBRARY_PATH include /opt/msp430 and /usr/msp430 as appropriate.
M1="/opt/msp430" M2="/usr/msp430" export PATH="$PATH:$M1/bin:$M2/bin" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$M1/lib:$M2/lib:/usr/local/lib"
5) Set up build environment settings
The following environment variables must be set to build.
TOSROOT TOSDIR MAKERULES CLASSPATH TOSMAKE_PATH
for example: note: <t2_base> := ~/t2_base #!/bin/sh MOTECOM="serial@/dev/ttyS0:telosb" TOSROOT=~/t2_base/t2_cur/tinyos-2.x TOSDIR=$TOSROOT/tos M1="/opt/msp430" M2="/usr/msp430" PATH="$PATH:$M1/bin:$M2/bin" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$M1/lib:$M2/lib:/usr/local/lib" MAN_PATH="$MAN_PATH:$M1/man:$M2/man" MAKERULES=$TOSROOT/support/make/Makerules CLASSPATH=.:$TOSROOT/support/sdk/java/tinyos.jar PYTHONPATH=$TOSROOT/support/sdk/python:$PYTHONPATH PYTHONPATH=$M1/lib:$M1/bin:$M2/lib:$M2/bin:$PYTHONPATH PYTHONPATH=$M1/lib/python2.3/site-packages:$PYTHONPATH PYTHONPATH=$M2/lib/python2.3/site-packages:$PYTHONPATH #LIBMSPGCC_PATH=$M1/lib:$M2/lib export MAKERULES TOSDIR TOSROOT CLASSPATH PYTHONPATH LD_LIBRARY_PATH export LIBMSPGCC MOTECOM MAMMARK_DIR TOSMAKE_PATH
6) mspdebug for debugging with TI JTAG debugging probe (msp430 only)
mspdebug is an open source program that interfaces to the TI UIF JTAG pod for debugging msp430 cpus. It has a user interface as well as a remote gdb debugging server.
mspdebug is available as a Ubuntu package for natty (11.04) and later releases. And can be downloaded and built for 10.04 from its git repository mspdebug.git.sourceforge.net/gitroot/mspdebug/mspdebug
The following additional packages are needed:
libusb libusb-dev libreadline-dev libreadline6-dev
sudo apt-get install libusb libusb-dev libreadline-dev libreadline6-dev cd ~/mm mkdir Others cd Others git clone git://mspdebug.git.sourceforge.net/gitroot/mspdebug/mspdebug cd mspdebug make sudo make install
mspdebug is installed into /usr/local. This path must be included in your $PATH variable.
7) Build SerialForwarder and libmote library.
Build the serial forwarder and associated library (also includes direct serial access) cd $TOSROOT/support/sdk/c/sf ./bootstrap ./configure --prefix=/opt/stow/sf_c make sudo -s make install ("sudo make install" for some reason doesn't pick up the value of $TOSROOT properly so the make install doesn't work write unless you are root first) This will install bin/{sf, sflisten, sfsend, seriallisten, serialsend}, include/{message.h, serialsource.h, sfsource.h}, and lib/libmote.a. These will be installed into /opt/stow/sf_c. Install into /opt/{bin,include,lib} using stow. cd /opt/stow stow sf_c
8) Using the serialforwarder/seriallistener
a) make sure that tinyos.jar has been built. It should live in $TOSROOT/support/sdk/java/tinyos.jar b) to rebuild: cd $TOSROOT/support/sdk/java/ make tinyos.jar c) Install TOSComm JNI support if needed. Did java bitch about not finding TOSComm JNI support? assuming tinyos-tools is installed run: tos-install-jni d) To watch raw bytes coming from the serial port Make sure CLASSPATH includes $TOSROOT/support/sdk/java/tinyos.jar, ie: CLASSPATH=.:/home/joe/t2_base/t2_cur/tinyos-2.x/support/sdk/java/tinyos.jar
execute:
java net.tinyos.tools.Listen -comm serial@/dev/ttyUSB0:telosb
And you should see packets that look something like this: (depends on what the mote is sending)
00 FF FF 00 00 12 00 21 00 12 07 09 00 0C 9E 23 00 0C 9E 30 F6 2C FF D7 FF FF 00 FF FF 00 00 12 00 21 00 12 07 05 00 0C 9E 24 00 0C 9E 3F E5 AF B1 6F 9E D4 00 FF FF 00 00 0E 00 21 00 0E 07 06 00 0C 9E 33 00 0C 9E 46 78 80 00 FF FF 00 00 0E 00 21 00 0E 07 07 00 0C 9E 33 00 0C 9E 52 FF FF 00 FF FF 00 00 10 00 21 00 10 07 08 00 0C 9E 33 00 0C 9E 61 FF FF FF FF 00 FF FF 00 00 10 00 21 00 10 07 08 00 0C 9E 33 00 0C 9E 61 FF FF FF FF ^ ^ ^ ^ ^ ^ ^ ^ ^ | -- sensor 8 data | | | | | | | | |- sensor id | | | | | | | |- sensor data type | | | | | | |-- length of data block | | | | | |-- AM type MM3_DATA | | | | |-- AM group | | | |-- serial length | | |-- src addr | |-- dest addr |-- dispatch byte - 0 says AM
If you define MOTECOM you won't need to specify the -comm parameter. ie:
MOTECOM=serial@/dev/ttyUSB0:telosb