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 |