c-无法删除可加载的内核模块



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

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

只有当我的驱动程序中出现错误,导致模块中的代码以某种方式死机或崩溃时,才会发生这种情况。根据我的经验,一旦发生这种情况,重启是唯一可能的途径。

正如我所说,内核通常会死机,所以你应该在插入dmesg或运行应用程序来练习它之后检查它。我不确定,但如果驱动程序不释放互斥,这种行为也可能发生。

也许您忘记了提供module_exit,所以您的模块不知道如何退出。

检查您的module_exit函数是否正确。您可能需要编译内核,以使module_FORCE_UNLOAD=yes"在不重新启动整个机器的情况下删除模块"。

我使用与编译运行内核的GCC版本相同的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

相关内容

  • 没有找到相关文章

最新更新