如何在没有完整内核源代码树的情况下构建内核模块?

3
我想要构建内核模块,但不希望使用内核源代码树。相反,我只指定了内核头文件的目录。
参考链接告诉我这应该可行:build kernel module w/o source source tree。但是其他一些参考链接告诉我应该使用完整的内核源代码树来构建模块!
我的问题是: 1. 我是否需要使用完整的内核源代码树链接内核模块? 2. 在构建单个模块之前,有必要在内核源代码树下进行完整的构建吗?

  1. 您可以在没有完整内核源代码树的情况下构建内核模块,只需要内核头文件即可。
  2. 在构建您的模块之前,无需构建整个内核源代码。
- Gautham Kantharaju
2个回答

2
  1. 不需要。您需要一个包含函数和类型声明的头文件。您还需要内核树,其中包括Makefiles和Kconfig但没有源代码。这个内核树是由kbuild - 内核构建系统所需的。

  2. 绝对不需要。您可以构建单个模块,而不必构建整个内核,无论是内核外还是内核内模块。


在构建模块时,Makefiles和Kconfig的目的是什么? 从GCC编译器和链接器的角度来看,只需要头文件进行编译和库进行链接(我知道ko是内核中的运行时链接)。 这就是我感到困惑的原因! - summerdog
首先,您正在使用make工具构建模块。 make只知道描述对象之间依赖关系的Makefile,例如“usb驱动程序依赖于驱动程序核心”。GCC和链接器由make调用。 GCC和链接器查找头文件和库。Kconfig描述内核选项-您可以使用make menuconfig进行配置的选项。 Kconfig设置选项,这些选项转换为C宏CONFIG_<OPTION>,例如CONFIG_SMP - Alexander Dzyoba

-1

两个问题都是否定的。你说的是树外(或“外部”)模块。

这里有一个构建外部模块的教程。

还有一个简单的 Makefile 示例。

obj-m += your-module.o
KDIR=/lib/modules/`uname -r`/build
default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接