Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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.