我正在修改几个驱动程序,以实现一小部分低级便利功能,这样做会由于树外模块而污染我的内核。我很清楚,在大多数情况下,这不应该成为问题,尽管在报告错误或其他问题之前,我应该使用未受污染的内核来重现它。但是,我也看到了一些地方,例如在接受的答案中什么是受污染的 Linux 内核?(第一段),具有受污染的内核可能会导致调试功能恶化/减少。我无法找到任何官方文件来支持这一说法,我见过的任何地方也没有任何其他信息。
这只是一个网络谣言,还是当我发现自己试图追踪系统中的问题时,我需要注意什么?
答案1
受污染的内核在行为上只有非常细微的差异,并且只是为了保护自身,绝不会仅仅因为受污染而禁用功能:
- 检查挂起的不间断任务如果内核被
TAINT_DIE
(IE哎呀或BUG()
已经发生); - 跟踪事件和枚举未针对受污染的内核模块进行设置,其中污染可能会导致不正确的跟踪数据;如果模块由于某种原因被污染其他与树外、暂存或未签名相比,其状态可能无效,并且跟踪它可能会导致更多问题(例如,尽管 ABI 不匹配,但仍强制插入模块)。