HOME/ NetBSD/ OpenBlockS200

OpenBlockS200 de NetBSD

OpenBlockS200 (以下、OBS200と略す) にNetBSDを入れて遊んでいます。

初代OpenBlockSについてはOpenBlockS de NetBSDページを御覧ください。

OpenBlockS266についてはOpenBlockS266 de NetBSDページを御覧ください。

NetBSDとOBS200

OBS200ではNetBSD/evbppcのkernelでブートはするものの、その他のデバイスのサポートはまったくといっていいほど進んでいません。。各デバイスとその他の状況については次のとおりです。

項目 動作 デバイス patch その他
IDE NG 不明 - ozawaさんによるとQuickLogic QL3004らしいです。
Ether1 OK emac - MACアドレスが取得できないためソースに即値埋め込みです。ozawaさんによるとPHYはTDK 78Q2120らしいです。
Ether2 OK rtk - うごきましたっけ?
RTC NG 不明 - ozawaさんによるとMAXIM DS1307らしいです。DS1307なら...
Serial Console OK - 必要 sys/arch/powerpc/ibm4xx/ibm4xxgpx_autoconf.cのCOM_FREQ * 6をCOM_FREQ * 4に修正する必要があります。
LED NG 不明 - 未サポート
PCMCIA Card 不明 不明 不明 デバイスを所持していないため不明です
USB Card 不明 不明 不明 デバイスを所持していないため不明です

NetBSDのインストール

ブートについて

ブート方法の種類

OBS200は次に示す二種類のブート方法をサポートしています

  1. Flashメモリ
  2. IDE
  3. bootp + tftp

このうち現在NetBSDをブートさせる方法はbootp+tftpだけです。

bootp + tftpを使ったブート方法はディップスイッチを変更するなど多少の設定が必要です。

また、このブート方法は本来のブート方式ではないようです。bootp+tftpはFlashの更新のために用意されているモードで、Flashの更新後にkernelが起動するように作られているようです。

NetBSDのブート

OBS200用のkernelはNetBSD標準には含まれていないため、必要なファイルを用意してやるひつようがあります。

★★★★★★★★★★★ここにパッチの所在と当て方などを書く★★★★★★★★★★★

NetBSD/evbppcのカーネル設定ファイルであるsys/arch/evbppc/conf/OPENBLOCKS200をbuildして作成されたカーネルイメージをFlashに書き込んだりtftpで取得可能な場所においてやればOBS200がカーネルをロードしてブートしてくれます。

カーネルイメージファイルはnetbsd.imgなど拡張子に.imgがついているファイルです。一般的に使われているnetbsdというファイルではブートできません (手動でカーネルをコンパイルすると両方作成されるはずです)。

カーネルイメージファイルの書き込み方法

カーネルイメージをFlashに書き込む方法としては、次の二つがあります。

  1. Linuxのコマンドflashcfg
  2. bootp + tftp

Linuxのコマンドflashcfgを使う方法は、一旦NetBSDにFlashを書き込んでしまうと使えなくなるのでbootp + tftpによるFlashへの書き込みを使うことになると思います。

bootp + tftpを使う方法はOBS200の公式なマニュアルに詳細な方法が示されています。この方法はWindows版のbootpサーバとtftpdサーバを使う方法となっています。

しかしながら、NetBSDを入れようと思っている人はNetBSDに標準で含まれているbootpdとtftpdを使いたいと思うことでしょう。

OBS266は初期設定ではbootp+NFSがうまく動きませんが、OBS200はすなおに動いてくれます。

bootp + tftp + NFSによるブート

ここではbootp+tftpでkernelをロードし、ファイルシステムをNFSでマウントする場合について説明します。

OBS200に関するファイルはすべて/usr/obs200に展開することにします。

bootpd

まずはbootpをおこなうためにbootpdの設定を行ないます。

設定は/etc/bootptabで行ないます。

設定項目は次のとおりです。

設定例は次のとおりです。ha=XXXXXXXXXXXXがMACアドレスなので、OBS200の裏側を見て適切に変更してください。

obs200:\
        :ht=ether:\
        :ha=000A8501858E:\
        :ip=192.168.100.61:\
        :sm=255.255.255.0:\
        :hn:\
        :bf=netbsd.img:\
        :bs=auto:\
        :rp=/tftpboot:

設定を行なったらbootpdの起動を行ないます。bootpdはinetdから起動する方法もありますが、ここでは手動で起動します (デバッグログをコンソールに表示させる目的で)。

# bootpd -d 10

tftpd

OBS200はbootpdによって通知されたkernelファイルをtftpを使って転送して起動します。先ほどの例ではnetbsd.imgというファイル名がOBS200に通知されることになります。

