OpenBlockS266 でWINを動かそう!

2013-11-13 改訂 ページの移動。内容の改訂。
2011-11-18 改訂 バイナリファイルの更新(0.4ブランチのみ)
2011-05-09 改訂 バイナリファイルの更新(0.4ブランチのみ)
2010-12-28 改訂 内容の更新。バイナリファイルの更新(0.4ブランチのみ) 2010-11-10 改訂 メーリングリストの立ち上げ。バイナリファイルの更新(0.4ブランチのみ)
2010-07-21 改訂 バイナリファイルの更新(0.4ブランチのみ)
2010-06-13 改訂 バイナリファイルの更新(0.4ブランチのみ)
2009-06-11 改訂 バイナリファイルの更新(0.4ブランチのみ)。内容の更新
2009-02-20 改訂 内容と参考資料の更新
2008-10-25 改訂 tip集の追加。内容と参考資料の更新
2008-10-01 改訂 バイナリファイルの更新(0.4ブランチのみ)
2007-10-11 改訂 0.4 ブランチのバイナリファイルの配布開始。内容の改訂
2007-08-26 改訂 crontab と winrawsrvd のセクションを追加。
2005-06-25 改訂 バイナリファイルのアップデート。これ以前の物は重大な不具合があるので使用しないこと。
2005-02-08 改訂 バイナリファイルの配布開始。
2004-09-23 初版


1. はじめに

ここでは、ぷらっとホーム株式会社で開発された手のひらサイズのマイクロサーバ、OepnBlockS266WIN System をインストールしてWINを動かす方法を述べています。

WINを動かすといっても、OepnBlockS266 にはXは入っていませんので、所謂 win(1W) で地震の読み取りなどは行えません。では、何に使うかというと、relay(1W) や sendt_raw(1W) といったプロセスを動かし地震データのルータとして機能させたり、地震データをオプションの CF カードやハードディスクに収録させたりするのに使います。例えば、インターネットの使える環境のある地震観測点では、その観測点のデータを OepnBlockS266 にバッファリングさせておき、いざというときのバックアップにすることが出来ます。

なお、本サイトの内容や公開しているバイナリファイルを利用した結果については、たとえそれが予測されることであっても一切の責任を負いません。またサポートに関しての義務を負いません。

本サイトの内容と公開しているバイナリファイルは、学術研究目的に限り、かつ、本サイトの文章を参照して作ったシステムについて、また、そのシステムで取得したデータを使って発表や報告を行う場合に参考資料を引用する限り、自由に利用することが出来ます。

2. コンパイル機器の設定

自分で WIN パッケージをコンパイルしない人は、このセクションを飛ばしてもらってかまいません。

こちらに、コンパイル済みのバイナリファイルを公開しました。ここに含まれない独自のプログラムをコンパイルする必要がある場合はこの章を参考にして下さい。OBSS_winbin-20050625.tar.gz より古いものは重大な不具合があります。古いバージョンをお使いの方は最新のものに更新して下さい。

2-1. コンパイル環境を整える

コンパイル環境は、クロス開発環境とセルフ開発環境があります。

クロス開発環境は、i386マシンにSSD/Linuxをインストールすることによって整備します。ただ、SSD/Linuxのホームページを見ながら独力で行う必要があります。私は根性が無かったので少し試行錯誤した挙げ句、セルフ開発環境で行うことにしました。

セルフ開発環境は、OepnBlockS266本体にハードディスクもしくは SSD(Solid State Drive) を付けることが必要です。ハードディスクには24時間対応とそうでないものがありますが、観測点など無人の場所に置かないのであればどちらでもいいでしょう。実際の開発環境の整備は、Plat'Home Open LaboratoryOpenBlockS266 の「開発環境ガイド」等のドキュメントを参照してください。この機器ではコンパイラが動けばよいので、Source 等の SSD/Linux そのものの開発に必要なものは入れなくてもいいです。

2007年7月、SSD/Linux に 0.4 という新たなブランチがリリースされました。0.4 ブランチではカーネルが 2.6 になり、また glibc のバージョンも 0.3 ブランチ (Kernel: 2.4.26) と 0.2 ブランチ (Kernel: 2.4.20) とでは異なります。0.4 でコンパイルしたバイナリと、 0.3 または 0.2 でコンパイルしたバイナリは互換性の無いと思った方が良いそうなので、運用機器で使用する環境をインストールして下さい。ちなみに 0.3 と 0.2 はバイナリファイルの互換性があります。

