当前位置: 首页 > news >正文

NVIDIA DKMS 驱动构建失败修复笔记

文章目录

  • 问题描述
  • 环境信息
  • 问题根因分析
  • 解决方案
    • 步骤 1:清理残留文件
    • 步骤 2:修改 DKMS 配置排除 peermem 模块
    • 步骤 3:修改 Kbuild 文件彻底排除 peermem
    • 步骤 4:重新构建 DKMS 模块
  • 修复结果
  • 替代解决方案
    • 方案 1:安装 OFA 内核模块(推荐用于 InfiniBand 环境)
    • 方案 2:升级到更新的 NVIDIA 驱动
  • 总结
  • 参考链接

问题描述

在 Ubuntu 22.04 系统上安装 NVIDIA 580 驱动时遇到 DKMS 构建失败:

Building module(s)............(badexitstatus:2)Failed command:unsetARCH;[!-h /usr/bin/cc]&&exportCC=/usr/bin/gcc;envNV_VERBOSE=1'make'-j16... Error!Badreturnstatusformodule build on kernel:6.8.0-47-generic(x86_64)

同时伴随的错误:

ERROR: modpost: "ib_register_peer_memory_client" [/var/lib/dkms/nvidia/580.126.09/build/nvidia-peermem.ko] undefined! ERROR: modpost: "ib_unregister_peer_memory_client" [/var/lib/dkms/nvidia/580.126.09/build/nvidia-peermem.ko] undefined!

环境信息

  • 操作系统:Ubuntu 22.04
  • 内核版本:6.2.0-26-generic 和 6.8.0-47-generic
  • NVIDIA 驱动版本:580.126.09
  • GPU:NVIDIA H100 80GB x 2

问题根因分析

  1. 直接原因nvidia-peermem模块在 Linux 6.8 内核上构建失败
  2. 深层原因
    • nvidia-peermem是 NVIDIA 的 InfiniBand Peer Memory 驱动
    • 它依赖 OFA (Open Fabrics Alliance) 内核模块中的ib_register_peer_memory_clientib_unregister_peer_memory_client符号
    • OFA 内核模块 (/usr/src/ofa_kernel/x86_64/6.8.0-47-generic/Module.symvers) 未正确安装,导致符号未导出
  3. 影响范围:该模块主要用于 InfiniBand GPU Direct RDMA,大多数普通用户不需要

解决方案

步骤 1:清理残留文件

# 删除崩溃报告sudorm-rf /var/crash/nvidia-dkms-580.0.crash# 清除 DKMS 缓存sudorm-rf /var/lib/dkms/nvidia/580.126.09

步骤 2:修改 DKMS 配置排除 peermem 模块

编辑/usr/src/nvidia-580.126.09/dkms.conf,删除nvidia-peermem的模块条目:

sudocp/usr/src/nvidia-580.126.09/dkms.conf /usr/src/nvidia-580.126.09/dkms.conf.bak

新的 dkms.conf 内容:

PACKAGE_NAME="nvidia" PACKAGE_VERSION="580.126.09" CLEAN="make clean" BUILT_MODULE_NAME[0]="nvidia" DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" PROCS_NUM=`nproc` [ $PROCS_NUM -gt 16 ] && PROCS_NUM=16 MAKE[0]="unset ARCH; [ ! -h /usr/bin/cc ] && export CC=/usr/bin/gcc; env NV_VERBOSE=1 \ 'make' -j$PROCS_NUM NV_EXCLUDE_BUILD_MODULES='nvidia-peermem' KERNEL_UNAME=${kernelver} IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=$kernel_source_dir LD=/usr/bin/ld.bfd CONFIG_X86_KERNEL_IBT= modules" BUILT_MODULE_NAME[1]="nvidia-modeset" DEST_MODULE_LOCATION[1]="/kernel/drivers/char/drm" BUILT_MODULE_NAME[2]="nvidia-drm" DEST_MODULE_LOCATION[2]="/kernel/drivers/char/drm" AUTOINSTALL="yes" PATCH[0]="disable_fstack-clash-protection_fcf-protection.patch" PATCH_MATCH[0]='^(4\.[0-9]*)|(5\.[0-9]\.0)|(5\.1[0-2]\.0)' BUILT_MODULE_NAME[3]="nvidia-uvm" DEST_MODULE_LOCATION[3]="/kernel/drivers/char/drm"

步骤 3:修改 Kbuild 文件彻底排除 peermem

