第11回 PC110でNetBSD

2002/11/17作成
2003/02/02更新


その昔、IBMからPC110というかなりキワモノなPCが発表されました。
そのPC110を会社の先輩に激安で譲ってもらったのですが、添付バッテリーはすでにお亡くなりになっていて、ヒンジ部分が破損して、ディスプレイ開閉の取っ手もなんだか調子悪い状態でした。
とりあえず、ヒンジを直さないと安心して使えなかったのでここだけ針金とアロ○アルファでくっつけてなおして外見は見られるようになりました。
ですが、スペックの方も貧弱で4MBのメモリがMS-DOSの動作しか許してくれません。
MS-DOSでは将来性は絶望的なのでこの子にUNIXの世界を見せてやることにしました。



1.PC110とNetBSD

PC110が世間に発表されてから、もうじき10年が経とうとしています。
当時はPentiumプロセッサが出たかこれから出るかといった時代でした。そんな時代に生まれたPC110のスペックはこんなものでした。
製造元 IBM
製品名称 PalmTop PC110
CPU SL Enhanced i486SX-33MHz
メインメモリー 標準4MB(最大8MB)
HDD なし(4MB内蔵フラッシュメモリ付き)
FDD なし(FDD付きモデルも有り)
オプションスロット PCMCIA type2 2基、フラッシュ専用CFスロット1基
内蔵モデム 2400bps(FAX 9600bps)
添付OS PC-DOS J7.0/V(Windows3.1モデルも有り)
寸法 158(W)x113(H)x33(D) 630g (ハガキサイズ)
PC110には3つのモデルが用意されていて、2431-YD0,YD1,YDWというのがありました。
私の手元にあるのはYD0なので最低スペックです。YDWになるとメモリもたっぷり(?)8MBで、ポートリプリケータにFDDも付いてきます。
このサイズはかなり魅力的なので貧弱なスペックをなんとかしようとT-ZONEなどからメモリを20MBにするものや、モデムを33.6にするキットなどが出回りました。今でもたまにネットオークションで見かけますが、大抵は法外な値段設定です。
ということでPC110の写真です。
もう一人の主役、NetBSDはFreeBSDなどと同様に*BSDの系統を成すものです。FreeBSDよりも技術的に先を走っている感じがあります。
KAMEなどのIPv6対応やUSBやオーディオなどのマルチメディア機器のモジュールが出るのが早いようです。
また、i386以外にもいろんなマシンでの動作実績があるのも特徴です。ドリームキャストやプレステ2、PDAなどにNetBSDを移植するというかなり専門的な知識を有するプロジェクトがいくつも走っています。
ただ、残念なことにあまりドキュメントがそろっていません。
基本的にNetBSD使いはソースを読んでなんとかしちゃう人が多いようなのでドキュメントが少ないのではないかと思います。

2.CFカードをPC110のブートデバイスにする

PC110には4MBの内蔵メモリしかないので、CFカードかPCMCIAのメモリやHDDが主にブートデバイスになります。
PCMCIAを使うとせっかく2つあるPCMCIAスロットが1個減ってしまうのでコンパクトフラッシュカードを使うことにします。
PC110でCFカードからブートさせるには以下の方法でBIOS設定をします。
(1) CFカードを入れる
(2) F1キーを押しながら電源を入れる
(3) Easy-SetupからStart upを選択
(4) HDD-2を選択してOKを押す(CFカードを事前に入れておかないとHDD-2が出てきません)
(5) Restartして終了
こちらの写真はBIOS設定で1番目にCF、2番目にFDDが起動するように変更したものです。でも、うちのはポトリが付いていないのでFDDでの起動は無理です。

3.NetBSDをCFにインストールする

