2010-05-20 74 views
0

我有一個小問題。我安裝該模塊爲我的內核和其下的/ proc不能打開設備

書面當我嘗試從用戶模式下打開()它,我得到以下信息:

「無法打開設備文件: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

你可以提供一個開放式調用的「strace」來查看返回的實際錯誤嗎?你有權限打開設備嗎?如果以上全部失敗,請使用ftrace。 – 2010-05-20 18:54:51

回答

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

像以前的評論者說,你沒有權限打開proc文件。嘗試使用chmod修復權限。

+0

雖然我使用chmod o + w/proc/ex3mod 我仍然不被允許我做錯了什麼(最可能)? – yoavstr 2010-05-20 21:16:50

+0

Ising發現我的ERR 當我計算我使用==而不是使用&(邏輯AND) 作爲例子:if(op&4) – yoavstr 2010-05-21 07:48:02