0

procファイルから読み書きする単純なカーネルプログラムをコンパイルしようとしています。

inode_operations構造体(.permission)のパーミッションfpをオーバーライドして、そのファイルにパーミッションを設定しようとしています。

static int module_permission(struct inode *inode, int op, struct nameidata *foo)

{。。。}

static struct inode_operations Inode_Ops_4_Our_Proc_File = {
    .permission = module_permission,        /* check for permissions */

};

Our_Proc_File->proc_iops = &Inode_Ops_4_Our_Proc_File;

何らかの理由で、これをコンパイルすると、次の行に->警告:互換性のないポインタタイプからの初期化が表示されます。

        .permission = module_permission,        /* check for permissions */

これを解決する方法はありますか?

ありがとう!

4

1 に答える 1

2

使用しているカーネルのバージョンは? 私は 2.6.33 を使用しており、これが inode_operations の宣言方法です。

struct inode_operations {
    ...
int (*permission) (struct inode *, int);
    int (*check_acl)(struct inode *, int);
int (*setattr) (struct dentry *, struct iattr *);
    int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
    ...
}

カーネルに同じものがある場合、module_permission 関数の関数シグネチャは (struct inode *, int, struct nameidata *) であり、.permission が期待するのは (struct inode *, int) です。

于 2010-05-08T20:01:10.790 に答える