CFカードという特殊なメディアにNetBSDをインストールしてブートデバイスにするにはコツがいります。
私が思いついたのでは3つくらい方法がありました。
(1) PCカードのストレージをインストールドライブに指定できるノートPCなどを使ってインストールする
(2) IDE<->CF変換キットを使ってインストールする
(3) NetBSDが既にインストールされているPCMCIAスロット付きPCから地道にファイルをコピーする
(1)の方法はIBMのThinkPadシリーズを使えばOKです。BIOSの設定を変えつつインストールできます。
ポートリプリケータとFDDが利用可能なPC110ではこの方法がいちばん確実だと思います。
私もThinkPad535Eを持っていたのでこの方法が使えるはずだったのですが、FDDが壊れて動かなかったので使えませんでした。
(2)の方法を結局採用したのですが、最近CFをIDEに変換するキットが3000円くらいで出ているのでこれを使ってデスクトップPCからインストールできます。
ただし、マザーボードのBIOSでHDDを認識しない場合がほとんどなので、手動でセクタやシリンダの設定をしないとダメなようです。
でも、BIOSで認識しなくてもインストール時には認識してくれるのでただインストールするだけではBIOSの設定は必須ではありません。
(3)は難しいのでやってません。fdiskやdisklabelなどを使ったあとで、必要なファイルをコピーして手動で/devを構築したりしなければいけないのでかなり高度な知識を必要とされると思います。
こちらの写真は今回インストールに使用したツールです。
(左)2.5インチのIDEを3.5インチに変換するアダプタ。\1000あればお釣りが来ます。
(中上)256MBのコンパクトフラッシュメモリー。時価。私が買ったときは\15000くらい。
(中下)CFを2.5インチIDEに変換するアダプタ。\3000でお釣りが来ると思います。
(右)CFをPCMCIAに変換するアダプタ。PHSに付いてきたやつの使い回しです。作業用PCに入れるときに使います。買っても\1000くらいです。
CFを3.5インチHDDとして認識させるためには左の3つをくっつけてこんな感じになります。

4.作業用PCの準備

作業用のPCを準備するにはいくつかの理由があります。
(1) CFにインストールするときに使う
(2) PC110用のカスタムカーネルを作る
(3) /etc配下の設定ファイルいじる
(4) pkgの追加をする
(5) PC110が動いてからはCFの少ない容量を補うためNFSサーバになる
ということで、作業用PCにはPCカードが使えて、カーネルのコンパイル環境が整っている必要です。ノートPCにコンパイラも一緒に入れるあげましょう。
また、カーネルソースはインストール時に入手できないので、NetBSDのサイトからソースを入手します。
ソースはftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.X/source/sets/syssrc.tgzに置いてあります。
今回利用する1.6のカーネルソースはftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.6/source/sets/syssrc.tgzになります。
あとはソースを展開しますが、tarがルートディレクトリから束ねてあるので-Cオプションをつけなければいけません。
Apacheに代表されるソースを展開を経験したことがある人は違和感を感じるかもしれません。
"-C /"を入れるのはルートに変なファイルが展開されないか不安なので勇気のいる作業です。
# tar zxvf syssrc.tgz -C /
マシンパワーにもよりますが、ソースが大きいので展開するにはかなり時間がかかりました。
ちなみに今回私が用意したのはCompaqのLTE5280というPCで、Pentium133,32MB,2GBというやっぱり時代遅れの代物ですが、NetBSDを動かすには十分です。
でも、ソースの展開には5分から10分くらいかかっていました。

5.インストール作業

今回はNetBSD 1.6を導入することにします。
NetBSDのインストール方法についてはいろんな方法があるのでここでは特に述べません。
FDでもBootable CD-ROMでも好きな方法でインストールしてください。
CFカードのインストールは3に書いた方法から適当に選んでください。
インストールのときのコツは、、パッケージを選ぶとき、今回の場合256MBという容量や4MBメモリ、33MHzというCPUパワーを考えるとあまりたくさんは入れられないのでLaptopカーネルとbaseとetcくらいに絞っておくことです。

6.カーネルの再構築

インストールが完了後、PC110に入れて電源を入れてみます。
ブートローダーが立ち上がり、カーネルを読み込むのですが、途中で止まってしまいます。
実はLaptopカーネルをインストールしましたが、このカーネルのサイズが4MB以上なっているので4MBのメインメモリからあふれてしまったのです。
よって、カーネルの絞り込み、なんとかメインメモリに収まるサイズにしなければなりません。
PC110はいまだに立ち上がらないのでカーネルの再構築なんてできません。
ここで登場するのが4で用意した既に同じバージョンNetBSDがインストール済みの作業用PCになります。

