驱动函数中的静态全局变量和静态局部变量

时间:2011-05-14 09:30:55

标签: c linux variables static module

在我的一个示例Linux内核模块中,我在所有函数外部声明了一个变量Device_Open,在函数counter中声明了一个静态变量device_open。在device_open内,我增加了Device_Opencounter。模块插入内核时没有任何错误,我为我的模块/ 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;
}

1 个答案:

答案 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;
}