山崎はるかのメモ
DEC21140使用カードをFreeBSD(98)に
-非常にめんどうだが なんとかなるもんだ-
●それはね
UGTOP(アルテミス)の石川先生の自宅から、私の4G-HDDと交換で もいできた「NEC PC9821Xa10」。
「一緒に 98陣営を守っていこうね」と あれほど約束していたのに、石川先生は「これ うっとうしいから はるかさんにあげるわ」と いともカンタンに 手放しやがった。うらぎりものー!
というわけで、うちに来た Xa10には Windows98とNTが入り、各種ソフトウェアの検証に使っていたのだが、さすがに動作が 重いため、このたび FreeBSD(98) 2.2.1R を載せて、セカンダリサーバにしてしまうことが決定した。
ふんふんふーん、と順調にセットアップが完了したのに、リブートしたら、突然「de0 ドライバが動いてないよん!」とメッセージ。
サーバである以上、NIC(イーサネットカード)が使えないのは 致命的である。
ケースを分解して カードを確かめてみると Elecom のLaneed LD-10/100AN だった。チップを見れば DEC の 21140AF。
このメジャーなチップをFreeBSDは認識しないのか? Linux では ちゃんと見るぞ!
というわけで カーネルソースを見た所、どこにも このチップのことが書かれていない。
念のため FreeBSD(98)2.2.8Rを見てみたが、やはり 記述がみつからない。
こりゃ オオゴトだ! ということで、まる1日を要する 悪戦苦闘が開始されたのである。
※記述がないだけで 2.2.8R-rev1では deドライバとしてデフォルトでちゃんと認識する。どうしても2.2.1Rを使わなければならない事情でもない限り、2.2.8Rを使えば これらの作業は必要ないと思う。
●わかってしまえば ラクなんだけど
いろいろ調べてみたのだが、やはり DECのチップを使うNICには みなさん苦労されているようで、PAOをいじったりしているようだが、やっぱ そりゃ不安定になるだろう。
やるなら なにがなんでも やはりカーネルの再構築である。私が知る範囲では、DECの21x4x チップを使ったカードは けっこう多い。
ブランド 製品 Elecom LD-10/100AN (チップがDE21140のもの) corega FastEther PCI-TX Adaptec ANA-6944A/Quartet TX PLANEX ENW-9501-F 上記以外にも けっこうなモノが出ているらしいのだ。
そこで DECのソースとヘッダーファイルがないかなー?と思って探してみたら...ありました、ありました。
http://www.3am-software.com/ にある 21x4x 用 de driver 、de-971020.tar.gz が使える。
これさえブチこんでおけば DECの高機能低価格チップセットを使ったイーサネットカードは ほぼ使えることになる。
ジャンクやワゴンセールのカードを引いてきても 安心だ。と、ここまでは いいのだが、NICそのものが 現在 眠っているわけだから、他のマシンでファイルを読まなきゃいけない。
それは いいんだけど、そのファイルを どうやって 本体に移送するんじゃ?というわけで、私は CD-R に カーネルソースと一緒に焼きこんで、移動することにした。
他の FreeBSD マシンから起こせば、FDD移送もできるかもしれんが 、めんどくさいからヤダ!
FDDしか移送手段のない人は フォーマットから しっかりやってくれ。
●さあ やるぞ
カーネルの再構築だから 多少の気合が必要だが、「最初から」「手順どおり」にしっかりやれば、かならず うまくゆく。
自信を持って いこうではないか!注意次項として、
- ここで書かれていることは マジで保証はできないから、よーく読んで「ムリだな!」と思うところが1ヶ所でもあったら、別の手段(カードを買い換えるなど)を検討せよ。
- 部分的に作業を省略するとロクなことがないから、わかっていても いちいち そのとおりにやったほうがいい。たとえば、ソースを引いてくるシーンは「すでにある」と勝手に判断せずに しっかり確認してやったほうがいい。
- ここに書かれていることは、FreeBSD(98)の標準セットアップがすでに完了していることが条件だ。つまり ブートしたら、コンソールからルートで入ることが可能な状態である。あたりまえのことだが、カードで障害を持っているのだから、外から telnetでやろうとは 考えるな。
だから この文書を使う際は、プリンターに出力して、ひとつずつ、チェックを入れながら進行したほうがよい。- 本家 FreeBSD を DOS/V上で 使った事がないから、この文書を 一部読み替えて FreeBSDbyDOS/Vで使えるかは確認していない。が、使えると思う。たぶん。
- あたりまえだが すべての作業はルート権限でやるべし。
じゃあ、がんばってみよう。
カーネル再構築手順
■1■デバイス情報の編集(UserConfig)
本当は
最初のインストールの段階で、カードの認識だけは完了して、ただ「使えないだけ」という状態だが、ごく例外的に
de0 が ハジかれている場合があるかもしれない。
その場合は Active Driversに、DEC DC21140 Ethernet Adapterを追加しよう。
場所は 特にカブリがない限り、de0 が適当だ。
なお 通常は この作業は必要ない。
■2■カーネルのソースを引いてくる
カーネルのソースを
最初のインストールに入れていない人がいるかもしれない。
その場合は /stand/sysinstall
でインストーラを起動して、「設定」→「配布ファイル」と選択して、カーネルのソースファイルをインストールしておこう。
■3■PC-9801/21用 差分ソースにカーネル用パッチをあてる
さあ、ここからが 本作業である。
まず 98用差分ソースは、だいたい FreeBSD(98)のCD-ROMなどに入っているので、そこから引いてくる。
#cd /cdrom/2.2.1-RELEASE/src98
#cp -p kern98.tar.gz /usr/src
このソースファイルへ カーネル用パッチを当てる。
#cd /usr/src
#tar xvzf kern98.tar.gz
#patch < patches/sys.diff
なお この作業を忘れると、この後のカーネルの再構築で まちがいなく失敗するから、絶対に忘れるな。
※この作業は 1度行えば、2度目以降の同様の作業においては必要ない
■4■DECのパッチモジュールを展開する
http://www.3am-software.com/
から取ってきた de-971020.tar.gz
を展開しよう。
作業自体は そのまま /usr/src の中で 行う。
#tar xvzf de-971020.tar.gz
この作業でできた 3つのファイルを /sys/pci に移動する。
#mv dc21040reg.h /sys/pci
#mv if_de.c /sys/pci
#mv if_devar.h /sys/pci
これが完了すると de-971020.tar.gz
はいらないから、/usr/src から消してかまわない。(置いといてもいいけどね。うっとうしいじゃん。)
■5■カーネル再構築コンフィグファイル作成(1)
標準で入っている GENERIC98(コンフィグファイル)を 任意のファイル名で コピーする
#cd /sys/pc98/conf
#cp /sys/pc98/conf/GENERIC98 DEC1
この「任意のファイル名」は
大事だ。
ここで「CHINPO」などと入れると、たとえ作業が成功しても、あとで
たいへんはずかしい。
FreeBSD (foo.bar.co.jp) (ttyp0) login: any Password:******* Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 2.2.1-RELEASE (CHINPO) #0: Sat May 10 09:44:03 GMT 1997 Welcome to FreeBSD! |
これは ファイナルファンタジー(8)の 犬の名前に「ポチ」とか入れて、ラスポスに突入したときぐらい「ショック」を受けるから、マジで 考え抜いた「任意のファイル名」を入れよう。
さて、ここからは ファイル名を DEC1 にしたと仮定してハナシを進める。
■6■カーネル再構築コンフィグファイル作成(2)
DEC1 の中にある設定を エディタを使って変更する。
#ee DEC1
すると 「ident GENERIC98」と書かれた行があるから、そこを「ident DEC1」に変更する。
■7■カーネル再構築準備
config コマンドで カーネルコンパイルの準備をする。
#config DEC1
すると 「Kernel build directory is ../../compile/DEC1」と表示される。
エラーが出れば、最初から
自分のやってきたことを検討しよう。
エラーの原因のほとんどが、3〜4のパッチあてが不充分だからだ。
■8■カーネル再構築!
さあ やっと ここまできたぞ!
長かったな!
カーネルをコンパイルしよう。
#cd ../../compile/DEC1
#make depend;make
ついに
コンパイルが開始される。画面一杯になにやら文字が出てくるぞ。(約10分)
それが正常に終わると、
Loading Kernael Rearranging symbols
Text data bss dec hex
Xxxx xxxx xxx xxx xxx (←x の部分は数字 )
と表示され、バイナリ実行カーネルファイルが完成する。
おもむろに、
#make install
とした後、システムをリブートしよう。
#shutdown -r now
■9■念願の諸設定
おつかれさま!
リブートが完了したら、 /stand/sysinstall
を使って、「ネットワーク」の中の ed0 を
きちんと設定しよう。
Ping を飛ばして 戻ってくれば成功だ!
でも 万が一 うまくいかなかった方。
それは よほどのことだから FreeBSD全体の
再インストールをするか、対応カードに変更したほうがいいかもよ。
(99/06/05・山崎はるか)
Network Diamond Apricot - SOHKA.JSC