スポンサーリンク

DRIVER(9) FreeBSD カーネル開発者マニュアル DRIVER(9)

名称

driver − デバイスドライバを記述する構造体

書式

#include <sys/param.h>
#include <sys/bus.h>

static int foo_probe(device_t);
static int foo_attach(device_t);
static int foo_detach(device_t);
static int foo_frob(device_t, int, int);
static int foo_twiddle(device_t, char *);

static struct device_method_t foo_methods[] = {

/* デバイスインタフェースからのメソッド */

DEVMETHOD(device_probe,

foo_probe),

DEVMETHOD(device_attach,

foo_attach),

DEVMETHOD(device_detach,

foo_detach),

/* bogo インタフェースからのメソッド */

DEVMETHOD(bogo_frob,

foo_frob),

DEVMETHOD(bogo_twiddle,

foo_twiddle),

/* メソッドリストの終端 */

{ 0, 0 }

};

static driver_t foo_driver {

"foo",

foo_methods,

sizeof(struct foo_softc)

};

static devclass_t foo_devclass;

DRIVER_MODULE(foo, bogo, foo_driver, foo_devclass, 0, 0);

解説

カーネルの中の個々のドライバは driver_t 構造体によって記述されます。この 構造体はデバイスの名称、メソッドのリストへのポインタ、ドライバが実装した デバイスの種類の表示、およびドライバがデバイスインスタンスに関連付けるた めに必要な私的データの大きさを含んでいます。各々のドライバは 1 つ以上の ( インタフェースと呼ばれる) メソッドの組を実装します。上記の例のドライバは 標準の "driver" インタフェースと仮想的な "bogo" インタフェースを実装して います。

ドライバが ( DRIVER_MODULE マクロによって、 DRIVER_MODULE(9) を参照) シス テムに登録される時に、その親のバスタイプの devclass の中に含まれているド ライバのリストに追加されます。例えば、全ての PCI ドライバは "pci" と名付 けられた devclass に含まれ、全ての ISA ドライバは "isa" と名付けられた devclass に含まれます。ドライバが親のバスのデバイスオブジェクトの中に保持 されない理由は、与えられたバスのタイプの複数のインスタンスを取り扱うため です。 DRIVER_MODULE マクロはそのドライバの名前の devclass も生成します。 最後の 2 つの引数として追加のモジュールイベントハンドラとその引数を与える ことによって、オプションでドライバの追加の初期化コードを呼び出すことがで きます。

関連項目

devclass(9), device(9), DEVICE_ATTACH(9), DEVICE_DETACH(9), DEVICE_IDENTIFY(9), DEVICE_PROBE(9), DEVICE_SHUTDOWN(9), DRIVER_MODULE(9)

作者

このマニュアルページは Doug Rabson が書きました。

FreeBSD 10.0 June 16, 1998 FreeBSD 10.0

スポンサーリンク