Xubuntu 10.04, SVN T2.1, Step by step
- Install Xubuntu 8.04 LTS.
Install the OS, Ubuntu (Xubuntu uses less resources) on the box. Recommended is Xubuntu 8.04 (LTS). A simple install is fine and will take less time.
Also install the following packages:
subversion cvs build-essentials stow automake autoconf autobook libtool
- MamMark tree checkout
check out the MamMark source tree. (denote top level as <mm_t2_base>)
a) Current hosting site is zoo.cse.ucsc.edu. <repo_site> b) cd <mm_t2_base>. c) svn co svn://<repo_site>/mammark_tinyos2/t2_mm3
This will create the source tree as <mm_t2_base>/t2_mm3.
Various configuration files used to construct a full build environment are located in <mm_t2_base>/t2_mm3/Added_Bits.
3) [TinyOS 2.x tree checkout]
Check out the current TinyOS 2.x tree. We use the head of the T2 development tree which is a little dangerous so pay attention to what comes in with an update.
a) cd <mm_t2_base> b) mkdir t2 (I use t2_<date_stamp> and then ln -s t2_<date_stamp> t2_cur) c) cd t2 d) cvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co -P tinyos-2.x
e) Apply mm3 specific patches to the main T2 core...
.) cd <mm_t2_base>/t2_cur/tinyos-2.x .) for i in ../../t2_mm3/Added_Bits/*.patch; do \ patch -p0 < $i; done
5) [TI USB Jtag driver fix]
Initial Ubuntu 8.04 has a version of the ti_usb_3410_5052 driver (used to talk to the MSP430 jtag pod) that is slightly modified from the standard linux kernel available at kernel.org. The standard kernel's version of the ti serial driver works so we will just reintall that.
a) Expand t2_mm3/Added_Bits/mspfet_driver.zip. (This will create the directory mspfet_driver). b) mspfet_driver/readme.txt has more information. Read them. It is good. c) make d) temporarily install the new driver.
a) execute the file mspfet_driver/reload and plug the pod in.
b) check /var/log/messages for the following messages. Should be towards the end. The key thing to look for is "converter now attached to ttyUSB0" or some such.
/build/buildd/linux-2.6.24/drivers/usb/serial/usb-serial.c: USB Serial support registered for TI USB 3410 1 port adapter /build/buildd/linux-2.6.24/drivers/usb/serial/usb-serial.c: USB Serial support registered for TI USB 5052 2 port adapter usbcore: registered new interface driver ti_usb_3410_5052 /home/cire/Desktop/mspfet_driver/ti_usb_3410_5052.c: TI USB 3410/5052 Serial Driver v0.9 usb 1-2: new full speed USB device using ohci_hcd and address 2 usb 1-2: configuration #1 chosen from 1 choice ti_usb_3410_5052 1-2:1.0: TI USB 3410 1 port adapter converter detected usb 1-2: reset full speed USB device using ohci_hcd and address 2 usb 1-2: device firmware changed ti_usb_3410_5052: probe of 1-2:1.0 failed with error -5 usb 1-2: USB disconnect, address 2 usb 1-2: new full speed USB device using ohci_hcd and address 3 usb 1-2: configuration #1 chosen from 2 choices ti_usb_3410_5052 1-2:1.0: TI USB 3410 1 port adapter converter detected ti_usb_3410_5052: probe of 1-2:1.0 failed with error -5 ti_usb_3410_5052 1-2:2.0: TI USB 3410 1 port adapter converter detected usb 1-2: TI USB 3410 1 port adapter converter now attached to ttyUSB0
b) run "lsusb" which should look something like the following:
m-tag (19): lsusb Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 005: ID 0451:f430 Texas Instruments, Inc. MSP-FET430UIF JTAG Tool Bus 001 Device 001: ID 0000:0000 m-tag (20):
d) Make our new version of the ti serial driver permanent. 1st make a back up of the originally installed driver (/lib/modules/<kernel version>/kernel/drivers/usb/serial/ti_usb_3410_5052.ko)
ie: modprobe -r ti_usb_3410_5052 cd /lib/modules/2.6.24-19-generic/kernel/drivers/usb/serial cp ti_usb_3410_5052.ko ti_usb_3410_5052.ko_old cp <mm_t2_base>/t2_mm3/Added_Bits/mspfet_driver/ti_usb_3410_5052.ko . modprobe ti_usb_3410_5052
NOTE: It is possible for the correct driver to get replaced if the system is updated. This occurs when any kernel packages are updated. When this occurs the permanent copy must be done again.
6) [USB Jtag, /dev/ttyUSBn config 2, permissions fix]
We also want to install a udev rule that will correctly enable configuration 2 of the jtag pod (this makes it work). We also modify the permission rule so that group user can access the jtag pod. Files exist in the msp430fet_driver directory.
a) Install the 40-ti-usb-3410-5052.rules into /etc/udev/rules.d.
cp 40-ti-usb-3410-5052.rules /etc/udev/rules.d mkdir -p /etc/udev/scripts cp msp430_init /etc/udev/scripts
b) make the following change in /etc/udev/rules.d/40-permissions.rules
change:
SUBSYSTEM=="tty", GROUP="dialout"
to:
SUBSYSTEM=="tty", GROUP="users", MODE="0660"
Make sure that any users that will be using the device are in group "users".
7) [Install TinyOS toolset (msp430)]
Install the tinyos toolset. We use the msp430 tool chain. Debian packages are available from Stanford.
Modify the repository source to include:
http://tinyos.stanford.edu/tinyos/dists/ubuntu/ hardy main
Install the following packages:
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 tinyos-optional (but doesn't work) (for gdb and msp430-jtag)
8) [Install gdb and msp430-jtag from temporary location]
*** These need to be put into a hardy debian package, they will be *** *** included in the tinyos-optional (msp430 flavor) ***
a) cd <mm_t2_base>. (remember to be enabled, sudo) b) cd t2_mm3/Added_Bits/tools c) make install
This should install into /opt/msp430/bin gdb.430 (the msp430-gdb debugger), msp430-jtag and some other tools. Appropriate libraries are installed into /opt/msp430/lib.
9) [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"
10) [Set up build environment settings]
The following environment variables must be set to build.
TOSROOT TOSDIR MAKERULES CLASSPATH TOSMAKE_PATH
for example: note: <mm_t2_base> := ~/mm_t2
#!/bin/sh
MOTECOM="serial@/dev/ttyS0:telosb"
TOSROOT=~/mm_t2/t2_cur/tinyos-2.x TOSDIR=$TOSROOT/tos
MAMMARK_DIR="/home/cire/mm_t2/t2_mm3" TOSMAKE_PATH="$TOSMAKE_PATH $MAMMARK_DIR/support/make"
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
11) 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.
c) Install into /opt/{bin,include,lib} using stow.
cd /opt/stow stow sf_c
12) 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) Make sure CLASSPATH includes $TOSROOT/support/sdk/java/tinyos.jar, ie:
CLASSPATH=.:/home/cire/mm_t2/t2_cur/tinyos-2.x/support/sdk/java/tinyos.jar
To listen to packets coming from the serial port, one can run a simple listener:
java net.tinyos.tools.Listen -comm serial@/dev/ttyUSB0:telosb