NetBSDのカーネルの構築は、FreeBSDのカーネルの作り方とほとんどかわりません。まったく同じと言っていいでしょう。
FreeBSDの場合、カーネルファイルが/usr/src/sys/i386/conf/にありますが、NetBSDの場合は/usr/src/sys/arch/i386/conf/にありました。arch配下にはppcやらsparcやらいろんなのが入っていました。NetBSDらしいです。
そのconfディレクトリにはlaptop用にカスタマイズされたGENERICカーネルがあるのでこいつをコピーして使うことにします。
今回、PC110にはNICを2枚入れて世界最小のIPv6ルータを作ってみたいという目的があったので、NIC関連のドライバとIP関連のモジュールは残してあります。そのかわり、外付けのドライブとかは必要ないのでSCSIまわりのドライバは消してあります。
うちのカーネルはこちらにあります。

カーネルファイルを編集したらconfigしてmake dependしてmakeします。
# cd /usr/src/sys/arch/i386/conf
# cp GENERIC_LAPTOP PC110
# vi PC110
(ここでカーネルファイルを編集します)
# config PC110
# cd ../compile/PC110
# make depend
# make
普段ならここでmake installをするのですが、カーネルをインストールするのはPC110のCFなのでやめておきます。
make が終わった時点でPC110ディレクトリにカーネルができているのでこれをCFにコピーします。
本当はmake installしてモジュールやライブラリも新しく書き換えるのといいのですが、GENERICから新しい機能が追加されたわけではないので、モジュール類は前のままでカーネル本体を差し替えるだけで問題ないようです。
念のため、もとのカーネルはonetbsdという名前で保存しておきましょう。
# mount /dev/wd1a /mnt
# cp /mnt/netbsd /mnt/onetbsd
# cp /usr/src/sys/arch/i386/compile/PC110/netbsd /mnt/
# cd /
# umount /mnt
あとはCFカードをPC110に戻して起動します。

7./etcファイルの編集

カーネルを差し替えると、なんとなく立ち上がってきました。
でも、ファイルシステムのマウントに失敗します。
それもそのはず、インストールしたときのディスクとではディスクラベルが違うのです。インストール時はCFカードはwd0だったのですが、PC110ではwd1になっています。
マウント関連の情報は/etc/fstabなので、こいつを編集してwd1にします。
# vi /etc/fstab
/dev/wd1a / ffs rw 1 1
/dev/wd1b none swap sw 0 0
これでうまくディスクのマウントができるはずなのですが、swapがうまく使えていないせいでやっぱり止まってしまいます。
BSD系の起動では、まずカーネルを読み込み、次にrcファイルを実行しに行きます。
NetBSDではrcファイルには実体は無く、rc.dディレクトリを読みに行くようにrcに書かれています。
それを読んでいくとかなり最後の方でswapがマウントされるようになっているため、そこまでメモリが追いつかないみたいなのです。
なので、rcファイルの一番頭にswaponを書いてあげることにします。
でも、これだけではダメです。
rc.dには他にもいろんなデーモンやアプリの起動スクリプトが置いてありますが、この中にはPC110で動かすには無理があるものや起動してくれないものがおおいのです。
全部試したわけではありませんが、こんなのがありました。
起動しないもの sysdb,motd,inetd
起動はするが時間がかかるもの sshd,syslogd,ttys
sshdなんかは初回起動時に鍵を3つ生成するのですが1本生成するのに30分くらいかかってました。
起動しないものはおそらくswapin swapoutをくりかえしていて、その都度CPU処理が持って行かれてしまい立ち上がれないのでしょう。
2,3時間待っても上がってこないのであきらめましたが、じつは2日くらい待てば上がってくるのかもしれません(笑)
ということもあるので、PC110用にはrcファイルにはほとんどなにも書かずに手動で組み込むことにしました。
これっぽっちしかかいてません(笑)
#!/bin/sh

export HOME=/
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
umask 022
/sbin/swapon -a
こちらが起動の証拠写真です。
この後ログインとかしてみると、ログインが完了するまでたっぷり30秒くらいかかります(笑)
このあとは手動でifconfig打ってみたり、ファイルシステムを再マウントしてみたりします。
現在はこんな原始的なことをやっていますが、rc.dは便利なのでもう少し勉強して少しずつ戻していきたいと思っています。

8.おまけ

dmesgつけておきます。

参考文献

IBM PC110ライブラリ http://www-6.ibm.com/jp/pc/prod/ha/110.html
NetBSD Project(日本語) http://www.jp.netbsd.org/ja/
NetBSDオペレーティングシステム 簡単なガイド http://nobug.tukusi.ne.jp/netbsd-guide/trans/netbsd.html


もどる