在 Ubuntu 20.04 中为 GTX 560 Ti 安装 Nvidia 驱动程序时,如何修复客户端版本和内核模块版本之间的“NVRM:API 不匹配”?
Posted
技术标签:
【中文标题】在 Ubuntu 20.04 中为 GTX 560 Ti 安装 Nvidia 驱动程序时,如何修复客户端版本和内核模块版本之间的“NVRM:API 不匹配”?【英文标题】:How to fix "NVRM: API mismatch" between client version and kernel module version when installing Nvidia drivers for a GTX 560 Ti in Ubuntu 20.04? 【发布时间】:2022-01-13 11:41:49 【问题描述】:在运行 Kubuntu 20.04 LTS 的 Intel Core i5 12600K PC 上添加 GTX 560 Ti 后,我已安装 nvidia-driver-390。
重启后出现以下错误:
$ dmesg|grep -i nvrm -A3
[ 113.647054] NVRM: API mismatch: the client has the version 460.91.03, but
NVRM: this kernel module has the version 390.144. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
如何将该客户端版本设置为390.144? em>
较新的驱动程序,如 nvidia-driver-460 似乎没有支持此视频卡。我也收到警告:
$ ubuntu-drivers devices
WARNING:root:_pkg_get_support nvidia-driver-390: package has invalid Support Legacyheader, cannot determine support level
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001200sv00001043sd000083ACbc03sc00i00
vendor : NVIDIA Corporation
model : GF114 [GeForce GTX 560 Ti]
driver : nvidia-340 - distro non-free
driver : nvidia-driver-390 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
我运行一个较新的内核,以便与英特尔2.5g以太网IGC驱动程序联网。我可以启动到内核 5.4.0.91-generic,但是我没有网络。
$ uname -a
Linux Kairos 5.13.0-22-generic #22~20.04.1-Ubuntu SMP Tue Nov 9 15:07:24 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
此外,dkms 给出:
$ dkms status
nvidia, 390.144, 5.13.0-22-generic, x86_64: installed
nvidia, 390.144, 5.4.0-91-generic, x86_64: built
虽然 /var/lib/dkms/ 显示:
$ tree /var/lib/dkms/
/var/lib/dkms/
├── dkms_dbversion
└── nvidia
├── 390.144
│ ├── 5.13.0-22-generic
│ │ └── x86_64
│ │ ├── log
│ │ │ └── make.log
│ │ └── module
│ │ ├── nvidia-drm.ko
│ │ ├── nvidia.ko
│ │ └── nvidia-modeset.ko
│ ├── 5.4.0-91-generic
│ │ └── x86_64
│ │ ├── log
│ │ │ └── make.log
│ │ └── module
│ │ ├── nvidia-drm.ko
│ │ ├── nvidia.ko
│ │ ├── nvidia-modeset.ko
│ │ └── nvidia-uvm.ko
│ └── source -> /usr/src/nvidia-390.144
└── kernel-5.13.0-22-generic-x86_64 -> 390.144/5.13.0-22-generic/x86_64
12 directories, 10 files
modinfo nvidia
返回:
filename: /lib/modules/5.13.0-22-generic/updates/dkms/nvidia.ko
alias: char-major-195-*
version: 390.144
supported: external
license: NVIDIA
srcversion: D635B75826DE88984609590
alias: pci:v000010DEd00000E00sv*sd*bc04sc80i00*
alias: pci:v000010DEd*sv*sd*bc03sc02i00*
alias: pci:v000010DEd*sv*sd*bc03sc00i00*
depends: ipmi_msghandler
retpoline: Y
name: nvidia
vermagic: 5.13.0-22-generic SMP mod_unload modversions
parm: NVreg_Mobile:int
parm: NVreg_ResmanDebugLevel:int
parm: NVreg_RmLogonRC:int
parm: NVreg_ModifyDeviceFiles:int
parm: NVreg_DeviceFileUID:int
parm: NVreg_DeviceFileGID:int
parm: NVreg_DeviceFileMode:int
parm: NVreg_UpdateMemoryTypes:int
parm: NVreg_InitializeSystemMemoryAllocations:int
parm: NVreg_UsePageAttributeTable:int
parm: NVreg_MapRegistersEarly:int
parm: NVreg_RegisterForACPIEvents:int
parm: NVreg_CheckPCIConfigSpace:int
parm: NVreg_EnablePCIeGen3:int
parm: NVreg_EnableMSI:int
parm: NVreg_TCEBypassMode:int
parm: NVreg_UseThreadedInterrupts:int
parm: NVreg_EnableStreamMemOPs:int
parm: NVreg_EnableBacklightHandler:int
parm: NVreg_RestrictProfilingToAdminUsers:int
parm: NVreg_EnableUserNUMAManagement:int
parm: NVreg_EnableIBMNPURelaxedOrderingMode:int
parm: NVreg_MemoryPoolSize:int
parm: NVreg_KMallocHeapMaxSize:int
parm: NVreg_VMallocHeapMaxSize:int
parm: NVreg_IgnoreMMIOCheck:int
parm: NVreg_RegistryDwords:charp
parm: NVreg_RegistryDwordsPerDevice:charp
parm: NVreg_RmMsg:charp
parm: NVreg_AssignGpus:charp
我找到了很多关于如何将驱动程序升级到最新版本的帖子,目前是 495,但是它并没有解决我的问题,并且那个版本不支持我的显卡。只有版本 390 有效,但随后我收到 API 不匹配错误。
【问题讨论】:
【参考方案1】:我找到了解决方案,现在 Kubuntu 可以正常启动了。
首先,我清除了所有驱动程序和库
$ sudo apt purge nvidia-* && sudo apt purge libnvidia-*
然后我检查了是否没有安装任何 nvidia 驱动程序。以下内容没有返回任何内容,因为它应该
$ dpkg -l nvidia-*|grep ^ii
然后我从 Geforce GTX 560 Ti 下载了正确版本的驱动程序 https://www.nvidia.com/Download/driverResults.aspx/177153/en-us。您应该从https://www.nvidia.com/Download/index.aspx?lang=en-us 中选择您的驱动程序。
在此之后我重新启动到终端
$ sudo init 3
我在命令行登录,进入刚刚下载驱动的目录,然后更改权限并运行安装文件(可能会询问一些配置问题),然后重新启动
$ cd $HOME/Downloads/Nvidia/
$ chmod a+x NVIDIA-Linux-x86_64-390.144.run
$ sudo ./NVIDIA-Linux-x86_64-390.144.run
$ sudo reboot
我现在有正常的 GDM 登录屏幕,登录后我的双屏幕分辨率都正确。
【讨论】:
以上是关于在 Ubuntu 20.04 中为 GTX 560 Ti 安装 Nvidia 驱动程序时,如何修复客户端版本和内核模块版本之间的“NVRM:API 不匹配”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ubuntu 20.04 (Focal Fossa) 中为 Python 2.7 安装 python-mysqldb?
如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?
苹果M1 GPU图形性能测试:超越GTX 1050 Ti和RX 560