10

我正在编写一个可加载的内核模块并尝试对其进行测试。插入它后,我试图使用rmmod xxx命令将其删除,但是我收到一条错误消息module xxx is in use,并且模块卡住了,我无法删除它。知道如何在不重新启动整个机器的情况下移除模块吗?(Linux 内核 v. 3.5.0)

注意:rmmod -f打印Error: device or resource busy

4

4 回答 4

13

这只发生在我的驱动程序中存在导致模块中的代码以某种方式恐慌或崩溃的错误时。以我的经验,一旦发生这种情况,重启是唯一可能的过程。

正如我所说,内核通常会出现恐慌,因此您应该在插入 dmesg 或运行您的应用程序后检查它以执行它。我不确定,但如果驱动程序不释放互斥锁,这种行为也可能会发生。

于 2013-06-23T16:29:12.723 回答
0

检查你的 module_exit 函数是否正确。您可能需要使用 MODULE_FORCE_UNLOAD=yes 编译内核以“删除模块而不重新启动整个机器”。

于 2013-08-27T13:47:52.410 回答
0

我通过使用与已编译运行内核来编译我的模块相同的 GCC 版本来修复相同的错误,都是 8.3.1;请检查你的。

    [root@centos fishing]# dmesg | grep gcc
    [    0.000000] Linux version 4.18.0-80.7.2.el7.aarch64 (mockbuild@aarch64-01.bsys.centos.org) (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

于 2019-12-14T07:36:05.473 回答
0

一种可能是您忘记提供 module_exit,因此您的模块不知道如何退出。

于 2021-08-03T02:41:58.950 回答