2-2. WIN のコンパイル

コンパイル環境が整ったら、WIN をコンパイルします。WIN のホームページよりパッケージをダウンロードしてもいいし、Anonymous CVS Server からソースを所得してもかまいません。どちらでもコンパイル可能です。具体的な方法はそれぞれのドキュメントを参照してください。

OepnBlockS266 のセルフ開発環境上では、char 型は符号無し、つまり、unsigned char 型と同じです。WIN 2.X ではこの辺はコンパイル時に自動判定しますが、WIN 1.X.Yを使用の場合はソースの中に char 型は符号ありを仮定しているコードがありますので、コンパイルの時、-fsigned-char オプションを指定する必要があります。

例えば、

% CFLAGS="-fsigned-char -O" ./configure

などとしてコンパイルして下さい。

また、少なくとも SSD/Linux 0.3-20050914 では、コンパイル時に -O オプションを付けると shmdump などが core dump すること分かっています。このような場合は、

% CFLAGS="-fsigned-char" ./configure

のように最適化オプションを外してコンパイルして下さい。

3. 運用機器の設定

ここでは運用機器の設定について、具体的に書いていきます。

まず、機器の構成は、

本体+コンパクトフラッシュ(CF)

を想定しています。CF はストレージデバイスとしてのみで使用します。

地震データをOepnBlockS266に収録する場合は、CFもしくは24時間運用可能なハードッディスクの装着が必須です。2008年からは2.5インチSSD(Solid State Drive)の使用も可能になりました。ハードディスクを装着する場合は、放熱対策をしっかりしておかなければいけないようなので、ぷらっとホームのWebページにある注意事項を良く読んで下さい。個人的な使用感では、ハードディスクが回るとかなりの表面温度になりますので、観測点ではCFカードを使う方がいいように思いました(可動部分が無いし)。SSDについては2009年1月現在試験中です。SSDやハードディスクを使う場合も基本的な流れはCFの場合と変わらないので、下の方法がそのまま役に立つと思います。

設定の方法は、WEBセットアップツール、シリアルセットアップツール、ログインして直接設定する、があります。一般的に行うような設定、つまり、ネットワークやユーザの設定などはどの方法を使っても設定可能ですが、方法を決めたら必ず決めた方法で設定を行うのが重要です。下の説明では、WEBセットアップツールで設定出来るものはすべてWEBセットアップツールを使い、それ以外はログインして直接設定する方法を取っています。

3-1. ハードウェアの準備

本体の横4カ所のネジを外し、CFカードを装着します。上下を間違わないように。どちらかしか入らないので、向きは分かります。

3-2. CF カードのフォーマット

OepnBlockS266 にログイン出来る環境を整えます。ネットワーク越しでもシリアルケーブル経由でもいいでしょう。一長一短あるので、私は両方できるようにしています。

rootでログインしたら、ストレージのモードが何に対応しているか調べます。

# hdparm -I /dev/hda

PIOモードにしか対応していない場合、もしくはPIOモードで動かしたい場合はこのまま進みます。ただし、SSDの場合DMAモードでしか動かないようです(2008年10月25日現在の情報)。DMAモードに対応しておりDMAモードで動かしたい場合は、5-2節を参考にして最適なモードに設定します。設定したモードでエラーが出ないかどうか確認します。

# hdparm -t /dev/hda

次に、CFカードに不良ブロックが無いかどうか確認したい時は、5-1節を参照にしてbadblocksコマンドを実行します。もし、これまで使用していて、CF内に必要なデータが入っている場合は、必要に応じて予めバックアップを取って下さい。実行には数10分から数時間かかります。

装着したCFカードをフォーマットしてファイルシステムとして認識させます。ここに「コンパクトフラッシュの初期化」という非常にいいドキュメントがあるので参照してください。ハードディスクの初期化の方法も載っています。

以下、複数のパーティションを切らないで、CF カードを1パーティションで使用する例で説明します。

フォーマットしたら、/mnt にマウントします。

# mount /dev/hda1 /mnt

3-3. ファームウェアのアップデート

