【问题标题】:inode_operations , warning: initialization from incompatible pointer typeinode_operations ,警告:从不兼容的指针类型初始化
【发布时间】:2011-04-27 19:07:23
【问题描述】:

我正在尝试编译一个从 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 */

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

谢谢!

【问题讨论】:

    标签: linux-kernel kernel kernel-module


    【解决方案1】:

    您使用的是什么内核版本?我在 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)

    【讨论】:

    • Linux ubuntu 2.6.28-18-generic #59-Ubuntu SMP 你说得对,我看错了文件系统头文件 (fs.h) int (*permission) (struct inode *,整数);非常感谢!
    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2021-06-27
    • 2011-09-01
    相关资源
    最近更新 更多