depmod 生成 modules.dep
发布日期:2021-05-10 10:32:58 浏览次数:12 分类:精选文章

本文共 1456 字,大约阅读时间需要 4 分钟。

modules.dep 文件生成问题及解决方案

1. 问题分析

昨天同事反馈说CentOS标准内核 release的lib/modules目录中没有生成modules.dep文件,这导致无法使用modprobe加载模块时自动处理依赖关系。这个问题看起来应该并不难,但经过一番调研,发现实际上问题主要发生在内核编译流程的某个环节。

2. 表面问题与深层原因

初步来看,这个问题可能涉及两方面:

  • 生成问题:确定是内核编译过程中没有生成modules.dep文件。
  • 提交问题:确认在rpm包中是否存在该文件。

通过对rpmbuild编译CentOS内核后发现确实没有生成modules.dep文件,进一步怀疑是生成问题所在。在Debian 10的4.19.98内核源码上进行测试,结果表明该问题并非特定于CentOS内核,而可能是一个普遍的编译流程问题。

3. 模块依赖文件生成过程

网上资料指出,modules.dep文件可以通过调用depmod命令来生成。尝试后发现,手动调用depmod并不会生成所需文件。原来,depmod命令不会直接生成modules.dep文件,而是会根据模块的信息生成对应的modules.dep.bin文件。这一点需要明确区分。

4. 内核编译流程中modules Install步骤

在CentOS内核的Makefile中,modules_install目标负责将内核模块安装到指定路径(如install目录)。在安装完成后,会自动调用depmod生成相关文件,包括modules.depmodules.dep.bin等。但从编译日志来看,某些情况下depmod可能未被正确调用。

5. 代码中潜在问题

通过对比Debian内核和CentOS内核的Makefile,发现CentOS内核多了一个编译目标__fw_modinst,这导致在编译时会跳过标准的modules_install流程,从而无法生成所需的modules.dep文件。

6. 修改源代码以生成modules.dep

为了解决问题,可以在内部脚本或kernel.spec中添加额外的处理步骤,确保在就业流程中调用depmod生成modules.dep文件。例如,可以在kernel.spec中添加部分代码,指定调用depmod或使用现有的脚本来生成所需文件。

7. 验证与测试

完成代码修改后,重新编译内核并进行安装测试。通过检查编译输出和模块安装后的文件系统,确保modules.dep文件已被生成。

8. 使用命令行工具测试

使用strace追踪modprobe的运行,可以进一步确认modules.dep文件是否存在,这通常不会被modprobe所依赖。man modules.dep也提供了相关信息,确认文件的存在性及用途。

9. 结果与总结

问题的根源在于CentOS内核编译流程中,某些情况下depmod未被调用以生成所需文件。通过对流程的修正,如添加调用depmod的步骤,可以解决这一问题。同时,需要清楚区分modules.dep文件的作用,认识到其仅为人类参考,而模块的加载依赖主要通过二进制文件实现。

最终实现

修改kernel.spec文件或内部Makefile,将depmod调用添加到内核编译流程中。例如,在modules_install目标中添加$(call cmd,depmod),将depmod添加至编译命令中。然后重新编译并测试,确保生成modules.dep文件,问题将得到解决。

上一篇:你还停留在只能解决自我能力范围之内的问题吗?
下一篇:dpdk 问题排查的第一关:基础环境的排查

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月21日 18时58分37秒