【发布时间】: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,看看未知符号是什么。很可能您调用了模块中不存在的函数,或者您的模块使用了来自尚未加载的另一个模块的符号。depmod和modprobe负责查找模块的依赖关系并首先加载它们;insmod不会这样做。 -
您不能在运行 4.9 内核的机器中插入为 4.18 编译的模块。
标签: linux linux-kernel