INIT_MODULE(2)

名前
init_module - ローダブルモジュールのエントリを初期化する

書式
#include <linux/module.h>

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

このマニュアルについて
これは、Linux Kernel 2.4 の時代に使われていた modutils パッケージ所収の古いマニュアルです。(2022/12/02, Linux JM Project)

説明
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 以外の全てのポインタ要素は、 モジュールの本体内部を指し、カーネル空間での適切な値で初期化される (つまりモジュールの残りの部分と共に再配置される)ことが期待される。

このシステムコールを使えるのはユーパーユーザだけである。

返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、errno に適切な値が設定される。

エラー

EPERM
    呼び出しを行ったユーザがスーパーユーザでない。

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

EINVAL
    image スロットの一部に誤った値が入っているか、 image->name が元のモジュールの名前に一致していないか、 image->deps エントリの一部がロードされたモジュールに対応していない。 あるいは同様の別の矛盾が起きている。

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

EFAULT
    name あるいは image が、プログラムがアクセスできる アドレス空間の外部である。

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