Настройка функции инициализации модуля

Модуль инициализации используется для связи модуля с операционной системой. Он может применяться для ранней инициализации необходимых структур данных. Так как драйверу параллельного порта не требуется сложных структур данных, мы просто регистрируем модуль.parll.с
static int parll_init (void) {
int retval;
retval= register_chrdev(Major, MODULE_NAME, &parlport_fops);
if(retval < 0)
{
printkf "\n%s: can't register",MODULE_NAME); return retval;
}
else {
Maj or=retval;
printk("\n%s:registered, Major=%d",MODULE_NAME,Major); if(request_region(base,3,MODULE_NAME)) printk("\n%S:I/0 region busy.",MODULE_NAME);
}
return 0;
}

Функция init_module () отвечает за регистрацию модуля в ядре. Функция register_chrdev () получает старший номер запроса (описывается в разд. 5.2 и далее в гл. 10; если 0, ядро назначает ее модулю). Вспомните, что старший номер хранится в структуре inode, на которую указывает структура dentry, на которую указывает структура файла. Вторым параметром является имя устройства, отображаемое в /ргос/ devices. Третьим параметром является только что описанная структура операций.
В случае успешной регистрации функция init вызывает reguest_region () с базовым адресом параллельного порта и длины диапазона (в байтах) вставляемых регистров.
Функция init_module () возвращает отрицательное число в случае неудачи. 3} Настройка функции очистки модуля
Функция cleanup_module () отвечает за отмену регистрации модуля и освобождение запрошенного ранее диапазона ввода-вывода:

parll.с
static void parll_cleanup( void ) {
printkf"\n%s:cleanup ",MODULE_NAME); release_region(base,3); unregister_chrdev(Major,MODULE_NAME);
}

И наконец, мы помещаем запрашиваемый init и точку очистки:

parll.с
module_init(parll_init); module_exit(parll_cleanup);

4) Вставка модуля
Теперь мы вставляем наш модуль в ядро, как в предыдущем проекте, с помощью Lkp:-# insmod par11.ко
Загляните в /var/log/messages, где отображается вывод нашей функции init () и уделите особое внимание отображающимся там старшим возвращаемым номерам.
Как в предыдущем проекте, мы просто вставляем наш модуль в ядро и удаляем его оттуда. Теперь нам нужно связать наш модуль с файловой системой с помощью команды mknod. Введите в командной строке следующее:
Lkp:~# mknode /dev/parll с <ХХХ> О
Параметры:
• с. Создается символьный специальный файл (в отличие от блочного).
• /dev/parll. Путь к нашему устройству (для открытого вызова).
• XXX. Старший номер, возвращаемый во время init (из var/log/messages).
• О. Младший номер нашего устройства (в данном примере не используется).
Например, если вы увидите старший номер 254 в /var/log/messages, команда будет выглядеть следующим образом:
Lkp:-# mknode /dev/parll с 254 О