山崎はるかのメモ

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. ここで書かれていることは マジで保証はできないから、よーく読んで「ムリだな!」と思うところが1ヶ所でもあったら、別の手段(カードを買い換えるなど)を検討せよ。
  2. 部分的に作業を省略するとロクなことがないから、わかっていても いちいち そのとおりにやったほうがいい。たとえば、ソースを引いてくるシーンは「すでにある」と勝手に判断せずに しっかり確認してやったほうがいい。
  3. ここに書かれていることは、FreeBSD(98)の標準セットアップがすでに完了していることが条件だ。つまり ブートしたら、コンソールからルートで入ることが可能な状態である。あたりまえのことだが、カードで障害を持っているのだから、外から telnetでやろうとは 考えるな。
    だから この文書を使う際は、プリンターに出力して、ひとつずつ、チェックを入れながら進行したほうがよい。
  4. 本家 FreeBSD を DOS/V上で 使った事がないから、この文書を 一部読み替えて FreeBSDbyDOS/Vで使えるかは確認していない。が、使えると思う。たぶん。
  5. あたりまえだが すべての作業はルート権限でやるべし。

じゃあ、がんばってみよう。

 


カーネル再構築手順

デバイス情報の編集(UserConfig)

本当は 最初のインストールの段階で、カードの認識だけは完了して、ただ「使えないだけ」という状態だが、ごく例外的に de0 が ハジかれている場合があるかもしれない。
その場合は Active Driversに、DEC DC21140 Ethernet Adapterを追加しよう。 場所は 特にカブリがない限り、de0 が適当だ。
なお 通常は この作業は必要ない。

 

2カーネルのソースを引いてくる

カーネルのソースを 最初のインストールに入れていない人がいるかもしれない。
その場合は /stand/sysinstall でインストーラを起動して、「設定」→「配布ファイル」と選択して、カーネルのソースファイルをインストールしておこう。

 

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度目以降の同様の作業においては必要ない

 

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 から消してかまわない。(置いといてもいいけどね。うっとうしいじゃん。)

 

カーネル再構築コンフィグファイル作成(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 にしたと仮定してハナシを進める。

 

カーネル再構築コンフィグファイル作成(2)

DEC1 の中にある設定を エディタを使って変更する。

#ee DEC1

すると 「ident GENERIC98」と書かれた行があるから、そこを「ident DEC1」に変更する。

 

カーネル再構築準備

config コマンドで カーネルコンパイルの準備をする。

#config DEC1

すると 「Kernel build directory is ../../compile/DEC1」と表示される。
エラーが出れば、最初から 自分のやってきたことを検討しよう。
エラーの原因のほとんどが、3〜4のパッチあてが不充分だからだ。

 

カーネル再構築!

さあ やっと ここまできたぞ!
長かったな!

カーネルをコンパイルしよう。

#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

 

念願の諸設定

おつかれさま!
リブートが完了したら、 /stand/sysinstall を使って、「ネットワーク」の中の ed0 を きちんと設定しよう。
Ping を飛ばして 戻ってくれば成功だ!

でも 万が一 うまくいかなかった方。
それは よほどのことだから FreeBSD全体の 再インストールをするか、対応カードに変更したほうがいいかもよ。

 

(99/06/05・山崎はるか)


Network Diamond Apricot - SOHKA.JSC

■メモエリアに戻る