FreeBSD で fe ドライバを使用する方法を、主としてカーネルの構成 (kernel configuration) の観点から説明します。
なお、以下の記述は AT 版の標準の FreeBSD に関するものです。FreeBSD(98) や PAO については、若干異なる部分があります。(これらについても、そのうち書きたいと思います。)
FreeBSD のリリース版を初期インストールする場合、インストーラの実行中、および、インストーラが終了して最初にマルチユーザのシステムを起動した時点では、FreeBSD の GENERIC カーネル(*1)が動作しています。
2.0.5 以降の FreeBSD では、GENERIC カーネルには fe ドライバが標準で組みこまれています。対応するボードは、リリースによって若干異なりますが、FreeBSD 2.2.7 では以下のボードに対応しています。
これらのボードはどれも、割り込み (IRQ) の自動設定に対応しており、また、GENERIC カーネルでは、カーネル構成ファイルによって fe ドライバの IRQ 自動設定が有効になっています。このため、IRQ に関しては、ボードの設定が他のボードの IRQ と重なっていなければ、特別に意識しなくとも fe ドライバが動作します。
GENERIC カーネルでは、fe ドライバの I/O ポートアドレスは 0x300 になっています。使用するボードの I/O ポートアドレスが 0x300 に設定されていれば、そのままの GENERIC カーネルで動作するはずです。もしも、使用するボードが異なる I/O ポートアドレスに設定されているならば、ドライバの設定を、ボードに合わせて変更する必要があります。
もしも使用するボードの I/O ポートアドレスが 0x300 以外に設定されていたならば、fe ドライバの設定をボードに合わせて変更する必要があります。fe ドライバの I/O ポートアドレスは、FreeBSD の起動のタイミングで、カーネルコンフィグレーションエディタを用いて変更することができます。具体的な手順は以下のとおりです。
port fe0 port
と入力してください。ここで port
には、実際のボードの I/O ポートアドレスの設定値を指定してください。なお、I/O ポートアドレスは、カーネル構成ファイルを変更してカーネルを再コンパイルすることでも変更できます。これについては以下を参照してください。
新しいカーネルで fe ドライバを使用するためには、カーネル構成ファイルに以下のような行を追加してください。
device fe0 at isa? port port net irq irq vector feintr
ここで、port
には、fe ドライバを使用するイーサネットボードが占める I/O ポートアドレス (の先頭のアドレス) を記述してください。また、irq
には、割り込み番号を記述してください。その他の部分は、変更せずに、このまま記述してください。
例えば、あるボードが I/O ポートアドレス 0x300 (から 0x31F まで) を占めていて、割り込みとして IRQ 10 を使用するならば、このボードための device 行は以下のようになります。
device fe0 at isa? port 0x300 net irq 10 vector feintr
FreeBSD 3.1 では、vector feintr
の部分は、カーネル構成ファイルに記述しないことになりました。上の例の場合は、以下のように記述して下さい。
device fe0 at isa? port 0x300 net irq 10
fe ドライバには、IRQ の自動設定機能があります。ISA 版、または CBUS 版のイーサネットカードを fe ドライバで使用する場合、ボードのハードウェアがソフトウェアによる IRQ の検出に対応していれば、カーネル構成ファイル中で明示的に IRQ を記述する必要はありません。
IRQ の自動設定を利用する場合は、カーネル構成ファイル中の irq
として?
と記述してください。具体的には、以下のようになります。
FreeBSD 2.x の場合:
device fe0 at isa? port 0x300 net irq ? vector feintr
FreeBSD 3.1 以降の場合:
device fe0 at isa? port 0x300 net irq ?
fe ドライバの古い版には、I/O ポートアドレスの自動設定機能があります。一部のボードでは、カーネル構成ファイルに明示的に I/O ポートアドレスを記述せずに、fe ドライバに適切な I/O ポートアドレスを探させることができます。
I/O ポートアドレスの自動設定機能を利用する場合は、カーネル構成ファイル中の port
として ?
と記述してください。具体的には、以下のようになります。
FreeBSD 2.x の場合:
device fe0 at isa? port ? net irq ? vector feintr
fe ドライバの I/O ポートアドレスの自動設定機能には、実はいくつかの問題があります。中でも致命的なのは、きちんと設定されている他のボードに悪影響を与えるおそれがある点です。筆者は、この機能を使用しないことを勧めます。
なお、FreeBSD 3.1 では、fe ドライバの I/O ポートアドレスの自動設定機能は廃止されました。