在 Arch Linux 中编译内核模块

4 linux-kernel

我目前在 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.
Run Code Online (Sandbox Code Playgroud)

有人曾经说过我必须编译这个内核源代码。如果是这样,是否有更简单的方法来获取编译版本,而不是源代码插入这里?

Bru*_*ger 6

您可能缺少内核头文件包: pacman -S linux-headers

这应该为您提供适当的内核头文件。


sar*_*old 5

您的模块可能无法在 3.0 左右的 Linux 内核下运行良好——例如,调度程序在 2.6.23 中进行了重大修改。也许您的模块对调度程序环境做了一些假设,也许没有,但不能保证它能在较新的系统上工作。

您无法针对尚未配置和构建的内核源代码树构建模块。最简单的方法是使用/lib/modules/$(uname -r)/build/大多数发行版提供的内核包提供的符号链接,并提供足够的标头和配置材料来构建外部模块。

如果您想尝试为当前内核构建模块,请将目录更改为模块的源目录并运行以下命令:

make -C /lib/modules/`uname -r`/build M=$PWD
Run Code Online (Sandbox Code Playgroud)

这将调用 kbuild 机制来正确构建您的模块。有关更多详细信息,请参阅Documentation/kbuild/modules.txt内核源代码。