我编写了一个简单的设备驱动程序,使设备文件能够使用class_create()
和device_create()
运行。但是然后在我的驱动程序的退出函数中,我首先销毁了类,然后销毁了驱动程序,即我class_destroy()
先调用,然后调用device_destroy()
。由于这个原因,我在内核日志中看到了一些错误消息,但没有看到我放入退出函数中的输出消息。
该驱动程序也没有被删除,并表示它仍在使用中。
我想知道:
我认为我犯了一个错误,首先释放类,然后删除设备,所以错误消息是适当的。但现在我无法使用 删除我的驱动程序
rmmod
。有什么方法可以在不重新启动系统的情况下删除驱动程序吗?我曾经
lsmod
检查哪个服务正在使用我的驱动程序。但它没有显示“used by”计数为1
,而是显示-1
。造成这种行为的原因是什么?
答案1
man rmmod
:
NAME
rmmod - Simple program to remove a module from the
Linux Kernel
SYNOPSIS
rmmod [-f] [-s] [-v] [modulename]
DESCRIPTION
rmmod is a trivial program to remove a module (when
module unloading support is provided) from the kernel.
Most users will want to use modprobe(8) with the -r
option instead.
OPTIONS
-v, --verbose
Print messages about what the program is doing.
Usually rmmod prints messages only if something
goes wrong.
-f, --force
This option can be extremely dangerous: it has no
effect unless CONFIG_MODULE_FORCE_UNLOAD was set
when the kernel was compiled. With this option,
you can remove modules which are being used, or
which are not designed to be removed, or have been
marked as unsafe (see lsmod(8)).
为了能够使用 -f
,请注意您的内核需要CONFIG_MODULE_FORCE_UNLOAD
设置该选项。为了确保它已设置,您可以使用:
/boot$ grep CONFIG_MODULE_FORCE_UNLOAD config-`uname -r`
CONFIG_MODULE_FORCE_UNLOAD=y
(如果您的发行版在 /boot 下安装了配置...)
关于 的使用计数-1
,请参阅此回答