
本文共 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.dep
和modules.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
文件,问题将得到解决。
发表评论
最新留言
关于作者
