我目前正在 linux-3.0-ARCH 上运行 Arch Linux,并且希望编译为 linux-2.6.22.14 编写的内核模块。
我只在预配置的 debian 上编译了内核模块。所以我所需要知道的就是内核源代码的位置以及如何相应地编辑模块的 Makefile。
但因为我现在正在我的机器上尝试这个,所以我下载了 2.6.22.14 的源代码并将其放在 /root/ 中。我更改了模块的 Makefile 以指向此文件并执行了“make”。我现在得到的只是:
Makefile:1443: *** mixed implicit and normal rules. Stop.
有人曾经说过我必须编译这个内核源代码。如果是这样,是否有更简单的方法来获取编译版本,将其插入此处而不是源代码?
答案1
您可能缺少内核头文件包:pacman -S linux-headers
这应该会给你合适的内核头文件。
答案2
你的模块可能无法在 3.0 左右的 Linux 内核下运行良好——例如,调度程序在 2.6.23 中进行了重大修改。也许您的模块对调度程序环境做了一些假设,也许没有,但不能保证它能在较新的系统上工作。
您无法针对尚未配置和构建的内核源代码树构建模块。最简单的方法是使用/lib/modules/$(uname -r)/build/
大多数发行版提供的内核包提供的符号链接,并提供足够的标头和配置材料来构建外部模块。
如果您想尝试为当前内核构建模块,请将目录更改为模块的源目录并运行以下命令:
make -C /lib/modules/`uname -r`/build M=$PWD
这将调用 kbuild 机制来正确构建您的模块。有关更多详细信息,请参阅Documentation/kbuild/modules.txt
内核源代码。
答案3
2.6.22 内核太旧,无法与 3.0 兼容