Linux内核模块相关理解?

Linux内核模块相关理解?,linux,linux-kernel,Linux,Linux Kernel,要加载模块,内核必须包含模块中使用的所有内核符号。如果这些符号在编译时未包含在内核中,则由于缺少依赖项,将不会加载模块。 这是否意味着内核模块应该用完整的内核编译来编译,以便在vmlinux中包含内核模块符号,如果我们单独编译模块,那么我们将无法在运行时加载内核 请更正我的理解,即使我提出了错误的问题。请更正。如果我没有弄错,您指的是这篇文章: 这是否意味着内核模块应该用完整的内核编译来编译,以便在vmlinux中包含内核模块符号,如果我们单独编译模块,那么我们将无法在运行时加载内核 此声明涉及

要加载模块,内核必须包含模块中使用的所有内核符号。如果这些符号在编译时未包含在内核中,则由于缺少依赖项,将不会加载模块。

这是否意味着内核模块应该用完整的内核编译来编译,以便在vmlinux中包含内核模块符号,如果我们单独编译模块,那么我们将无法在运行时加载内核


请更正我的理解,即使我提出了错误的问题。请更正。

如果我没有弄错,您指的是这篇文章:

这是否意味着内核模块应该用完整的内核编译来编译,以便在vmlinux中包含内核模块符号,如果我们单独编译模块,那么我们将无法在运行时加载内核

此声明涉及内核编译,而不是模块编译(而是加载)

要加载模块,内核必须包含模块中使用的所有内核符号。如果这些符号在编译时未包含在内核中,则由于缺少依赖项,将不会加载模块

这并不完全正确。下面是一个例子

例如,msdos.ko要求fat.ko模块已经加载到内核中。如果另一个模块定义了被请求模块使用的符号(变量或函数),则被请求模块依赖于另一个模块

所以,即使符号不是用内核编译的(而是由不同的模块提供的),您仍然可以加载模块

但是,想象一下,您在编译内核时没有
printk
支持。现在,您尝试加载的每个模块都将尝试查找根本不存在的
printk
函数。因此,在编译内核时,您需要做出合理的决定,以包含所有可能加载的模块都可以加载的基本要素