Linux kernel inode_操作,警告:从不兼容的指针类型初始化

Linux kernel inode_操作,警告:从不兼容的指针类型初始化,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我试图编译一个简单的内核程序,从proc文件读写 我试图通过覆盖inode_操作结构(.permission)中的权限fp来设置对该文件的权限 { . . . } }) 出于某种原因,当我编译此文件时,我得到->警告:从以下行的不兼容指针类型初始化: .permission = module_permission, /* check for permissions */ 你知道怎么解决这个问题吗 谢谢 您使用的内核版本是什么?我在2.6.33上,以下是inode

我试图编译一个简单的内核程序,从proc文件读写

我试图通过覆盖inode_操作结构(.permission)中的权限fp来设置对该文件的权限

{ . . . }

})

出于某种原因,当我编译此文件时,我得到->警告:从以下行的不兼容指针类型初始化:

        .permission = module_permission,        /* check for permissions */
你知道怎么解决这个问题吗


谢谢

您使用的内核版本是什么?我在2.6.33上,以下是inode_操作的声明:

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 *);
    ...
}

如果你的内核有相同的东西,那么你的模块的函数签名是(struct inode*,int,struct nameidata*),其中as.permission期望(struct inode*,int)

Linux ubuntu 2.6.28-18-generic#59 ubuntu SMP你是对的,我看到了错误的文件系统头(fs.h)int(*permission)(结构索引节点*,int);非常感谢!
Our_Proc_File->proc_iops = &Inode_Ops_4_Our_Proc_File;
        .permission = module_permission,        /* check for permissions */
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 *);
    ...
}