MODULE(9) | FreeBSD Kernel Developer's Manual | MODULE(9) |
名称
module — カーネルモジュールを記述する構造解説
カーネルの各モジュールは、 module_t 構造体によって記述されます。構造体は、いくつかのカーネルの内部データと同様に、デバイスの名前、ユニークな ID 番号、イベントハンドラへのポインタとイベントハンドラに与えられる引数へのポインタを含んでいます。DECLARE_MODULE(9) マクロは、システムにあるモジュールを登録します。
モジュールがロードされるとき、イベントハンドラ関数は、 MOD_LOAD に設定される what 引数を付けて呼び出されます。
アンロード時は、最初に、 MOD_QUIESCE に設定された what を付けて呼び出されます。アンロードが強制されないなら、0 でない返り値は、アンロードが起こることを防ぎます。
アンロードが継続するなら、 what は、 MOD_UNLOAD に設定されます。モジュールが、これに 0 以外を返すなら、アンロードは、起こりません。
MOD_QUIESCE と MOD_UNLOAD の間の違いは、モジュールが現在使用されているなら、 MOD_QUIESCE で失敗すべきであるのに対して、 MOD_UNLOAD は、例えば、無効にすることができないモジュールへのメモリ参照があるために、モジュールをアンロードすることができない場合のみ、失敗すべきであることです。
システムがシャットダウンしているとき、 what は、 MOD_SHUTDOWN の値を含みます。
モジュールは、 what のサポートされず、認識できない値に対して EOPNOTSUPP を返すべきです。
使用例
#include <sys/param.h> #include <sys/kernel.h> #include <sys/module.h> static int foo_handler(module_t mod, int /*modeventtype_t*/ what, void *arg); static moduledata_t mod_data= { "foo", foo_handler, NULL }; MODULE_VERSION(foo, 1); MODULE_DEPEND(foo, bar, 1, 3, 4); DECLARE_MODULE(foo, mod_data, SI_SUB_EXEC, SI_ORDER_ANY);
関連項目
DECLARE_MODULE(9), DEV_MODULE(9), DRIVER_MODULE(9), MODULE_DEPEND(9), MODULE_VERSION(9), SYSCALL_MODULE(9)/usr/share/examples/kld
作者
このマニュアルページは、 <alex@FreeBSD.org>によって書かれました。July 19, 2007 | FreeBSD |