【问题标题】:How to build kernel module without full kernel source tree?如何在没有完整内核源代码树的情况下构建内核模块?
【发布时间】:2014-04-03 03:06:20
【问题描述】:

我想构建没有内核源代码树的内核模块。
相反,我只指定了内核头目录。

这个参考链接告诉我它应该是可行的:
build kernel module w/o source source tree

但是其他一些参考链接告诉我应该使用完整的内核源代码树构建模块!

我的问题是:
1. 我应该用完整的内核源代码树构建内核模块链接吗?
2. 在构建我的单个模块之前,是否需要在内核源代码树下进行完整构建?

【问题讨论】:

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

标签: linux linux-kernel kernel-module


【解决方案1】:
  1. 不是没有必要。您需要一个包含函数和类型声明的头文件。您还可以使用 Makefiles 和 Kconfig 但没有源代码进行内核树。 kbuild - 内核构建系统需要这个内核树。

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

【讨论】:

  • 在构建模块时,Makefile 和 Kconfig 的用途是什么?从 GCC 编译器和链接器的角度来看,只需要编译头文件和链接库(我知道 ko 是内核中的运行时链接)。这就是为什么我这么困惑!
  • 首先,您正在使用make 实用程序构建模块。 make 只知道 Makefile 描述对象之间的依赖关系,例如“usb 驱动程序依赖于驱动程序核心”。 GCC 和链接器由 make 调用。 GCC 和链接器查找头文件和库。 Kconfig 描述了内核选项——您可以使用make menuconfig 进行配置。 Kconfig 设置转换为 C 宏 CONFIG_<OPTION> 的选项,如 CONFIG_SMP
【解决方案2】:

对这两个问题都说不。您说的是树外(或“外部”)模块。

这里是Building External Modules的教程。

这是一个简单的 Makefile 示例。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2023-01-09
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多