我使用 GF108M [GeForce GT 620M/630M/635M/640M LE] 并(想要)使用 nvidia-driver-390。但是,如果我安装此驱动程序(通过包管理器),我会收到来自 nvidia-smi 的错误,抱怨版本不匹配 ( API mismatch: the client has the version 470.86, but this kernel module has the version 390.157.
)。这是来自 nvidia 驱动程序的版本,该驱动程序似乎已部分安装。
如果我使用 nvidia (NVIDIA-Linux-x86_64-390.157.run) 的安装程序,我不会遇到此问题,但我更愿意使用包管理器版本。如果我卸载此驱动程序并重新安装包管理器版本,则问题会再次出现。
我还尝试安装和卸载预期版本(NVIDIA-Linux-x86_64-470.86.run),但是这个版本当然不支持我的显卡,因此安装无法完成,我无法卸载导致该版本不匹配的任何内容。
我目前最好的线索:我如何/在哪里可以找到 NVRM API 获取其客户端版本的文件?或者更好:我怎样才能清理这些错误驱动程序的残留物?
我尝试过的:
- 清除并重新安装软件包
- 从运行文件安装和卸载 390(正确的)和 470(有问题的)Nvidia 驱动程序
- 重新生成内核映像
- 重新安装内核
我拥有的
Ubuntu 22.04 5.15.0-56-generic #62-Ubuntu
GeForce GT 630M
使用软件包管理器驱动程序:
NVIDIA 系统管理接口 -- v390.157
$ cat /proc/driver/nvidia/version
NVRM 版本:NVIDIA UNIX x86_64 内核模块 390.157 10 月 12 日星期三 09:19:07 UTC 2022
GCC 版本:
$ cat /sys/module/nvidia/version
390.157
$ modinfo nvidia | grep version
version:390.157
srcversion:969136205C7AF53C6F7D4AE
vermagic:5.15.0-56-generic SMP mod_unload modversions
$ sudo dmesg
[348.574962] NVRM:API不匹配:客户端的版本为470.86,但
NVRM:此内核模块的版本为390 .157.请
NVRM: 确保该内核模块和所有 NVIDIA 驱动程序
NVRM: 组件具有相同的版本。
答案1
解决了这个问题,对于任何感兴趣的人:
在清理后,我使用find /usr/lib -iname "*nvidia*"
并发现了一堆名称中带有 470.86 的文件。我曾经sudo find /usr/lib -iname "*nvidia*470\.86" -delete
删除它们并sudo find /usr/lib -iname "*nvidia*\.ko" -delete
删除其他不应该存在的 nvidia 文件,只留下像 NvidiaDetector 这样的东西。
重新安装正确的驱动程序并重新启动,但它不起作用