You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Linux 5.6及以上版本内核提供自定义Module.symvers文件

Linux 5.6+ 跨模块依赖导出符号的构建方案

失效根因

从你提供的5.4和5.6版本内核构建脚本对比可以明确:Linux 5.6版本移除了MODPOST调用参数中的-I $(modulesymfile)配置项,因此构建外部模块时,内核构建系统不再自动读取当前构建目录下的Module.symvers文件,原有依赖本地自定义Module.symvers的方案自然失效。

正确实现方式

内核官方保留了KBUILD_EXTRA_SYMBOLS变量用于该场景,只需要将被依赖模块生成的Module.symvers文件的绝对路径赋值给该变量即可,支持同时指定多个路径,路径间用空格分隔。

使用方式

  • 编译时临时指定
    构建依赖模块时直接在make命令中追加变量声明,示例如下:

    # 假设被依赖模块的Module.symvers路径为 /opt/modules/parent_module/Module.symvers
    make -C /lib/modules/$(uname -r)/build M=$(pwd) KBUILD_EXTRA_SYMBOLS=/opt/modules/parent_module/Module.symvers modules
    
  • 写入Makefile固化配置
    也可以直接在依赖模块的Makefile中提前声明该变量,避免每次手动输入:

    # 追加被依赖模块的symvers路径,多个依赖依次追加即可
    KBUILD_EXTRA_SYMBOLS += /opt/modules/parent_module/Module.symvers
    # KBUILD_EXTRA_SYMBOLS += /opt/modules/other_module/Module.symvers
    
    all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    

注意事项

  • 被依赖模块的Module.symvers必须是和当前构建使用的内核版本、编译配置完全一致的环境下生成的,否则会出现CRC校验不匹配的警告,模块加载时也会报错。
  • 该方案不会修改系统内核的任何原有文件,不会污染构建环境,是官方推荐的长期可行方案。

内容的提问来源于stack exchange,提问作者Alexey Godin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:09:02