2010-05-08 24 views
0

J'essaye de compiler un simple programme noyau qui lit et écrit à partir d'un fichier proc.inode_operations, avertissement: initialisation à partir d'un type de pointeur incompatible

J'essaie de définir l'autorisation à ce fichier en remplaçant la fp permission struct inode_operations (.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; 

Pour une raison quelconque, quand je compile ce que je reçois ->avertissement: initialisation du type pointeur incompatible sur la ligne suivante:

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

Toute idée comment résoudre ce problème?

Merci!

Répondre

2

Quelle version du noyau utilisez-vous? Je suis sur 2.6.33 et voici comment inode_operations est déclaré:

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

Si votre noyau a la même chose, la signature de la fonction de votre fonction module_permission est (struct inode *, int, struct nameidata *) où comme .permission attend (struct inode *, int)

+0

Linux ubuntu 2.6.28-18-générique # 59 Ubuntu SMP Vous avez raison, je recherchais l'en-tête du système de fichier incorrect (fs.h) int (* autorisation) (struct inode *, int); Merci beaucoup! – djTeller