Квалификатор [permanent] у загруженного модуля

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Georgi
Интересующийся
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 18:25
Контактная информация:

Квалификатор [permanent] у загруженного модуля

Непрочитанное сообщение Georgi » 25 ноя 2014, 18:28

Добрый день,

Вот какая у меня проблема. Собираю элементарный модуль hello2.c:

Код: Выделить всё

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int __init hello_init(void)
{
	printk(KERN_ALERT "Hello, world\n");
	return 0;
}

static void __exit hello_exit(void)
{
	printk(KERN_ALERT "Goodbye, world\n");
}

module_init(hello_init);
module_exit(hello_exit);
Makefile:

Код: Выделить всё

#Makefile - makefile of our first driver

#if KERNELRELEASE is defined, invocation is from kernel build system and can use its language
ifneq (${KERNELRELEASE},)
	obj-m:= hello2.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system
else
	KERNEL_SOURCE:=/usr/src/linux-headers-3.13.0-39-generic
	PWD:=$(shell pwd)

default:
	${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules
clean:
	${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif
Модуль собирается без ошибок:

Код: Выделить всё

gcarpov@ubuntu: ~/TEST/hello$ make
make -C /usr/src/linux-headers-3.13.0-39-generic SUBDIRS=/home/users/gcarpov/TEST/hello modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-39-generic'
  CC [M]  /home/users/gcarpov/TEST/hello/hello2.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/users/gcarpov/TEST/hello/hello2.mod.o
  LD [M]  /home/users/gcarpov/TEST/hello/hello2.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-39-generic'
Загружаю модуль в ядро с помощью #insmod hello2.ko
Вот что получается:

Код: Выделить всё

root@ubuntu:/home/users/gcarpov/TEST/hello# lsmod |head -2
Module                  Size  Used by
hello2                 12425  0 [permanent]
в дмесге пишет только: [24728.761975] Hello, world
Въгрузить модуль с помощью rmmod не получается.
Пробовал и с modprobe - тоже нет.
ERROR: Removing 'hello2': Device or resource busy

В чем проблема не пойму..

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Квалификатор [permanent] у загруженного модуля

Непрочитанное сообщение Olej » 25 ноя 2014, 19:26

Georgi писал(а):В чем проблема не пойму..
Да, такая вещь бывает... ;-) :

1. если при попытке выгрузки модуля происходит критическая ошибка.

2. если в коде модуля вообще нет функции выгрузки.

Избавиться от модуля permanent можно только перезагрузкой системы.

Я предполагаю, что у вас случай п.2, т.е. функция выгрузки то есть (вы её написали), но она как таковая системой не воспринимается.

Georgi
Интересующийся
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 18:25
Контактная информация:

Re: Квалификатор [permanent] у загруженного модуля

Непрочитанное сообщение Georgi » 26 ноя 2014, 13:25

Olej писал(а):
Georgi писал(а):В чем проблема не пойму..
Да, такая вещь бывает... ;-) :

1. если при попытке выгрузки модуля происходит критическая ошибка.

2. если в коде модуля вообще нет функции выгрузки.

Избавиться от модуля permanent можно только перезагрузкой системы.

Я предполагаю, что у вас случай п.2, т.е. функция выгрузки то есть (вы её написали), но она как таковая системой не воспринимается.
Очевиднее всего в этом причина, тогда почему система не воспринимает функцию выгрузки, которая есть в коде??

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Квалификатор [permanent] у загруженного модуля

Непрочитанное сообщение Olej » 26 ноя 2014, 15:46

Georgi писал(а):Очевиднее всего в этом причина, тогда почему система не воспринимает функцию выгрузки, которая есть в коде??
Может имя функции не так написано? ;-) ... русская буква куда-то вкралась?

1. какая у вас система (дистрибутив, ядро)?
2. это пример взято из моей рукописи "Модули ядра Linux"? (тогда я быстро проверю)
3. уберите квалификатор static ...
4. уберите вот ту хитрую лицензию, которую вы вписали... ;-)

Всё нужно пробовать!

Georgi
Интересующийся
Сообщения: 3
Зарегистрирован: 25 ноя 2014, 18:25
Контактная информация:

Re: Квалификатор [permanent] у загруженного модуля

Непрочитанное сообщение Georgi » 27 ноя 2014, 23:25

1. система Ubuntu 12.04, ядро: 3.13.0-39
2. да, пример взят из Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman "Linux Device Drivers" ed.3.

Кстати, попробовал все тоже сделать на домашнем компьютере с теми же параметрами системы - все работает!
Может наш сисадмин на работе специальные настройки ядра задал, что и приводит к такой проблеме..? Попробую узнать.

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей