我正在创建一个与内核头交互的程序。用户可以提供标头位置的路径,但首先我希望能够根据约定发现用户计算机上现有的内核标头。这显然在发行版和工具之间有所不同。我知道从技术上讲 Linux 是完全可定制的,但我试图了解哪些约定适用于主流发行版:
- 谁创建 /lib/modules/$version 以及何时创建?
- 除了 /kernel 和 /extra 子目录之外,还有 /lib/modules 结构指南吗?
- /build 和 /source 是否应该始终存在于 /lib/modules 下? (两个都?)
- /build 和 /source 有时是符号链接有时不是,是否可以接受?
- 标题和源代码是否放在一起?我注意到大多数发行版都提供内核头文件或内核开发包。这有什么关系?
答案1
- 通常
make modules_install
但当然发行版只是打包所有这些模块。 - 这看起来像是 Debian/Ubuntu 的事情。
depmod
只是遍历下所有子目录/lib/modules/$version
- 对于 Fedora/RHEL/CentOS 或从源代码安装的 Linux 内核 - 答案是肯定的。
- 通常它们总是符号链接
- 几乎从不。构建模块需要内核开发头文件,大多数发行版甚至不提供安装内核源代码的选项 - 这对最终用户来说没有多大意义。
我建议您查看 VirtualBox、NVIDIA 或 VMWare 提供的内核模块构建系统,而不是重新发明轮子。它们经过充分测试并支持数十种发行版。