文章目录问题描述环境信息问题根因分析解决方案步骤 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_VERBOSE1make-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-genericNVIDIA 驱动版本580.126.09GPUNVIDIA H100 80GB x 2问题根因分析直接原因nvidia-peermem模块在 Linux 6.8 内核上构建失败深层原因nvidia-peermem是 NVIDIA 的 InfiniBand Peer Memory 驱动它依赖 OFA (Open Fabrics Alliance) 内核模块中的ib_register_peer_memory_client和ib_unregister_peer_memory_client符号OFA 内核模块 (/usr/src/ofa_kernel/x86_64/6.8.0-47-generic/Module.symvers) 未正确安装导致符号未导出影响范围该模块主要用于 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_NAMEnvidia PACKAGE_VERSION580.126.09 CLEANmake clean BUILT_MODULE_NAME[0]nvidia DEST_MODULE_LOCATION[0]/kernel/drivers/char/drm PROCS_NUMnproc [ $PROCS_NUM -gt 16 ] PROCS_NUM16 MAKE[0]unset ARCH; [ ! -h /usr/bin/cc ] export CC/usr/bin/gcc; env NV_VERBOSE1 \ make -j$PROCS_NUM NV_EXCLUDE_BUILD_MODULESnvidia-peermem KERNEL_UNAME${kernelver} IGNORE_XEN_PRESENCE1 IGNORE_CC_MISMATCH1 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 AUTOINSTALLyes 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.Kbuildsudosed-is/^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 驱动可能已修复此兼容性问题。总结本次修复的关键点问题定位通过查看/var/lib/dkms/nvidia/580.126.09/build/make.log找到modpost阶段的符号缺失错误解决方案通过修改dkms.conf和nvidia-peermem.Kbuild文件排除问题模块验证方法使用nvidia-smi确认驱动正常工作nvidia-peermem模块主要用于 InfiniBand 环境下的 GPU Direct RDMA 功能对于大多数不使用 InfiniBand 的用户来说排除该模块不会影响正常的 GPU 使用。参考链接NVIDIA 官方文档 - GPU Direct RDMADKMS 官方文档Linux 内核模块构建文档