问题来源

这个问题来源于:https://blog.csdn.net/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),用于记录内核状态是否被外部模块“污染”。
  • 主要原因是:
    1. 模块未签名: 如果模块未使用内核模块签名机制进行签名(CONFIG_MODULE_SIG),加载时会触发此提示。
    2. 外部模块: 如果模块的源码不是与内核编译在一起的,加载时也会触发。

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:加载了外部模块(即这里提示的原因)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