HOME/ NetBSD/ OpenBlockS266

OpenBlockS266 de NetBSD

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

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

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

NetBSDとOBS266

OBS266ではNetBSDがよく動いています。各デバイスとその他の状況については次のとおりです。

項目 動作 デバイス patch その他
IDE OK hpt371 - 問題なく動作
Ether1 OK emac - Linuxで動作させた場合に比べると、あまり速度はでないようですが、実用上は問題ないでしょう。
Ether2 OK tlp - 動きが怪しいという声も聞きますが私自身はあまり使っていないので良くわかりません。
RTC OK x1226 - OBS266が本家にマージされた直後に壊れていましたが、今は直っています。
Serial Console OK - - 長らくパッチが必要でしたが現在は不要です。
LED OK gpio - obsledとして利用可能になりました。
PCMCIA BOX OK cbbその他 必要 標準では動作しません。清原さんのパッチを使うと動作します。CardBusなカードを抜くと刺さりますが、その他の動作は問題ありません。

NetBSDのインストール

ブートについて

ブート方法の種類

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

  1. Flashメモリ
  2. bootp + tftp

IDE (HDDやCF) からのブートはサポートしていないようです。

Flashメモリからのブートはいわゆる通常のブート方法です。bootp + tftpを使ったブート方法はディップスイッチを変更するなど多少の設定が必要です。

NetBSDのブート

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

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

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

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

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

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

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

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

OpenBlockSのメーリングリストなどでも報告されていますが、マニュアルで示されたやり方以外の方法 (つまりLinuxやNetBSDのbootpd, tftpdを使う方法) ではうまく動作しないと報告されています。

これを回避するためにはディップスイッチを変更して設定モードにしたのち、tftpサーバを明示的に指定する必要があるようです。

いずれにせよ、動くかどうか不明なカーネルイメージをいきなりFlashに書き込むのは勇気がいるでしょうから、最初はbootpd + tftpdで試して、Flashに書き込むというのが良いと思います。

bootp + tftp + NFSによるブートを行なうための準備

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

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

bootpd

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

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

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

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

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

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

# bootpd -d 10

tftpd

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

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/obs266

inetdを再起動します。

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

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

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

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

nfs_server=YES
rpcbind=YES
mountd=YES

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

シリアル

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

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

シリアルで接続するコマンドとしては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:

OBS266側の設定

先にも書きましたが、OBS266とNetBSD標準のbootpd&tftpdは相性が悪いので、OBS266に多少の設定を行なってやる必要があります。

まずは、OBS266のメインボードに存在するディップスイッチを変更します。

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

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

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

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

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

まずはSW1=ON, SW2=OFFの設定モードにして電源を入れます。

するとシリアルには次のような表示がされるはずです。

405GPr 1.2 ROM Monitor (5/25/02)

 --------------------- System Info ----------------------
 Processor         = 405GPr (New mode),   PVR: 50910951
 CPU speed         = 266 MHz
 PLB speed         = 133 MHz
 OPB speed         = 66 MHz
 EBC speed         = 66 MHz
 PCI Bus speed     = 33 MHz (Async)
 VCO speed         = 800 MHz
 Feedback Clock    = CPU
 Amount of SDRAM   = 64 MBytes 
 Internal PCI arbiter enabled
 --------------------------------------------------------

 --- Device Configuration ---
 Power-On Test Devices:
   000  Enabled   System Memory [RAM]
   002  Enabled   Ethernet      [ENET]
   003  Enabled   PCI Ethernet  [PCIENET]
 ----------------------------
 Boot Sources:
   001  Enabled   System FLASH  [FLASH]
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
   004  Enabled   Serial Port 1 [S1]
 ----------------------------
 Debugger: Disabled 
 ----------------------------
  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->

設定モードはメニュー形式となっており、基本的には数字を選択して設定を行ないます。数字の入力の際にはリターンキーが必要なところと不要なところがあるので操作を行なう時には注意しないと思わぬ誤操作を招くおそれがあります。。

また、設定のON/OFFは該当する数字を入力することでトグルされます。

まずは、FLASHからの起動をDisableにしてbootpで起動できるようにします。起動の順番を入れ換えることができないので、起動順番の優先度が高いものをDisableにすることで起動順番を変更することになるわけです。

操作としては、次のとおりです。

"2"を入力するとブートデバイスの選択メニューになります。デフォルトだとFlashからの起動がONなのでを抑制するために"1"を入力します。

  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->2 [RETURN]
---   ENABLE AND DISABLE BOOT DEVICES   ---
 Boot Sources:
   001  Enabled   System FLASH  [FLASH]
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
   004  Enabled   Serial Port 1 [S1]
 ----------------------------
select device to change ->1
  [FLASH] boot is disabled

 --- Device Configuration ---
 Power-On Test Devices:
   000  Enabled   System Memory [RAM]
   002  Enabled   Ethernet      [ENET]
   003  Enabled   PCI Ethernet  [PCIENET]
 ----------------------------
 Boot Sources:
   001  Disabled  System FLASH  [FLASH]
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
   004  Enabled   Serial Port 1 [S1]
 ----------------------------
 Debugger: Disabled 
 ----------------------------
  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->

次にbootpとtftpがうまく動くようにOBS266とbootpdが動作するマシンのIPアドレスを明示的に設定します。

