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

我正在按照这个教程来使我的读卡器工作: http://ubuntuforums.org/showthread.php?t=636867 然而,我无法卸载我的 sdhci 模块:
sudo modprobe -rv sdhci mmc_core mmc_block
modprobe: FATAL: Module sdhci is in use.

我该怎么办?

sdhci还有哪些其他模块使用? - s3lph
我不知道如何找到这个。 - Andreas Hartmann
lsmod | grep sdhci - s3lph
卸载sdhci_pci修复了。谢谢!你想把这写成一个答案吗? - Andreas Hartmann
2个回答

首先,找出使用模块sdhci的其他模块。
lsmod | grep sdhci

您将会得到这样的一个列表:
module size used_by

尝试在卸载所需模块(used_by)之前或与您想要卸载的模块一起卸载它们。
sudo modprobe -r <module found from lsmod> <module you want to remove>

如果你想阻止模块在下次启动时加载,将其加入黑名单即可。
echo -e "sdhci\n" | sudo tee -a /etc/modprobe.d/blacklist.conf

3我尝试了这个,但没有运气:http://askubuntu.com/questions/724052/unload-saa7164-module-for-hauppauge-2250-and-stop-tvheadend-to-suspend-ubuntu-1 - guttermonk
17如果我得到了“使用者1”,但它没有说明是哪一个,那该怎么办? - Alejo Dev
2@AlejoDev 对我来说也是一样的。我只得到了 'used by' 的值为3。 - Chan Kim
3/etc/modprobe.d/blacklist.conf中的一行sdcid将不起作用。该行应为blacklist sdhcietc/modprobe.d/blacklist.conf中。 - qwertz

另一个需要注意的地方是除了卸载依赖模块之外,还可以查看"lsof"。
``` # lsof | grep <相关模块字符串> ```
这将列出通过该模块打开的文件。尝试终止打开这些文件的进程,并通过"lsmod"命令检查模块引用计数是否减少。