OpenBlockS266 のファームをアップデートします。「コンパイル機器の設定」でも書きましたが、2007年7月に新たなブランチである 0.4 系列のファームウェアがリリースされています。0.3、0.2 系列で使用していたバイナリは動かなくなるので、すでに運用機器をお持ちの方は御注意下さい。これから書く内容はここの「各種ガイド/仕様書」ある「ユーザーズガイド」の Ver.1.04 と Ver.2.00を基にしています。必ずこの文章も一読して下さい。

ファイルシステムは、ext2 より ext3 の方が良さそうなので、特別な理由が無い限りは 0.4 系列をインストールする方がいいでしょう。

最新のファームを Plat'Home Open Laboratory -> OpenBlockS266 から入手します。普通は、外部に接続して ftp などで入手すると思いますので、WEB セットアップツールでネットワークの設定を行い、外部接続出来るようにしておきます。ファームウェアはフォーマットした CF にセーブします。つまり /mnt にセーブしておきます。

以下の作業は、これまで設定した内容を読み込まないモードで立ち上げるため、シリアルケーブル経由で作業します。

  1. OpenBlockS266 をシャットダウンし、電源を切ります。
  2. INIT ボタンを押しながら電源ケーブルを接続して起動します。
  3. OpenBlockS266 に root ユーザでログインします。
  4. CF カードを /mnt にマウントします。
    # mount /dev/hda1 /mnt
  5. CF カードの最新のファームウェアを書き込みます。
    # flashcfg -f [フラッシュ ROM イメージファイル名]
  6. OpenBlockS266 の電源をオフオンし、再起動します。

/etc/flashcfg など、/etc の下のなどのファイルが異なっている場合がありますので、設定の初期化を行った方がいいでしょう。ただ、この場合、これまで設定したユーザやネットワークの設定なども消えてしまいますので、再設定が必要です。設定の初期化のためのコマンドを下記に示します。

# flashcfg -d
# flashcfg -c initrd
# reboot

3-4. CF カードの再フォーマット

アップデートしたファームウェアで、装着したCFカードを再フォーマットします。0.4 ブランチからは、ext2 に加えて ext3 でもフォーマット出来るようになりました。ext2 の方にはバグがありそうだという情報がありますので、特別な理由が無い限りは ext3 を使います。

fdisk(8) の後、ext2 の場合は、

# mke2fs /dev/hda1

を実行し、ext3 の場合(0.4ブランチ以上のみ)は、

# mke2fs -j /dev/hda1

を実行します。

註:0.4 ブランチから、DMA モードで設定可能になりましたが、2007年10月現在では、使わない方が良さそうです。

3-5. /etc/fstab の設定

CF カードをブート時にマウントするために、/etc/fstab に以下の1行を書き加えます。

/dev/hda1 /mnt ext2 defaults 1 1

0.4 ブランチのファームウェアを使用していて、ext3 を使う場合は、

/dev/hda1 /mnt ext3 defaults 1 1

にして下さい。

変更内容保存のために、flashcfg コマンドを実行して下さい。

# flashcfg -s /etc/flashcfg

3-6. 時刻合わせの設定

起動時に時刻を合わせるため、WEB セットアップツールの NTP サーバの欄に、NTP サーバの IP アドレスを記述し、セーブします。

運用開始後に定期的に時刻合わせをするには、crontab を使用します。ただ、crontab コマンドは SSD/Linux 0.3-20050914 以上でないと入っていませんので、必要に応じてアップデートして下さい。

root でログインします。

NTP サーバが動いているかどうか確認する場合は、手動で ntpdate を起動します。ただし、一般には、運用する場所のネットワーク環境でないと確認は出来ないかもしれません。

# ntpdate [IP address of NTP server]

以下により、crontab の設定を行います。

# crontab -e

下記を書き込みます。毎時59分に起動させる例です。起動回数や起動時刻は、各自の環境に合わせて下さい。

59 * * * * sleep 30; /usr/sbin/ntpdate -s [IP address of NTP server]

0.3系列以前の場合は、変更内容を保存するために下記を実行します。

# echo /var/cron/tabs/root >> /etc/flashcfg (0.4 系列では必要なし)

設定を保存します。

# flashcfg -s /etc/flashcfg

設定が保存されているかどうかは、OpenBlockS266 を一度再起動をし、root でログインして、

