fe ドライバの使い方

FreeBSD で fe ドライバを使用する方法を、主としてカーネルの構成 (kernel configuration) の観点から説明します。

なお、以下の記述は AT 版の標準の FreeBSD に関するものです。FreeBSD(98) や PAO については、若干異なる部分があります。(これらについても、そのうち書きたいと思います。)

GENERIC カーネルの場合

FreeBSD のリリース版を初期インストールする場合、インストーラの実行中、および、インストーラが終了して最初にマルチユーザのシステムを起動した時点では、FreeBSD の GENERIC カーネル(*1)が動作しています。

GENERIC カーネルの構成の内容

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 ポートアドレスに設定されているならば、ドライバの設定を、ボードに合わせて変更する必要があります。

GENERIC カーネルの I/O ポートアドレスの変更

もしも使用するボードの I/O ポートアドレスが 0x300 以外に設定されていたならば、fe ドライバの設定をボードに合わせて変更する必要があります。fe ドライバの I/O ポートアドレスは、FreeBSD の起動のタイミングで、カーネルコンフィグレーションエディタを用いて変更することができます。具体的な手順は以下のとおりです。

  1. インストールが完了したシステムであれば、システムの起動時に表示される Boot: プロンプトに対して -c と入力し、カーネルコンフィグレーションエディタを起動してください。
  2. インストーラを起動しようとしているのであれば、Boot: プロンプトに対してはなにもせず、その後であらわれる Kernel Configuration Menu という画面で Start kernel configuration in CLI mode を選択して、カーネルコンフィグレーションエディタを起動してください。
  3. カーネルコンフィグレーションエディタで port fe0 port と入力してください。ここで port には、実際のボードの I/O ポートアドレスの設定値を指定してください。

なお、I/O ポートアドレスは、カーネル構成ファイルを変更してカーネルを再コンパイルすることでも変更できます。これについては以下を参照してください。

カーネルの構成

カーネル構成ファイルの記述 (FreeBSD 2.x の場合)

新しいカーネルで 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 以降の場合)

FreeBSD 3.1 では、vector feintrの部分は、カーネル構成ファイルに記述しないことになりました。上の例の場合は、以下のように記述して下さい。

device fe0 at isa? port 0x300 net irq 10

IRQ の自動設定

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 ?

I/O ポートアドレスの自動設定

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 ポートアドレスの自動設定機能は廃止されました。


*1: GENERIC カーネル
インストーラの実行中に動作するカーネルは、詳しく言うとインストーラ用の設定が加わっており GENERIC カーネルとまったく同じではありません。しかし、対応ハードウェアの点では GENERIC カーネルと違いがないため、ここでは同一のものとして扱っています。