首页 文章

Linux内核模块相关的理解?

提问于
浏览
1

To load a module, the kernel must contain all the kernel symbols used in the module. If those symbols were not included in the kernel at compile time, the module will not be loaded due to missing dependencies.

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

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

1 回答

  • 2

    如果我'm not mistaken, you'重新引用这篇文章:http://www.linuxjournal.com/content/kbuild-linux-kernel-build-system?page=0,0

    这个平均内核模块应该用完整的内核编译来编译,以包含vmlinux中的内核模块符号,如果我们单独编译模块那么我们将无法在运行时加载内核?

    这个声明引用了内核编译,而不是模块编译(而是加载) .

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

    这不完全正确 . 这是The Linux Kernel Module Programming Guide的例子

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

    因此,即使符号未使用内核编译(但由不同模块提供),您仍然可以加载模块

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

相关问题