INIT_MODULE(2)

名前
init_module - ローダブル・モジュールを初期化する。

書式
#include <linux/module.h>

int init_module(const char *name, struct module *image);

説明
init_module は再配置されたモジュール・イメージをカーネル空間に読み込み、 そのモジュールの init 関数を実行する。

モジュール・イメージはその先頭にはモジュール構造体がおかれ、その後ろに 適切なコードとデータが配置される。モジュール構造体は以下のように定義 される:

    struct module
    {
      unsigned long size_of_struct;
      struct module *next;
      const char *name;
      unsigned long size;
      long usecount;
      unsigned long flags;
      unsigned int nsyms;
      unsigned int ndeps;
      struct module_symbol *syms;
      struct module_ref *deps;
      struct module_ref *refs;
      int (*init)(void);
      void (*cleanup)(void);
      const struct exception_table_entry *ex_table_start;
      const struct exception_table_entry *ex_table_end;
    #ifdef __alpha__
      unsigned long gp;
    #endif
    };

next と refs 以外の全てのポインター要素は、モジュール本体 へのポインターが期待され、カーネル空間での適切な値で初期化される。 すなわちモジュール残りの部分と共に再配置される

このシステム・コールはスーパーユーザーのみに使用される。

返り値
成功した場合はゼロが返される。失敗した場合は -1 が返され、errno が適切に設定される。

エラー

EPERM
    ユーザーがスーパーユーザーでない。

ENOENT
    その名前のモジュールが存在しない。

EINVAL
    image スロットのどれかの値が不適切である、image->name が 元のモジュールの名前に一致していない、image->deps エントリの どれかが、読み込んだモジュールに一致していない、など。 また他の似たような矛盾。

EBUSY
    モジュールの初期化ルーチンが失敗した。

EFAULT
    name または image がプログラムのアクセス可能なアドレス空間の外部にある。

関連項目
create_module(2), delete_module(2), query_module(2).