3

我试图找出在 SMP 系统上删除模块的问题有什么好的解释吗?

4

1 回答 1

1

通常遇到的问题是在系统某处存在对正在运行的模块的一些引用。这可以是任何东西,从被持有的锁,某种正在进行的回调 - 另一个使用符号的模块等等等等。

内核中有广泛的引用计数系统,应该用来帮助您确保这永远不会发生。将使用您的模块的事物 - 或模块的各个方面 - 将拥有相关的引用计数。当此计数不为零时,内核将阻止您的表单执行“rmmod”。您可以在“lsmod”输出中看到所有已加载模块的引用计数。

学习它们并明智地使用它们。

这些问题并不是真正特定于“SMP”——而是任何内核模块。例如,如果您的模块是字符驱动程序,并且有人打开了您的设备,那么您不希望您的驱动程序在有人打开文件描述符时卸载 - 或者更糟糕的是 - 有一个进程阻塞了 read()等待回复。在很多情况下——像这样——内核本身会为你保存引用。在这种情况下,打开驱动程序的进程将持有驱动程序模块上的 refcnt。

于 2010-11-11T01:16:04.900 回答