或者是否有可能克服该错误,因为代码不在内核的整体部分中?
答案1
是可以克服的这里:
您还应该考虑在哪里进行模块实验、开发和测试。我们已尽最大努力使示例模块安全且正确,但错误的可能性始终存在。内核代码中的错误可能会导致用户进程的终止,有时甚至会导致整个系统的终止。它们通常不会造成更严重的问题,例如磁盘损坏。尽管如此,建议您在不包含无法承受丢失的数据且不执行基本服务的系统上进行内核实验。内核黑客通常会为了测试新代码而保留一个“牺牲”系统。
答案2
您可以在内核模块中调用BUG()
或BUG_ON(condition)
来导致系统崩溃!
答案3
如果模块在进程上下文中运行,则内核模块中的故障可能会导致进程关闭(例如:由于系统调用),或者如果模块在中断上下文中运行,则可能会导致系统关闭。注册/取消注册模块时出现错误可能会挂起 insmod/modprobe 进程,当然您将无法卸载该模块。无限循环可能会使核心/CPU 全速运行,并且无法供其他进程使用。