如何卸载正在使用的内核模块?

And*_*ann 30 kernel card-reader sd-card 14.04

我正在按照本教程让我的读卡器工作:http : //ubuntuforums.org/showthread.php?t=636867

但是我无法卸载我的 sdhci 模块:

sudo modprobe -rv sdhci mmc_core mmc_block
modprobe: FATAL: Module sdhci is in use.
Run Code Online (Sandbox Code Playgroud)

我应该如何进行?

s3l*_*lph 28

首先,找出哪些其他模块使用该模块sdhci

lsmod | grep sdhci
Run Code Online (Sandbox Code Playgroud)

你会得到一个这样的列表:

module size used_by
Run Code Online (Sandbox Code Playgroud)

尝试在要卸载的模块之前或一起卸载这些模块 (used_by):

sudo modprobe -r <module found from lsmod> <module you want to remove>
Run Code Online (Sandbox Code Playgroud)

如果要阻止模块在下次启动时加载,请将其添加到黑名单:

echo -e "sdhci\n" | sudo tee -a /etc/modprobe.d/blacklist.conf
Run Code Online (Sandbox Code Playgroud)

  • 如果我得到“被 1 使用”但它没有说明是哪一个怎么办? (9认同)
  • “/etc/modprobe.d/blacklist.conf”中的“sdhci”行将不起作用。该行应该是 `etc/modprobe.d/blacklist.conf` 中的 `blacklist sdhci` (4认同)
  • 我试过了,但没有任何运气:http://askubuntu.com/questions/724052/unload-saa7164-module-for-hauppauge-2250-and-stop-tvheadend-to-suspend-ubuntu-1 (3认同)
  • @AlejoDev 对我来说也是一样。我得到的“被使用”值仅为 3。 (2认同)

小智 5

除了卸载依赖模块之外,另一个需要注意的地方是“lsof” 。

# lsof | grep <模块的相关str>

这应该列出通过模块打开的文件。尝试终止那些打开文件的进程,并通过“lsmod”命令检查模块引用计数是否减少。