如何卸载正在使用且具有递归模块依赖关系的内核模块?

如何卸载正在使用且具有递归模块依赖关系的内核模块?

我有一个适用于 ELM 327 的驱动程序,它使用依赖于 usbserial 的 pl2303 模块,而 usbserial 又依赖于 pl2303 模块。

我尝试过的:

sudo modprobe -r usbserial pl2303
sudo modprobe -r pl2303 usbserial
sudo modprobe -rf usbserial
sudo modprobe -rf pl2303
sudo rmmod --force pl2303
sudo rmmod --force usbserial

rmmod 的结果:

rmmod: ERROR: ../libkmod/libkmod-module.c:799 kmod_module_remove_module() could not remove 'usbserial': Resource temporarily unavailable
rmmod: ERROR: could not remove module usbserial: Resource temporarily unavailable

modprobe 的结果:

modprobe: FATAL: Module usbserial is in use.

我也尝试过加载和卸载驱动程序。

内核模块相互引用[1]

操作系统:Ubuntu 20.04

答案1

可以将内核模块列入黑名单。

查看此帖子如何将内核模块列入黑名单?

答案2

当您查看 dmesg 时,您是否看到一行显示插入设备时检测到该设备的信息?Ubuntu 应该具有开箱即用的 FTDI 支持。通常,您只需输入 screen /dev/ttyUSB# 38400 即可访问它。

答案3

正如 OP 提到的,与卸载模块相比,一开始就不加载模块更容易。这可以通过将模块列入黑名单来实现:

总结链接中的答案:

只需打开/etc/modprobe.d/blacklist.conf文件并使用以下语法添加驱动程序名称:

blacklist pl2303

保存文件并重新启动。有问题的模块将不再在启动时加载。

相关内容