Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Ubuntu12.04にtinyOSを導入する

まずは

$ sudo gedit /etc/apt/sources.list

にて、リストの更新。末尾に

#tinyOS
deb http://tinyos.stanford.edu/tinyos/dists/ubuntu lucid main
deb http://tinyos.stanford.edu/tinyos/dists/ubuntu maverick main
deb http://tinyos.stanford.edu/tinyos/dists/ubuntu natty main

を追加。更新内容を反映すべく、apt-getの更新をかける。

$ sudo apt-get update
ヒット http://jp.archive.ubuntu.com precise Release.gpg
...
無視 http://archive.canonical.com precise/partner Translation-en
無視 http://extras.ubuntu.com precise/main Translation-en
18.5 kB を 7秒 で取得しました (2,472 B/s)
パッケージリストを読み込んでいます... 完了
$ sudo apt-get install tinyos
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
tinyos は以下のパッケージで提供されている仮想パッケージです:
tinyos-2.1.2 2.1.2-20120813
tinyos-2.1.1 2.1.1-20100401
tinyos-2.1.0 2.1.0-20090326
tinyos-2.0.2 2.0.2-20090326
インストールするパッケージを明示的に選択する必要があります。

E: パッケージ 'tinyos' にはインストール候補がありません

提示された最新バージョン"2.1.2"を導入

$ sudo apt-get install tinyos-2.1.2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libjna-java libunity6 libftdi1 extra-xdg-menus librxtx-java
これらを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
avr-binutils-tinyos avr-gcc-tinyos avr-libc-tinyos avr-optional-tinyos
avr-tinyos avr-tinyos-base avrdude-tinyos deputy-tinyos
msp430-binutils-tinyos msp430-gcc-tinyos msp430-libc-tinyos msp430-tinyos
msp430mcu-tinyos nesc tinyos-base tinyos-required-all tinyos-required-avr
tinyos-required-msp430 tinyos-tools
推奨パッケージ:
sun-java5-bin sun-java6-bin
以下のパッケージは「削除」されます:
arduino arduino-core avr-libc avrdude binutils-avr gcc-avr
以下のパッケージが新たにインストールされます:
avr-binutils-tinyos avr-gcc-tinyos avr-libc-tinyos avr-optional-tinyos
avr-tinyos avr-tinyos-base avrdude-tinyos deputy-tinyos
msp430-binutils-tinyos msp430-gcc-tinyos msp430-libc-tinyos msp430-tinyos
msp430mcu-tinyos nesc tinyos-2.1.2 tinyos-base tinyos-required-all
tinyos-required-avr tinyos-required-msp430 tinyos-tools
アップグレード: 0 個、新規インストール: 20 個、削除: 6 個、保留: 84 個。
95.1 MB のアーカイブを取得する必要があります。
この操作後に 22.5 MB のディスク容量が解放されます。
続行しますか [Y/n]? Y
警告: 以下のパッケージは認証されていません!
tinyos-base avr-tinyos-base avr-binutils-tinyos avr-gcc-tinyos
avr-libc-tinyos avrdude-tinyos avr-tinyos avr-optional-tinyos nesc
tinyos-tools deputy-tinyos msp430-binutils-tinyos msp430-gcc-tinyos
msp430-libc-tinyos msp430mcu-tinyos msp430-tinyos tinyos-required-msp430
tinyos-required-avr tinyos-required-all tinyos-2.1.2
検証なしにこれらのパッケージをインストールしますか [y/N]?

avr系だのmsp430系だのの関連ファイルが付属するようです。
何があるかわからないので全部入れ。

設定ファイルは、tinyOSインストール直下/tinyos.envに記述します。

# Here we setup the environment
# variables needed by the tinyos
# make system

export TOSROOT="/opt/tinyos-2.1.2"
export TOSDIR="$TOSROOT/tos"
export CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.:.$CLASSPATH
export MAKERULES="$TOSROOT/support/make/Makerules"
export PYTHONPATH=$PYTHONPATH:$TOSROOT/support/sdk/python

echo "setting up TinyOS on source path $TOSROOT"

続いて、~/.bashrcに以下の記述を追加します。

#sourcing the J2sdk1.4.x
export JAVA_HOME=/usr/local/java/j2sdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

#Sourcing the tinyos environment variable setup script
export TOSROOT=/opt/tinyos-2.1.2
source $TOSROOT/tinyos.env

このファイルはJava1.4系を定義する部分より後ろに記載してください。
私はそれでエラい目にあいました。


すべての手順を完了させ再起動(またはshellで source ~/.bashrc)させると

Setting up for TinyOS 2.1.2 Repository Version
$

という表示が出てtinyosの処理系が使えるようになります。

念のため、環境変数が認識されているか確認します。

$tos-check-env

ドキュメント生成に使うgraphvizはとりあえず置いておきます()

次に、tinyOSフォルダの権限を変更します。
これをやらないとまともにmakeが通りません。
私はこれで(ry

$sudo chown -R ユーザ名 $TOSROOT

最後にjniの設定を行います。

$ sudo tos-install-jni
Installing 64-bit Java JNI code in /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64 ....
done

のような文字がでれば完了です。

後々に備え、Java docsを作成します。
$TOSROOT/support/sdk/javaへ移動し

$ make
$ make install
$ make javadoc

で作成できます。

...

ここまでやって、ようやくサンプルコンパイル準備完了です
今回は実機の設定をしていないので、TinyOS標準のシミュレータTOSSIM用ファイルの生成を行います。

$cd $TOSROOT/apps/Blink
$make iris sim
mkdir -p simbuild/iris
placing object files in simbuild/iris
writing XML schema to app.xml
compiling BlinkAppC to object file sim.o
...
linking into shared object ./_TOSSIMmodule.so
g++ -shared -fPIC simbuild/iris/pytossim.o simbuild/iris/sim.o simbuild/iris/tossim.o simbuild/iris/c-support.o -lstdc++ -o _TOSSIMmodule.so
copying Python script interface TOSSIM.py from lib/tossim to local directory

Successfully built iris TOSSIM library.