Linux 如何重新加载修改后的内核模块
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4646036/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to reload modified kernel modules
提问by apoorv020
How can I instruct the system to reload all kernel modules that have changed? (I am developing a driver with several modules. I want a quick and error-free method to reload all the modules that change.)
如何指示系统重新加载所有已更改的内核模块?(我正在开发具有多个模块的驱动程序。我想要一种快速且无错误的方法来重新加载所有更改的模块。)
采纳答案by Aaron Digulla
There is no simple, error-free way since a bug in the code that adds/removes the driver from the kernel can make it impossible to get rid of a module. In a similar way, a bug in the driver can cause a deadlock in some interrupt handler so the kernel can never unload the module.
没有简单的、无错误的方法,因为在内核中添加/删除驱动程序的代码中的错误可能导致无法摆脱模块。以类似的方式,驱动程序中的错误可能导致某些中断处理程序中的死锁,因此内核永远无法卸载模块。
Also, there is no automatic way to do it since the kernel doesn't check the modules files for changes.
此外,由于内核不会检查模块文件的更改,因此无法自动执行此操作。
All you can do is write a small script that calls rmmod
in the correct order to remove the modules and then modprobe
's the new versions into the kernel.
您所能做的就是编写一个小脚本,rmmod
以正确的顺序调用以删除模块,然后modprobe
将新版本放入内核。
回答by Nnaik
Using rmmod to remove the added modules and using modprobe to load the debugged modules again is the only effective solution.
使用 rmmod 删除添加的模块并使用 modprobe 再次加载已调试的模块是唯一有效的解决方案。