在我的一个示例Linux内核模块中,我在所有函数外部声明了一个变量Device_Open
,在函数counter
中声明了一个静态变量device_open
。在device_open
内,我增加了Device_Open
和counter
。模块插入内核时没有任何错误,我为我的模块/ dev / chardev创建了一个设备文件。
我做cat /dev/chardev
。我可以看到counter
每次调用cat /dev/chardev
时都会增加,但Device_Open
始终保持为0.与增加变量值相关的行为差异的原因是什么?
以下是了解
的代码段static int Device_Open = 0;
static int device_open(struct inode *inode, struct file *file)
{
static int counter = 0;
printk(KERN_INFO "Device_Open = %d", Device_Open);
printk(KERN_INFO "counter = %d", counter);
if (Device_Open)
return -EBUSY;
Device_Open++;
counter++;
try_module_get(THIS_MODULE);
return SUCCESS;
}
答案 0 :(得分:7)
我搜索了“Device_open”并找到了相应的设备版本。你确定你没有这个功能吗?我在TLDP找到了它。
static int device_release(struct inode *inode, struct file *file)
{
#ifdef DEBUG
printk(KERN_INFO "device_release(%p,%p)\n", inode, file);
#endif
/*
* We're now ready for our next caller
*/
Device_Open--;
module_put(THIS_MODULE);
return SUCCESS;
}