Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
MOD_INC_USE_COUNT;
return 0;
}
Младший номер устройства мы получаем с помощью вызова MINOR(inode->i_rdev). Если устройство уже открыто, мы выводим сообщение: Devise is busy. В противном случае устанавливаем флаг открытия устройства, обнуляем byte_read и byte_write, а также увеличиваем счетчик использования данного модуля (MOD_INC_USE_COUNT).
Функция закрытия устройства: сбрасываем флаг dev_open и уменьшаем счетчик использования устройства.
Листинг 9. Функция закрытия устройства
static int device_close(struct inode *inode, struct file *fp)
{
struct device_state *dev_state;
printk("My module: try to close device with minor number %d ", MINOR(inode->i_rdev));
dev_state = &state[MINOR(inode->i_rdev)];
if(!dev_state->dev_open)
{
printk("Device is not open ");
return 0;
}
dev_state->dev_open=0;
MOD_DEC_USE_COUNT;
return 0;
}
Теперь нам нужно указать ядру, какие функции нужно использовать для открытия и закрытия устройства:
struct file_operations FO =
{
open: device_open,
release: device_close
};
Полный код модуля устройства device вместе с функциями открытия и закрытия устройства, а также структурой file_operations приведен в следующем листинге:
Листинг 10. Модуль устройства device (module.c)
#define MODULE
#define __KERNEL__
#include<linux/module.h>
#include<linux/init.h>