file_operations登録方法をみる

エントリポイント登録例 - fs.hの例


エントリポイント登録の様子が fs.hにあったので書いておく。
この方法は、定石のようす。

static struct file_operations __fops = {                \
    .owner   = THIS_MODULE,                     \
    .open    = __fops ## _open,                 \
    .release = simple_attr_close,                   \
    .read    = simple_attr_read,                    \
    .write   = simple_attr_write,                   \
};


ぽちぽちと関数ポインタを登録していってます。

どういう動きになるはずか、事前確認


実際にどういう動きになるか
アプリケーションレベルで確認しておきます。
いちおう。
とりあえず、ぷちテストプログラムを書いてみて、かくにん。
ops_init_test.c

$ cat ops_init_test.c
#include <stdio.h>

struct ops_t{
    void (*op1)(void);
    void (*op2)(void);
}; 


static void foo(void)
{
    printf("foo\n");
}

static void bar(void)
{
    printf("bar\n");
}


int main(int argc, char **argv)
{
    struct ops_t ops = {
        .op1 = foo,
        .op2 = bar,
    };

    ops.op1();
    ops.op2();

    return 0;
}


コンバイル、実行。

$ gcc ops_init_test.c
$ ./a.out
foo
bar

よしよし。
関数を実行する仕組みが
システムコールカーネルという方法に
変わっていくはずなので、想像しておこう。