SunOS 4.x カーネルへ FDDI ドライバをスタティックリンクする方法 1998/01/10 nsasaki@da2.so-net.ne.jp (sasaki@thinkfree.co.jp is closed) SunFDDI は、SPARC システムの Sbus/PCIbus に追加するカードです。 Sbus用は 1つのスロットで、シングルエンド、またはデュアルエンドの FDDI リンクをサポートします。 コネクタは SC 形式で、MIC への変換ケーブルが付属しています。 SunFDDI 5.0 のドライバは、 SunOS 4.x 配下ではダイナミックローダブルモジュールとして使用するよう マニュアルに記述されています。 一般的にはこれ以外のドライバ使用法はなく、マニュアルにも、 「カーネルがローダブルモジュールをサポートしていないなら、 ちゃんとローダブルモジュールを使えるカーネルにしてからインストールしてね」 という意味のことが書いてあります。 ところが、インストールスクリプト内にはどうやらスタティックリンクできそうな 記述があります。 スクリプト内ではその部分は動かないようになっているのですが、 手動でやってみました。 なんとか動いているようなので、その方法を記録しておきます。 今回やってみたのは、 SunFDDI SAS X1025A + SS20 同等品 + 日本語 Solaris 1.1.2 です。 但し、この方法はメーカーからのサポートは一切受けられなくなると予想されます。 これは私の私的な記録であり、もちろん私も何の保証も致しませんのでご了承ください。 メーカーもサポートしないことをやってみようという方は少ないと思いますが、 「あらできるのね」程度にやってみたい方の参考になれば幸いです。 1. 必要なファイル SunFDDI 5.0 の CDROM で提供されるドライバには、 ・すでにコンパイル済みのオブジェクト ・変更可能なパラメータを記述してあるソースファイル ・インストールスクリプト などが、OS のバージョン毎/カーネルアキテクチャ毎に含まれています。 必要なものは使用する OS ディレクトリ配下の カーネルアーキテクチャ配下にある ファイル群です。 たとえば、SunOS 4.x を sun4m のマシンで使用している場合、 sol_1.1.x/5.0_FDDI_S/sun4m/* が必要なファイルです。 これ以降、sun4m の部分は、arch -k を実行した結果に置き換えて読んでください。 この配下は、次のような構成になっています。 ( + で記述してあるのはディレクトリ配下であることを示すものです) nf/ +install/ インストール用のシェルスクリプト +man/ マニュアル +sys/ /sys 配下にインストールすべきファイル +usr/ /usr 配下にインストールすべきファイル このうち、 カーネルへのスタティックリンクの際に必要なのは +sys/ 配下のファイルです。 次のものが含まれています。 +sys/ +sun4m/ +OBJ/ if_nf.mcast.o if_nf.o nf_conf.o nf_smtcore.mcast.o nf_smtcore.o smt.mcast.o smt.o vmunix* +sunif/ nf_conf.c また、実際にインストーラーを起動したときに動作する次のシェルスクリプトに、 スタティックリンクのヒントが書かれています。 +install/ install_nf* 2. オブジェクトとソースファイルのコピー 必要なオブジェクトファイルとソースファイルを、 システムディレクトリにコピーします。 基本的には CDROM に含まれる +sys/ 配下をそのままシステムディレクトリに コピーすればよいのですが、 sys/sun4m/OBJ/vmunix もコピーされてしまいます。 このファイルはカーネル内のシンボルサンプルを行うために含まれている、 と考えているのですが、真相は知りません。 とにかくコピー先には必要がないので、コピーしないようにしてください。 あっても実害はありませんが、なんとなくキモチ悪いと思います。 3. カーネル構成のためのファイル書き換え ここでは、カーネルの再構成の方法については詳しく触れません。 既に知っているものとして話を進めさせていただきます。 # こんなことをしようとする人が知らない訳がないですよね? ここで参考になるのが、install/install_nf です。 このインストールスクリプトを読むと、 update_files() update_conf() という 2つの内部関数に出会いますが、どこからも呼ばれている形跡がありません。 多分この部分を動作させるようにすれば、 自動でファイル書き換えをやってくれると思いますので、 この部分を有効にしてスクリプトを流すのが手っ取り早いかもしれません。 ですが、ここでは手動でやってみることにします。 書き換える必要があるのは、 /sys/`arch -k`/conf/files /sys/`arch -k`/conf/(カーネルコンフィグファイル) の 2つです。 3.1. files の書き換え カーネルへのリンクに必要なオプションソースを指定してあるファイルです。 標準では nf や hme のドライバに関する記述はありませんので、 この定義を追加してやる必要があります。 インストーラーの内部関数では update_files() が行っています。 インストーラーでは、 sunwindow という定義の次行以降に、次のような行を追加する処理を行っていますので、 これを手動で書き足します。 -------- # # Support for the SunFDDI Controller # sunif/smt.c optional smt device-driver sunif/nf_smtcore.c optional smt device-driver sunif/if_nf.c optional nf device-driver sunif/nf_conf.c optional nf device-driver -------- 3.2. カーネルコンフィグファイルの書き換え カーネルコンフィグファイルは、一番最初の状態では GENERIC です。 このファイルにも nf デバイスの追加を行います。 インストーラーの内部関数では update_conf() が行っています。 あたりまえですが GENERIC を変更するのではなく、 GENERIC をコピーした新しいものに変更を加えると思います。 ここでは FDDI 等にコピーして行いましょう。 ブート時にそのことを確かめられるよう、 ident "FDDI" とするのも忘れないようにしましょう。 インストーラーでは、他に必要なドライバやオプションが入っているかをチェックし、 なければそれを追加したあとに nf デバイスの定義を追加するようになっています。 他に必要なオプションやドライバは次のものですので、この定義が含まれているかを 確認してください。なければ追加する必要があります。 -------- # # The following options are for various System V IPC facilities. # Most standard software does not need them, although they are # used by SunGKS and some third-party software. # options IPCMESSAGE # System V IPC message facility options IPCSEMAPHORE # System V IPC semaphore facility options IPCSHMEM # System V IPC shared-memory facility # # The following are for streams NIT supp ort. NIT is used by # etherfind, traffic, rarpd, and ndbootd . As a rule of thumb, # NIT is almost always needed on a serve r and almost never # needed on a diskless client. # pseudo-device snit # streams NIT\ pseudo-device pf # packetfilter pseudo-device nbuf # NIT buffering module # # The following is for the \"clone\" device, used with streams devices. # This is required if you include streams NIT support, RFS, or an audio # device. # pseudo-device clone # clone device -------- これらの定義がされていることを確認した上で、次の定義を追加します。 -------- # # Support for the SunFDDI Controller # pseudo-device smt2 # smt is a hook for station management"); device-driver nf # FDDI/S "); device nf0 device nf1 # ひとつしかいらなきゃ追加する必要はない -------- これらの定義が終了すれば、あとは新しいコンフィグファイルで config して、 make すれば FDDI ドライバがスタティックリンクされます。 4. おまけ おまけに、FDDI の MTU サイズを変更する方法を記述しておきます。 デフォルトの状態では RFC1188 に従って 4352 に定義されています。 この大きさを変更するには /sys/sunif/nf_conf.c を書き換えます。 このソースファイルの中に MTU サイズがハードコードされています。 この中から nf_mtu という変数を探し、例えばそのサイズを 1500 にしてやると MTU は 1500 に変更されます。 # ソースの中では既に定義されており、コメントになっています。 ささき sasaki@thinkfree.co.jp nsasaki@da2.so-net.or.jp