【问题标题】:Linux Kernel : Building Out-of-tree module for kernel , but no linux-headers in apt-cache searchLinux Kernel:为内核构建树外模块,但在 apt-cache 搜索中没有 linux-headers
【发布时间】:2018-11-20 07:40:10
【问题描述】:

我正在从事 linux 内核开发,并试图制作自己的模块用于测试目的。但是,对于最新的内核源代码,linux-headers 不存在。它只存在于 4.9.0-7 。

我在谷歌上搜索并找到了一种方法,其中我们 make 模块针对我们想要的内核源代码树(例如 4.18) make -C /home/prasad/linux-4.18/ M=$(PWD) 它确实为我的模块生成 .ko 。但是,当我加载内核并 insmod 它时,它会说

insmod: ERROR: could not insert module test.ko: Unknown symbol in module

那么我究竟如何从我的主机生成一个可以插入 4.18 内核的 .ko 文件?

PS:我的疑问不是duplicate,因为我无法在我的虚拟机中“安装”4.18 内核,我试图避免这样做。我的问题更具体地是生成一个可插入的 .ko 模块,而在 4.18 中没有找到任何其他方式来插入它。

【问题讨论】:

  • 查看dmesg,看看未知符号是什么。很可能您调用了模块中不存在的函数,或者您的模块使用了来自尚未加载的另一个模块的符号。 depmodmodprobe 负责查找模块的依赖关系并首先加载它们; insmod 不会这样做。
  • 您不能在运行 4.9 内核的机器中插入为 4.18 编译的模块。

标签: linux linux-kernel


【解决方案1】:

您不能在 4.9 内核中使用为 4.18 构建的模块。

如果您正在构建的内核版本的标头无法通过 apt/yum/etc 获得,您需要从以下位置手动下载源代码:https://www.kernel.org/

在您的模块的 makefile 中,您将指定您已下载并提取的内核源代码的路径。

这应该允许您为所需的内核版本构建模块。

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2020-02-12
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多