OpenBlockS266 (以下、OBS266と略す) にNetBSDを入れて遊んでいます。
初代OpenBlockSについてはOpenBlockS de NetBSDページを御覧ください。
OpenBlockS200についてはOpenBlockS200 de NetBSDページを御覧ください。
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なカードを抜くと刺さりますが、その他の動作は問題ありません。 |
OBS266は次に示す二種類のブート方法をサポートしています
IDE (HDDやCF) からのブートはサポートしていないようです。
Flashメモリからのブートはいわゆる通常のブート方法です。bootp + tftpを使ったブート方法はディップスイッチを変更するなど多少の設定が必要です。
NetBSDをブートさせてやるには、NetBSD/evbppcのカーネル設定ファイルであるsys/arch/evbppc/conf/OPENBLOCKS266をbuildして作成されたカーネルイメージをFlashに書き込んだりtftpで取得可能な場所においてやればOBS266がカーネルをロードしてブートしてくれます。
カーネルイメージファイルはnetbsd.imgなど拡張子に.imgがついているファイルです。一般的に使われているnetbsdというファイルではブートできません (手動でカーネルをコンパイルすると両方作成されるはずです)。
カーネルイメージをFlashに書き込む方法としては、次の二つがあります。
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でkernelをロードし、ファイルシステムをNFSでマウントする場合について説明します。
OBS266に関するファイルはすべて/usr/obs266に展開することにします。
まずは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
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のロードと起動まで動くようになっているはずです。
先ほどの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と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を読み込むはずです。
ネットワーク経由でひととおりの操作を試して問題がなさそうならばFlashにNetBSDのkernelを書き込みましょう。
といっても、先ほどのメニュー画面からFを選択してFlashを更新し、先ほどdisabledに設定したboot devicesでFlashをenableにするだけなのですが。
いまのところ、LinuxのようにNetBSD経由でFlashを更新することはできません。できるようになると便利なのですけどねぇ (設定モードにさようならできるし)。
以下、草稿につきタイトルのみ
bootp+NFSで起動できるようになれば、HDDを使うことはとても簡単です。HDDにディストリビューションを書き込んで、適切な準備をしてあげればよいだけです。
OBS266にはCFとIDE 2.5inch HDDのいずれかが内蔵可能ですが、ここではHDDを使っているものとして話を進めます。
また、bootp+NFSでブートしてシリアルコンソールから作業をしているものとします。
60GのHDDを次のような方針でパーティショニングすることとします。
# disklabel -i -I wd0
newfsをする。ffsv2だと早い。
まず/をマウントして、マウントポイントを作ってからマウントする。
FTPかscpなどを使って*.tgzを手元に置いてforeach, paxで展開。
fstabを作る。kernfsは動かない。
うまく動かないのでprintfに変更してしまう。
hostname, defaultrouter, ifconfig, sshd=YESなど
sysctlで制御できることがある。
# sysctl -w ddb.fromconsole=0
/etc/sysctl.confに設定しておくと良い。
参考:http://www.tokuda.net/diary.gns/200503b.html#1402