Не удалось удалить загружаемый модуль ядра

Я пишу загружаемый модуль ядра и пытаюсь его протестировать. После его вставки я пытался удалить его с помощью команды rmmod xxx, но получаю сообщение об ошибке module xxx is in use, и модуль зависает, и я не могу его удалить. Любая идея, как удалить модуль без перезагрузки всей машины? (ядро Linux версии 3.5.0)

Примечание: rmmod -f печатает Error: device or resource busy


person Varda Elentári    schedule 22.06.2013    source источник
comment
rmmod -f не работает, печатает ERROR: device or resource busy   -  person Varda Elentári    schedule 22.06.2013
comment
Ну тогда перезагрузись. (И подумайте о том, чтобы поиграть с ядром на виртуальной машине, а не на вашем основном хосте. Тогда перезагрузка на самом деле не проблема.)   -  person Mat    schedule 22.06.2013
comment
Если вы распечатаете dmesg и сможете предоставить фрагменты кода, мы сможем помочь в дальнейшем.   -  person Benjamin Leinweber    schedule 23.06.2013


Ответы (3)


Это происходит только со мной, когда в моем драйвере есть ошибка, которая вызывает панику или сбой кода в модуле. По моему опыту, когда это происходит, перезагрузка является единственным возможным курсом.

Как я уже сказал, ядро ​​обычно паникует, поэтому вам следует проверить dmesg после его вставки или запуска приложения для его проверки. Я не уверен, но вполне возможно, что такое поведение также произойдет, если драйвер не освободит мьютекс.

person Benjamin Leinweber    schedule 23.06.2013

Проверьте правильность функции module_exit. Возможно, вам потребуется скомпилировать ядро, чтобы «удалить модуль без перезагрузки всей машины» с MODULE_FORCE_UNLOAD=yes.

person Nirmoy    schedule 27.08.2013
comment
У меня есть ядро, скомпилированное с этим флагом, но я все равно получаю эту ошибку, поскольку устройство или ресурс заняты. Это происходит из-за того, что мой драйвер дает сбой. Итак, что я могу наблюдать, так это то, что если в драйвере есть ошибка, то независимо от того, установлен ли FORCE_UNLOAD, вы не сможете выгрузить драйвер. - person Insane Coder; 05.01.2019

Я исправляю ту же ошибку, используя ту же версию GCC, которая скомпилировала работающее ядро ​​для компиляции моего модуля, как 8.3.1; Пожалуйста, проверьте свой.

    [root@centos fishing]# dmesg | grep gcc
    [    0.000000] Linux version 4.18.0-80.7.2.el7.aarch64 ([email protected]) (gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)) #1 SMP Thu Sep 12 16:13:20 UTC 2019
    [root@centos fishing]# gcc -v
    gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
    [root@centos fishing]#

В противном случае у меня были ошибки:

    [root@centos fishing]# rmmod fishing
    rmmod: ERROR: could not remove 'fishing': Device or resource busy
    rmmod: ERROR: could not remove module fishing: Device or resource busy
    [root@centos fishing]#

модуль ядра, код рыбалки взят с http://books.gigatux.nl/mirror/kerneldevelopment/0672327201/ch16lev2sec1.html

person kucer    schedule 14.12.2019