MODULE(9) FreeBSD カーネル開発者マニュアル MODULE(9)
名称
module − カーネルモジュールの構造記述 |
解説
カーネル内の個々のモジュールは module_t 構造体によって記述されます。この 構造体は、幾つかのカーネルの内部データはもちろん、デバイスの名前、固有の ID 番号、イベントハンドラ関数へのポインタ、およびイベントハンドラに渡され る引数を含んでいます。 DECLARE_MODULE(9) マクロはシステムにモジュールを登録します。 そのモジュールがロードされた時に、 what 引数に MOD_LOAD が設定されて、イ ベントハンドラ関数が呼び出されます。 アンロード時は最初に what に MOD_QUIESCE が設定されて呼び出されます。アン ロードが強制されなかった場合には、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, 0 }; 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 |
作者
このマニュアルページは Alexander Langer 〈alex@FreeBSD.org〉 が書きました。 FreeBSD 10.0 March 1, 2001 FreeBSD 10.0 |