2010-05-20 6 views
0

J'ai un petit problème. Installer ce module dans mon noyau et son écrit sous/procne peut pas ouvrir l'appareil

Lorsque je tente d'ouvrir() il du mode utilisateur je reçois le message suivant:

« Impossible fichier de périphérique ouvert: my_dev »

static int module_permission(struct inode *inode, int op, struct nameidata *foo) 
{ 
//if its write 
if ((op == 2)&&(writer == DOESNT_EXIST)){ 
    writer = EXIST ; 
    return 0; 
} 
//if its read 
if (op == 4){ 
    numOfReaders++; 
    return 0; 
} 
return -EACCES; 
} 

int procfs_open(struct inode *inode, struct file *file) 
{ 
try_module_get(THIS_MODULE); 
return 0; 
} 

static struct file_operations File_Ops_4_Our_Proc_File = { 
.read = procfs_read, 
.write = procfs_write, 
.open = procfs_open, 
.release = procfs_close, 
}; 

static struct inode_operations Inode_Ops_4_Our_Proc_File = { 
.permission = module_permission, /* check for permissions */ 
}; 

int init_module() 
{ 
/* create the /proc file */ 
Our_Proc_File = create_proc_entry(PROC_ENTRY_FILENAME, 0644, NULL); 
/* check if the /proc file was created successfuly */ 
if (Our_Proc_File == NULL){ 
    printk(KERN_ALERT "Error: Could not initialize /proc/%s\n", 
     PROC_ENTRY_FILENAME); 
    return -ENOMEM; 
} 

Our_Proc_File->owner = THIS_MODULE; 
Our_Proc_File->proc_iops = &Inode_Ops_4_Our_Proc_File; 
Our_Proc_File->proc_fops = &File_Ops_4_Our_Proc_File; 
Our_Proc_File->mode = S_IFREG | S_IRUGO | S_IWUSR; 
Our_Proc_File->uid = 0; 
Our_Proc_File->gid = 0; 
Our_Proc_File->size = 80; 

//i added init the writewr status 
writer = DOESNT_EXIST; 
numOfReaders = 0 ; 
printk(KERN_INFO "/proc/%s created\n", PROC_ENTRY_FILENAME); 
return 0; 
} 
+0

Pouvez-vous fournir un «strace» de votre appel ouvert pour voir l'erreur réelle retournée? Avez-vous la permission d'ouvrir l'appareil? Si tout ce qui précède échoue, utilisez ftrace. –

Répondre

0
open("/proc/ex3mod", O_WRONLY) = -1 EACCES (Permission denied) 

Comme le dit commentateur précédent, vous ne disposez pas des autorisations pour ouvrir le fichier proc. Essayez de corriger les autorisations avec chmod.

+0

bien que j'utilise chmod o + w/proc/ex3mod je ne suis toujours pas autorisé suis-je faire quelque chose de mal (le plus probablement)? – yoavstr

+0

Ising trouvé mon ERR lorsque j'ai calculé op j'ai utilisé == au lieu d'utiliser & (logique ET) comme exemple: si (op & 4) – yoavstr

Questions connexes