# crontab -l

として下さい。

3-7. ユーザの作成

WEB セットアップツールにより auto を作成します。user1 は遠隔地からの保守の時に役に立つので削除しないほうがいいです。作成したらセーブします。

ホームディレクトリは /mnt/auto にします。シリアルケーブル経由、もしくは telnet により root ユーザでログインします。telnet の場合は、一度 user1 でログインして su で root になる必要があります。

ログインした後、/etc/passwd のホームディレクトリの情報を書き換ます。

# vi /etc/passwd

/home/auto の部分を、/mnt/auto に置き換えます。

また、su で root にスイッチしたい場合は /etc/group の wheel に auto を付け加えます(0.4-20090330 以降?)。

その後、内容を保存します。

# flashcfg -s /etc/flashcfg

ディレクトリの作成と、所有者・グループ名・パーミッションの変更をします。

# cd /mnt
# mkdir auto bin lib libexec raw log
# chown auto:users auto bin lib libexec raw log

設定が保存されているかどうかは、一度、OpenBlockS266 を再起動後、auto でログイン出来るかどうか見て下さい。

3-8. WIN のインストール

auto でログインし、コンパイル済みのバイナリファイルを、こちらからダウンロードします。ファームウェアのブランチに応じたファイルを取得します。何か不具合を見つけましたら御一報いただけると今後の役に立てると思います。

ダウンロードしたファイルを展開します。

# cd /mnt
# tar zxvf [ダウンロードしたファイル名]

3-9. スタートアップファイルの作成

起動時に走らせるWINのプロセスのスタートアップファイル /mnt/auto/rc.d/winctl.sh を作成し、実行許可を与えます。以下の例では、7000番ポートからデータを受け取り、/mnt/raw に書き込む傍ら、192.168.1.13 の 7020番ポートにデータを転送しています。

# vi /mnt/auto/rc.d/winctl.sh
# chmod a+x /mnt/auto/rc.d/winctl.sh
# cat /mnt/auto/rc.d/winctl.sh
#! /bin/sh
#
# winctl.sh
#

BINDIR=/mnt/bin
RAWDIR=/mnt/raw
RAWFREE=10

# set parameter
RECV_PORT=7000
SEND_HOST=192.168.1.13
SEND_PORT=7020

# Lets begin
case $1 in
start)
	echo "Starting win:"

	echo " recvtd ..."
	${BINDIR}/recvtd ${RECV_PORT} 11 1000 -
	sleep 3

	echo " sendt_rawd ..."
	${BINDIR}/sendt_rawd -1 11 ${SEND_HOST} ${SEND_PORT} -
	sleep 1

	echo " orderd ..."
	${BINDIR}/orderd 11 12 500 10
	sleep 3

	echo " wdiskd ..."
	${BINDIR}/wdiskd -s 12 ${RAWDIR} ${RAWFREE}
	;;
stop)
	;;
*)
	echo "Usage: winctl.sh {start|stop}"
	exit 1
esac

exit 0

3-10. 起動時にコマンドが実行されるように設定

起動時に実行させたいコマンドを/etc/rc.local に記述するのですが、このファイルはデフォルト設定では flashcfg -s /etc/flashcfg コマンドでは保存されません(0.4 系列ではデフォルトで入っている)。/etc/flashcfg ファイルを編集し、このファイルを保存対象とする必要があります。/etc/flashcfg で列挙されているファイルリストに、 /etc/rc.local を追加してください。必要な操作は下記の通りです。

  1. /etc/rc.local に以下を追加
    # start win process
    if [ -x /mnt/auto/rc.d/winctl.sh ]; then
    	su - auto -c "/mnt/auto/rc.d/winctl.sh start"
    fi
  2. /etc/flashcfg に、/etc/rc.local を追加。例えば、以下のようにコマンドを実行します。ただし、0.4 系列ではデフォルトで入っていますので、ここは飛ばしてもらって結構です。
    # echo /etc/rc.local >> /etc/flashcfg (0.4 系列では必要なし)
  3. flashcfg -s /etc/flashcfg を実行します。

以上により、ブート後に OpenBlockS266 で WIN システムのプロセスが走るようになりました。

3-11. winrawsrvd の設定

winrawsrvd を使わない場合は、このセクションを飛ばして下さい。

