Ubuntu 22.04安装CUDA时NVIDIA DKMS模块因vm_flags只读成员赋值错误编译失败的解决方法咨询
嗨,从你的描述和错误日志来看,问题的核心是CUDA安装程序自带的旧版NVIDIA驱动(520.61.05)和你当前使用的6.2.0-39内核不兼容,再加上你之前已经通过ubuntu-drivers autoinstall装了更新的535驱动,新旧驱动的DKMS模块发生冲突,最终触发了编译失败。
内核6.2及后续版本里,vma->vm_flags被改成了只读成员,但旧版NVIDIA驱动的代码还在尝试直接修改它(就是日志里那行vma->vm_flags |= VM_MIXEDMAP;),这就是导致编译报错的直接原因。
下面给你几个可行的解决步骤:
第一步:清理冲突的旧版DKMS模块
先把安装失败的520驱动DKMS模块彻底移除,同时删除残留的崩溃文件:sudo dkms remove nvidia/520.61.05 --all sudo rm /var/crash/nvidia-dkms-520.0.crash第二步:升级到兼容当前内核的NVIDIA驱动
你的系统nvidia-detector已经推荐了545版本,这个版本完全适配6.2内核,直接安装即可:sudo apt update sudo apt install nvidia-driver-545 nvidia-dkms-545安装完成后重启系统,用
nvidia-smi命令验证驱动是否正常加载。第三步:跳过驱动组件安装CUDA Toolkit
现在你已经有了兼容的驱动,安装CUDA时要避免安装程序再自带旧驱动,分两种情况操作:- 如果你用的是CUDA本地
.run安装包:
运行安装包时加上以下参数,跳过驱动和OpenGL组件:
安装过程中,当提示是否安装NVIDIA驱动时,选择No,只安装CUDA Toolkit及配套工具。sudo sh cuda_*.run --no-opengl-libs --no-dkms --override - 如果你用的是deb仓库安装:
直接安装cuda-toolkit包而不是完整的cuda包,这样就不会附带驱动组件:sudo apt install cuda-toolkit
- 如果你用的是CUDA本地
第四步:验证CUDA安装
安装完成后,把CUDA的环境变量加到你的shell配置文件里(比如~/.bashrc或~/.zshrc):export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH重载配置文件后,用
nvcc -V命令验证CUDA编译器是否正常工作。
另外补充一点:你当前用的是Wayland会话,虽然这不是这次问题的直接原因,但如果后续遇到NVIDIA相关的显示异常,可以尝试切换到Xorg会话(登录界面点击齿轮图标选择),Wayland对NVIDIA的兼容性偶尔会有小问题。
备注:内容来源于stack exchange,提问作者ravi