tftpdの設定は簡単で、inetdからtftpdが起動されるようにして、転送用のファイル (ここではnetbsd.img) を所定のディレクトリに置くだけです。

まずは、inetd.confを編集してtftpdが有効になるようにします。その際、転送用のファイルを置くディレクトリを/usr/obs266に設定します。

/etc/inetd.confは次のようにtftpdをコメントアウトしています。

#tftp           dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot

この行のコメントアウトを外して、転送用のファイルを置くディレクトリを変更します。

tftp           dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /usr/obs200

inetdを再起動します。

# kill -HUP `cat /var/run/inetd.pid`

/usr/obs200にnetbsd.imgをコピーします。これで、kernelのロードと起動まで動くようになっているはずです。

NFS

先ほどのbootpdの設定でルートファイルシステムを/usr/obs266に設定したので、NFS経由でこのディレクトリがマウント可能にする設定を行ないます。

まずは、/etc/exportsを作って、マウント可能なディレクトリを記述します。次に/etc/exportsの例を示します。

/usr -alldirs -maproot=root -network 192.168.100 -mask 255.255.255.0

/usr/obs200をマウントさせるための設定ならば/usr/obs200だけでも良いのですが、複数のディレクトリを使うこともあるでしょうから少しおおらかな設定にしてあります。

また、アクセス可能なIPアドレスとサブネットマスクを指定することでアクセス制限を行なっています。

OBS200からNFS経由でディレクトリをマウントさせてやるためにはNFSサーバとして動作する必要があります。/etc/rc.confに次の設定を行ない再起動します。

nfs_server=YES
rpcbind=YES
mountd=YES

もちろん、上記デーモン類を手動で起動すればマシンの再起動は不要です。

シリアル

ブート時のログを見たりネットワーク経由での操作が不能になる場合に備えてOBS200とのシリアル接続は必須でしょう。

OBS200との物理的な配線はOBS200付属のシリアルコネクタとストレートケーブルで行ないます。ケーブルは付属のものでなくてもいわゆるネットワークケーブルが使用可能です (ただし、すべてのケーブルが結線されている必要があります)。

シリアルで接続するコマンドとしてはcuやtipがあります。ここではtipを使うこととします。tipの設定ファイルは/etc/remoteなのでこのファイルを適切に設定します。以下に、COMポート1に接続する際の設定を示します。

com0:dv=/dev/tty00:br#9600:pa=none:dc:

最近はCOMポートのないマシンも多く、USBシリアルを使うことも多いようです。私の持っているUSBシリアルの場合はuplcomで認識されており、次のような設定を/etc/remoteに記述することで使えています。

com0:dv=/dev/ttyU0:br#9600:pa=none:dc:

OBS200側の設定

初期状態ではOBS200はFlashやHDDから起動します。bootp+NFSで起動するためにはファームウェア書き換えモードにしなければなりません。ファームウェア書き換えモードにするには本体の基盤に装備されているディップスイッチを変更する必要があります。

OBS200のカバーを開け、CFボードを注意深く外すとメインボードが現れます。

メインボードのコネクタ側に小さなディップスイッチがあります。

このディップスイッチによってOBS200を起動した際のふるまいを変更することができます。

ディップスイッチは二つのスイッチから構成されており、それぞれをON, OFFすることで次の表に示すような動作を起動時に行ないます。

SW1 SW2 意味
OFF OFF デフォルト (設定されたデバイスから起動する)
ON OFF 不明
OFF ON ファームウェア書換えモードが起動する
ON ON 不明

ということで、SW1=ON, SW2=OFFのファームウェア書き換えモードに設定を変更しましょう。

ディストリビューションの展開

bootptabで設定したディレクトリにNetBSDの配布物を展開します。kern-OPENBLOCKS266.tgz, base.tgz, etc.tgzは必須ですね。

# cd /usr/obs200
# pax -rvzpe -f base.tgz
# pax -rvzpe -f etc.tgz
# pax -rvzpe -f kern-OPENBLOCKS200.tgz

deviceを作ります。

# cd dev
# ./MAKEDEV all

これでsingle user modeで起動する準備ができました。

OBS200の電源を入れてみましょう。

電源を入れるとシリアルにはしばらくなにも表示されません。この間はOBS200本体前面のLEDで動作を見るしかありません。

LEDは次のような動作をします。

  1. 数字がカウントダウンする (bootpの処理をしている?)
  2. ゆっくりと回転する (カーネルをダウンロードしてFlashに書き込んでいる?)
  3. スピードアップして回転する (カーネルをメモリにロードしている?)
  4. 消灯する
@p うまくいけば消灯後にシリアルにブートのメッセージが表示されるでしょう。 @p さて、その後どうするか... (以下、ドキュメント未整備)

HOME/ NetBSD/ OpenBlockS200