winrawservd のサービスを行うためには、inetd の設定が必要です。そのためには、/etc/inetd.conf にサービスの登録を行い、/etc/services にポート番号の登録を行う必要があります。

  1. /etc/services に以下を追加します。
    winraw 6542/tcp
  2. /etc/inetd.confに以下を追加します
    winraw stream tcp nowait root /mnt/libexec/winrawsrvd winrawsrvd /mnt/raw
  3. /etc/services を flashcfg -s /etc/flashcfg で保存されるように設定します。ただし、0.4 系列ではデフォルトで入っていますので、ここは飛ばしてもらって結構です。
    # echo /etc/services >> /etc/flashcfg (0.4 系列では必要なし)
  4. flashcfg -s /etc/flashcfg を実行します。
  5. inetd にハングアップシグナルを送るか、リブートします。
  6. netstat -a を実行し、下記の表示があるかどうか確認します。
    tcp 0 0 *:winraw *:* LISTEN

3-12. 最終確認

flashcfg -s /etc/flashcfg を忘れると設定が消えてしまいます。最後に必ず OpenBlockS266 を再起動して設定がすべて反映されているかどうか確認しましょう。

4. ダウンロード

0.4 ブランチ用と、0.3 及び 0.2 ブランチ用ではバイナリファイルの互換性がありません。自分の環境に合ったファイルを取得して下さい。

  • 0.3 ブランチ、0.2 ブランチ (サポート終了)
    ファイル名OpenBlocks266 ファームウェアWIN system versionチェックサム
    0.3-20050914 kernel:2.4.261.1.95-LIBMD5 (OBSS_0.3-20080618.tar.gz) = 87747d429e01993079efe43f556bdeea
  • 0.4 ブランチ (サポート終了)
    ファイル名OpenBlocks266 ファームウェアWIN system versionチェックサム
    0.4-20110819 kernel:2.6.162.2.1MD5 (OBSS_0.4-20111118.tar.gz) = ea9094b255ec1cbb2fc1f7231402b10a

5. tip 集

5-1. CFカードの不良有無の確認方法

badblocks コマンドで行います。必要なファイルがある場合は、読み出しテストのみの場合でもコマンド実行前に必ずバックアップを取って下さい。

読み出しテストだけの場合は、

# badblocks -sv /dev/hda

とします。数10分程度時間がかかります。

実際に書き込みを行ってチェックする場合は、

# badblocks -wv /dev/hda

とします。こちらは数時間程度かかり、CFの中身は当然としてファイルシステムも消えてしまいます。これを行った後は再フォーマットしましょう。

これらのテストでエラーが出た場合は使用を停止して、CFカードを交換することになります。

5-2. DMAモードの選び方

DMAモードがサポートされている場合、下記のようにしてDMAモードを選びます。

  1. hdparm -I /dev/hda でサポートされているDMAモードを確認する。
  2. /etc/rc.conf で use_hda_dma=YES の行がコメントアウトされているのをコメントアウトを外す。mdma0 の部分を、u で始まり、サポートされているものの中で数の大きいもの、例えば udma4に変更する。
  3. flashcfg -s /etc/flashcfg で設定保存。
  4. reboot
  5. hdparm -t /dev/hda でエラーが出なければOK。駄目なら、2に戻りudmaの数の部分を減らしてエラーが出なくなるまで繰り返す。

なお、2008年10月25日現在、SSD は udma5 では動かず、udma2 で使用するのが無難です。PIOモードもうまく動きませんでした。CF はDMAモードがサポートされていてもPIO モードも動くようです。いずれにしても、hdparm -t /dev/hda でエラーが出ないかどうかで判断するのが良いようです。

6. 参考資料

このページの文章を参照して作ったシステムについて、また、そのシステムで取得したデータを使って発表や報告を行う場合は、下記の論文を引用するようお願いします。また、これらの別刷を希望する方は御連絡下さい。

7. メーリングリスト

メーリングリストは管理者の異動に伴い閉鎖しました。悪しからずご了承下さい。


植平 賢司 (UEHIRA Kenji)
uehira@bosai.go.jp


添付ファイル: fileOBSS_0.3-20080618.tar.gz 249件 [詳細] fileOBSS_0.4-20111118.tar.gz 272件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-23 (火) 17:23:52