inode_operations,警告:从不兼容的指针类型初始化

时间:2010-05-08 12:48:46

标签: linux-kernel kernel kernel-module

我正在尝试编译一个从proc文件读取和写入的简单内核程序。

我试图通过覆盖inode_operations struct(.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 */

知道如何解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分: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)