В одном из моих примеров модулей ядра Linux у меня есть переменная Device_Open
, объявленная статической вне всех функций, и статическая переменная counter
, объявленная внутри функции device_open
.Внутри device_open
я увеличиваю Device_Open
и counter
.Модуль вставлен без каких-либо ошибок в ядро, и я создал файл устройства для моего модуля /dev/chardev.
I do 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;
}