使用独立构建目录时make modules_install因depmod路径错误失败
内核模块安装depmod路径错误问题解决
问题场景
操作流程:
- 将Linux内核源码复制到
~/linux - 执行
make mrproper并拉取kernel.org的master分支 - 创建空build目录
- 复制旧配置到
build/.config,执行make O=build oldconfig更新配置 - 执行
make O=build编译内核,成功生成产物 - 创建空install目录并设置环境变量:
~/linux> mkdir install ~/linux> export INSTALL_PATH=../install ~/linux> export INSTALL_MOD_PATH=../install/modules
- 执行
make O=build install成功将System.map和vmlinuz放入install目录 - 执行
make O=build modules_install时触发错误:
depmod: ERROR: could not open directory /home/gabe/linux/build/../install/modules/usr/lib/modules/6.6.0-1-default+: No such file or directory depmod: FATAL: could not search modules: No such file or directory
核心问题:模块实际安装在${INSTALL_MOD_PATH}/lib/modules/...,但depmod错误地查找${INSTALL_MOD_PATH}/usr/lib/modules/...,使用绝对路径操作后问题依然存在。
原因分析
这既不是操作失误,也不是内核构建系统的bug,而是INSTALL_MOD_PATH的设计逻辑导致的:INSTALL_MOD_PATH的作用是指定模块安装的根目录前缀,而非直接指向模块存放的子目录。当你将其设为../install/modules时,构建系统会按照标准路径结构,把模块安装到${INSTALL_MOD_PATH}/lib/modules/...;但depmod会默认以${INSTALL_MOD_PATH}作为系统根目录,去搜索标准路径/usr/lib/modules/...,最终拼接出错误的路径。
解决办法
方法一(推荐,符合官方使用规范)
调整INSTALL_MOD_PATH为install目录的根路径,而非modules子目录:
export INSTALL_MOD_PATH=../install
执行此修改后,模块会被安装到../install/lib/modules/...,depmod也会正确在../install/lib/modules/...下搜索处理模块,不会再出现路径错误。
方法二(自定义模块子目录场景)
如果必须将模块放到单独的modules子目录,可以手动调用depmod指定搜索路径,跳过构建系统自动调用的depmod:
- 先执行模块安装,跳过depmod:
make O=build modules_install INSTALL_MOD_PATH=../install/modules DEPMOD=/bin/true
- 手动执行depmod指定正确路径:
depmod -a -b ../install/modules 6.6.0-1-default+
内容的提问来源于stack exchange,提问作者der_gabe
相关产品推荐
相关产品推荐