操作例を次に示します (例ではもともと明示的にIPアドレスが指定してあったので上書きするイメージになっています)。デフォルトではLOCAL: 0.0.0.0, REMOTE: 255.255.255.255となっています。

  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->3
---   CHANGE IP ADDRESS   ---
 Device List:
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
 ----------------------------
select device to change ->2
  1 - Change local address
  2 - Change remote address
  0 - Return to main menu
->1 [RETURN]
Current IP address = (192.168.100.80)
Enter new IP address ->Enter IP address in dot notation, (eg. 8.1.1.2)
192.168.100.80 [RETURN]
 --- Device Configuration ---
 Power-On Test Devices:
   000  Enabled   System Memory [RAM]
   002  Enabled   Ethernet      [ENET]
   003  Enabled   PCI Ethernet  [PCIENET]
 ----------------------------
 Boot Sources:
   001  Enabled   System FLASH  [FLASH]
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
   004  Enabled   Serial Port 1 [S1]
 ----------------------------
 Debugger: Disabled 
 ----------------------------
  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->3
---   CHANGE IP ADDRESS   ---
 Device List:
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
 ----------------------------
select device to change ->2
  1 - Change local address
  2 - Change remote address
  0 - Return to main menu
->2
Current IP address = (192.168.100.39)
Enter new IP address ->Enter IP address in dot notation, (eg. 8.1.1.2)
192.168.100.39
 --- Device Configuration ---
 Power-On Test Devices:
   000  Enabled   System Memory [RAM]
   002  Enabled   Ethernet      [ENET]
   003  Enabled   PCI Ethernet  [PCIENET]
 ----------------------------
 Boot Sources:
   001  Enabled   System FLASH  [FLASH]
   002  Enabled   Ethernet      [ENET]
                  LOCAL:  192.168.100.80
                  REMOTE: 192.168.100.39
                  MAC:    000A8501858E
   004  Enabled   Serial Port 1 [S1]
 ----------------------------
 Debugger: Disabled 
 ----------------------------
  1 - Enable/disable tests
  2 - Enable/disable boot devices
  3 - Change IP addresses
  4 - Ping test
  5 - Toggle ROM monitor debugger
  6 - Toggle automatic menu
  7 - Display configuration
  8 - Save changes to configuration
  9 - Set baud rate for s1 boot
  A - Enable/disable I cache (Enabled )
  B - Enable/disable D cache (Enabled )
  F - FLASH image update
  M - Memory Test
  0 - Exit menu and continue
->

設定を変更したら忘れずに"8"を押して設定を保存しておきましょう。

これで"0"を押せばbootpでIPアドレスなど諸々の情報を取得して、tftpを使ってkernelをロードするはずです。

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

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

# cd /usr/obs266
# pax -rvzpe -f base.tgz
# pax -rvzpe -f etc.tgz
# pax -rvzpe -f kern-OPENBLOCKS266.tgz

deviceを作ります。

# cd dev
# ./MAKEDEV all

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

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

例のメニューがでてくるので0を押してbootp経由でkernelを読み込むはずです。

bootp+NFSを利用したFlashからの起動

ネットワーク経由でひととおりの操作を試して問題がなさそうならばFlashにNetBSDのkernelを書き込みましょう。

といっても、先ほどのメニュー画面からFを選択してFlashを更新し、先ほどdisabledに設定したboot devicesでFlashをenableにするだけなのですが。

いまのところ、LinuxのようにNetBSD経由でFlashを更新することはできません。できるようになると便利なのですけどねぇ (設定モードにさようならできるし)。

HDDを利用したFlashからの起動

以下、草稿につきタイトルのみ

bootp+NFSで起動できるようになれば、HDDを使うことはとても簡単です。HDDにディストリビューションを書き込んで、適切な準備をしてあげればよいだけです。

  1. HDDのdisklabelを書く
  2. newfsする
  3. ディスクをマウントする
  4. ディストリビューションを展開する
  5. /etc/fstabを書く
  6. /dev/MAKEDEV allを実行する
  7. /etc/rc.confに設定を書く

HDDのdisklabelを書く

OBS266にはCFとIDE 2.5inch HDDのいずれかが内蔵可能ですが、ここではHDDを使っているものとして話を進めます。

また、bootp+NFSでブートしてシリアルコンソールから作業をしているものとします。

60GのHDDを次のような方針でパーティショニングすることとします。

# disklabel -i -I wd0

newfsする

newfsをする。ffsv2だと早い。

ディスクをマウントする

まず/をマウントして、マウントポイントを作ってからマウントする。

ディストリビューションを展開する

FTPかscpなどを使って*.tgzを手元に置いてforeach, paxで展開。

/etc/fstabを書く

fstabを作る。kernfsは動かない。

/dev/MAKEDEV allを実行する

うまく動かないのでprintfに変更してしまう。

/etc/rc.confに設定を書く

hostname, defaultrouter, ifconfig, sshd=YESなど

デバッガ (db>)に落ちる時のおまじない

sysctlで制御できることがある。

# sysctl -w ddb.fromconsole=0

/etc/sysctl.confに設定しておくと良い。

参考:http://www.tokuda.net/diary.gns/200503b.html#1402


HOME/ NetBSD/ OpenBlockS266