OpenBlockS200 (以下、OBS200と略す) にNetBSDを入れて遊んでいます。
初代OpenBlockSについてはOpenBlockS de NetBSDページを御覧ください。
OpenBlockS266についてはOpenBlockS266 de NetBSDページを御覧ください。
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 | 不明 | 不明 | 不明 | デバイスを所持していないため不明です |
OBS200は次に示す二種類のブート方法をサポートしています
このうち現在NetBSDをブートさせる方法はbootp+tftpだけです。
bootp + tftpを使ったブート方法はディップスイッチを変更するなど多少の設定が必要です。
また、このブート方法は本来のブート方式ではないようです。bootp+tftpはFlashの更新のために用意されているモードで、Flashの更新後にkernelが起動するように作られているようです。
OBS200用のkernelはNetBSD標準には含まれていないため、必要なファイルを用意してやるひつようがあります。
★★★★★★★★★★★ここにパッチの所在と当て方などを書く★★★★★★★★★★★
NetBSD/evbppcのカーネル設定ファイルであるsys/arch/evbppc/conf/OPENBLOCKS200をbuildして作成されたカーネルイメージをFlashに書き込んだりtftpで取得可能な場所においてやればOBS200がカーネルをロードしてブートしてくれます。
カーネルイメージファイルはnetbsd.imgなど拡張子に.imgがついているファイルです。一般的に使われているnetbsdというファイルではブートできません (手動でカーネルをコンパイルすると両方作成されるはずです)。
カーネルイメージをFlashに書き込む方法としては、次の二つがあります。
Linuxのコマンドflashcfgを使う方法は、一旦NetBSDにFlashを書き込んでしまうと使えなくなるのでbootp + tftpによるFlashへの書き込みを使うことになると思います。
bootp + tftpを使う方法はOBS200の公式なマニュアルに詳細な方法が示されています。この方法はWindows版のbootpサーバとtftpdサーバを使う方法となっています。
しかしながら、NetBSDを入れようと思っている人はNetBSDに標準で含まれているbootpdとtftpdを使いたいと思うことでしょう。
OBS266は初期設定ではbootp+NFSがうまく動きませんが、OBS200はすなおに動いてくれます。
ここではbootp+tftpでkernelをロードし、ファイルシステムをNFSでマウントする場合について説明します。
OBS200に関するファイルはすべて/usr/obs200に展開することにします。
まずは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
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のロードと起動まで動くようになっているはずです。
先ほどの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は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は次のような動作をします。