/lib/modules 周围的约定是什么?

/lib/modules 周围的约定是什么?

我正在创建一个与内核头交互的程序。用户可以提供标头位置的路径,但首先我希望能够根据约定发现用户计算机上现有的内核标头。这显然在发行版和工具之间有所不同。我知道从技术上讲 Linux 是完全可定制的,但我试图了解哪些约定适用于主流发行版:

  1. 谁创建 /lib/modules/$version 以及何时创建?
  2. 除了 /kernel 和 /extra 子目录之外,还有 /lib/modules 结构指南吗?
  3. /build 和 /source 是否应该始终存在于 /lib/modules 下? (两个都?)
  4. /build 和 /source 有时是符号链接有时不是,是否可以接受?
  5. 标题和源代码是否放在一起?我注意到大多数发行版都提供内核头文件或内核开发包。这有什么关系?

答案1

  1. 通常make modules_install但当然发行版只是打包所有这些模块。
  2. 这看起来像是 Debian/Ubuntu 的事情。depmod只是遍历下所有子目录/lib/modules/$version
  3. 对于 Fedora/RHEL/CentOS 或从源代码安装的 Linux 内核 - 答案是肯定的。
  4. 通常它们总是符号链接
  5. 几乎从不。构建模块需要内核开发头文件,大多数发行版甚至不提供安装内核源代码的选项 - 这对最终用户来说没有多大意义。

我建议您查看 VirtualBox、NVIDIA 或 VMWare 提供的内核模块构建系统,而不是重新发明轮子。它们经过充分测试并支持数十种发行版。

相关内容