编辑/usr/src/nvidia-580.126.09/nvidia-peermem/nvidia-peermem.Kbuild

sudosed-i's/^obj-m += nvidia-peermem.o$/# obj-m += nvidia-peermem.o/'\/usr/src/nvidia-580.126.09/nvidia-peermem/nvidia-peermem.Kbuild

步骤 4:重新构建 DKMS 模块

# 清除旧缓存并重新构建sudorm-rf /var/lib/dkms/nvidia/580.126.09sudodkms autoinstall# 配置包sudodpkg --configure -a

修复结果

修复后成功构建的模块:

  • nvidia.ko- 核心驱动
  • nvidia-modeset.ko- 显示模式设置
  • nvidia-drm.ko- DRM 集成
  • nvidia-uvm.ko- CUDA 内存管理

驱动状态验证:

$ nvidia-sMI NVIDIA-SMI580.126.09 Driver Version:580.126.09 CUDA Version:13.0+-----------------------------------------------------------------------------------------+|GPU Name Persistence-M|Bus-Id Disp.A|Volatile Uncorr. ECC||0NVIDIA H100 80GB HBM3 Off|00000000:08:00.0 Off|0||1NVIDIA H100 80GB HBM3 Off|00000000:0A:00.0 Off|0|+-----------------------------------------------------------------------------------------+

替代解决方案

方案 1:安装 OFA 内核模块(推荐用于 InfiniBand 环境)

如果需要nvidia-peermem功能(用于 GPU Direct RDMA):

# 安装 MOFED (Mellanox OpenFabrics Enterprise Distribution)sudoaptupdatesudoaptinstallmlnx-ofed-kernel-dkms

方案 2:升级到更新的 NVIDIA 驱动

较新版本的 NVIDIA 驱动可能已修复此兼容性问题。

总结

本次修复的关键点:

  1. 问题定位:通过查看/var/lib/dkms/nvidia/580.126.09/build/make.log找到modpost阶段的符号缺失错误
  2. 解决方案:通过修改dkms.confnvidia-peermem.Kbuild文件排除问题模块
  3. 验证方法:使用nvidia-smi确认驱动正常工作

nvidia-peermem模块主要用于 InfiniBand 环境下的 GPU Direct RDMA 功能,对于大多数不使用 InfiniBand 的用户来说,排除该模块不会影响正常的 GPU 使用。

参考链接

  • NVIDIA 官方文档 - GPU Direct RDMA
  • DKMS 官方文档
  • Linux 内核模块构建文档

http://www.jsqmd.com/news/379636/

相关文章:

  • 想要高效完成毕业论文?试试这5个实用的AI辅助工具
  • 在Python中使用paramiko以SSH方式连接华三交换机失败的问题
  • 5款强大的AI工具,助你轻松应对毕业论文的写作挑战
  • 针对毕业论文写作,推荐5款高效的AI工具来提升效率
  • 在学术研究中,这5个AI工具能显著优化毕业论文的撰写过程
  • 我们存在的意义是什么?造物主为何创造我们?
  • 2026年,银川搬家公司哪家靠谱?全维度解析,附避坑指南 - 宁夏壹山网络
  • 正规支付宝消费券回收平台精选指南 - 京顺回收
  • Maple Flow 2025.2 新版发布:更强性能、AI助力、轻松迁移,开启高效计算新体验!
  • 【每日一题】LeetCode 3714. 最长的平衡子串 II
  • Vue3解析学习 - handlers 模块
  • 寒假学习笔记1.31
  • 寒假学习笔记1.30
  • 探索 Java 中的新 HTTP 客户端
  • P2698 [USACO12MAR] Flowerpot S
  • 中国移动(600941)价值投资深度研究报告 2026.2.13
  • 免费,在线pdf转jpg的链接。
  • 深入解析:Android平板备份到计算机
  • Winter Vacation 2026 - -Klsw
  • 小程序环境+基础页面
  • 三维点云处理技术和深度学习在点云处理中的应用-02:三维点云表征概述
  • 信息论与编码篇---N次拓展信道
  • 信息论与编码篇---积信道
  • 信息论与编码篇---可逆矩阵信道
  • Spark大数据处理:技术、应用与性能优化【1.2】
  • 有限元模型可视化:两套独立Python代码实现带载荷与纯几何对比
  • 6个提示词,能把混乱的剪辑变成专业策略
  • 26.2.12
  • 完整教程:leetcode算法(112.路径总和)
  • 使用Qwen Code的Skills能力重塑工作流 - yi