DRIVER_MODULE(9) | FreeBSD Kernel Developer's Manual | DRIVER_MODULE(9) |
名称
DRIVER_MODULE, DRIVER_MODULE_ORDERED, EARLY_DRIVER_MODULE, EARLY_DRIVER_MODULE_ORDERED — カーネルドライバ宣言マクロ書式
#include < sys/param.h>#include < sys/kernel.h>
#include < sys/bus.h>
#include < sys/module.h>
DRIVER_MODULE( name, busname, driver_t driver, devclass_t devclass, modeventhand_t evh, void *arg);
DRIVER_MODULE_ORDERED( name, busname, driver_t driver, devclass_t devclass, modeventhand_t evh, void *arg, int order);
EARLY_DRIVER_MODULE( name, busname, driver_t driver, devclass_t devclass, modeventhand_t evh, void *arg, enum sysinit_elem_order order, int pass);
EARLY_DRIVER_MODULE_ORDERED( name, busname, driver_t driver, devclass_t devclass, modeventhand_t evh, void *arg, enum sysinit_elem_order order, int pass);
解説
DRIVER_MODULE() マクロは、カーネルドライバを宣言します。 DRIVER_MODULE() は、実際のドライバ宣言に拡張し、ここで、フレーズ name は、ドライバとその関数のための名前の接頭辞として使用されます。char
または
char *
ではなく、プレインテキストとして供給されることに注意してください。
busname は、ドライバ (PCI, ISA, PPBUS その他)、例えば、‘ pci
’, ‘ isa
’または‘ ppbus
’、の親バスです。
DRIVER_MODULE() で使用される識別子は、ドライバ名とは異なるものを指定できます。また、同じドライバの識別子は、異なるバスに存在することができ、それは、同じか、または異なるバスの同じドライバを使用して、いろいろなカードのためのフロントエンドを作るかなりクリーンな方法です。例えば、次のようにできます:
DRIVER_MODULE( foo, isa, foo_driver, foo_devclass, NULL, NULL);
DRIVER_MODULE( foo, pci, foo_driver, foo_devclass, NULL, NULL);
driver は、ドライバに関する情報を含み、そのために、 DRIVER_MODULE() への呼び出しの 2 つの最も重要な部分のうちの 1 つである、タイプ driver_t
のドライバです。
devclass 引数は、カーネルドライバモジュール内で使用される、デバイスに関するカーネル内部の情報を含んでいます。
evh 引数は、ドライバ (またはモジュール) がロードされるかアンロードされるとき、呼び出されるイベントハンドラです ( module(9) を参照)。
arg は、現時点では未使用であり、 NULL ポインタであるべきです。
DRIVER_MODULE_ORDERED() マクロによって、特定の順序でドライバを登録することができます。単一のカーネルモジュールが相互に依存する複数のドライバを含んでいるなら、これは、役に立ちます。 order 引数は、定数 ( SI_ORDER_*) を順序付ける SYSINIT(9) 初期化のうちの 1 つであるべきです。ドライバモジュールのためのデフォルト順序は、 SI_ORDER_MIDDLE です。一般的に、モジュールは、それが最後に登記されることを保証する単一のドライバのために SI_ORDER_ANY の順序を指定します。
EARLY_DRIVER_MODULE() マクロによって、特定のパスレベルでドライバを登録することができます。ブート時のプローブとプロセスをアタッチは、デバイスツリーを越えて複数のパスとなります。他のデバイスによって必要とされる基本的なサービスを提供する特定のクリティカルなドライバは、初期のパスの間にアタッチされます。ほとんどのドライバは、最終の一般的なパスでアタッチされます。初期のパスの間にアタッチするドライバは、 pass 引数によって特定のパスレベル (BUS_PASS_*) に対して登録しなければなりません。いったんドライバが登録されれば、すべての続くパスのためのデバイスにアタッチできます。
EARLY_DRIVER_MODULE_ORDERED() マクロによって、特定の順序と特定のパスレベルの両方に対してドライバを登録することができます。
作者
このマニュアルページは、 <alex@FreeBSD.org>によって書かれました。August 21, 2012 | FreeBSD |