2010-05-08 2 views
0

Я пытаюсь скомпилировать простую программу ядра, которая читает и записывает из файла proc.inode_operations, warning: инициализация из несовместимого типа указателя

Я пытаюсь установить разрешение на этот файл путем переопределения разрешения FP в 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; 

По какой-то причине, когда я скомпилировать это я получаю ->предупреждение: инициализации от несовместимого типа указателя на следующей строке:

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

Любая идея, как решить эту проблему?

Спасибо!

ответ

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 является (структура инф.узлов *, INT, структура nameidata *), где а .permission ожидает (структура инф.узлов *, Int)

+0

Linux Ubuntu 2.6.28-18-родовое # 59-Ubuntu SMP Вы правы, я смотрел на заголовок неправильно файловой системы (fs.h) int (* разрешение) (struct inode *, int); Спасибо большое! – djTeller

Смежные вопросы