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

发布于 2024-08-31 23:26:27 字数 713 浏览 3 评论 0原文

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

我试图通过覆盖 inode_operations struct (.permission)

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

{ 中的权限 fp 来设置该文件的权限 。 。 。 }

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 */

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

谢谢!

I'm trying to compile a simple Kernel program that read and write from a proc file.

I'm trying to set permission to that file by overriding the permission fp in inode_operations struct (.permission)

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;

For some reason, when I compile this i get -> warning: initialization from incompatible pointer type on the following line:

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

Any idea how to solve this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑叹一世浮沉 2024-09-07 23:26:27

您使用什么内核版本?我在 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 *,整数)

What kernel version are you using ? I am on 2.6.33 and this is how inode_operations is declared :

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

If your kernel has the same thing, then the function signature of your module_permission function is (struct inode *, int, struct nameidata *) where as .permission expects (struct inode *, int)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文