问题来源
这个问题来源于:https://blog.youkuaiyun.com/wenhao_ir/article/details/145097061
上面这篇博文中对模块button_drv.ko和模块board_100ask_imx6ull.ko加载时出现了这个问题…
问:为什么源文件button_drv.c编译形成的模块在加载时会提示“loading out-of-tree module taints kernel”,而board_100ask_imx6ull.c编译形成的模块加载时就没有这个提示,我先加载的是button_drv.ko,然后加载的board_100ask_imx6ull.ko。
当加载 button_drv.ko 时,提示 “loading out-of-tree module taints kernel”,而加载 board_100ask_imx6ull.ko 时没有这个提示,可能涉及以下几个关键点:
原因分析
1. “Out-of-tree module taints kernel”的原因
- 该提示表明,加载的模块 不是内核源码树的一部分,也即是 out-of-tree module。
- Linux 内核具有一个标志位系统(taint flags),用于记录内核状态是否被外部模块“污染”。
- 主要原因是:
- 模块未签名: 如果模块未使用内核模块签名机制进行签名(CONFIG_MODULE_SIG),加载时会触发此提示。
- 外部模块: 如果模块的源码不是与内核编译在一起的,加载时也会触发。
2. 为什么 board_100ask_imx6ull.ko 没有提示?
- 如果在加载
button_drv.ko后,再加载board_100ask_imx6ull.ko,不会再次显示 taint 提示,因为内核已经标记为“污染”状态,不会重复警告。
3. 如何检查内核是否被“污染”?
运行以下命令查看内核的 taint 状态:
cat /proc/sys/kernel/tainted

- 输出值是一个位掩码,显示当前的 taint 状态。
- 常见值:
1:加载了非 GPL 的模块。2:加载了未签名的模块。4096:加载了外部模块(即这里提示的原因)。
792

被折叠的 条评论
为什么被折叠?



