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 回答