簡體   English   中英

在 Ubuntu 20.04 中為 GTX 560 Ti 安裝 Nvidia 驅動程序時,如何修復客戶端版本和 kernel 模塊版本之間的“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?

在運行 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?

較新的驅動程序,如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

我運行更新的kernel以便與 Intel 2.5G Ethe.net IGC 驅動程序聯網。 我可以啟動到 kernel 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 不匹配錯誤。

我遇到了這個問題,但它與 CUDA(某些系統上未安裝)無關。 在我的系統上,kernel 模塊被嵌入到壓縮的 kernel 圖像中,然后在引導過程的早期加載。 這些嵌入但過時的模塊將阻止加載正確的、新安裝/編譯的獨立模塊文件。 您可以輕松確認此問題。 檢查以下內容:

cat /proc/driver/nvidia/version
cat /sys/module/nvidia/version

如果加載的模塊與驅動程序版本不匹配,您也可能會遇到此問題。 假設正確的 kernel 模塊可用,您可以通過運行來確認(假設您的發行版使用 DKMS):

dkms status

對我來說,修復只是涉及重新生成我的 kernel 圖像。 在 Red Hat 發行版及其衍生版本(Fedora、CentOS、Alma、Rocky、Oracle 等)上,您可以運行:

(rpm -q --qf="%{VERSION}-%{RELEASE}.%{ARCH}\n" --whatprovides kernel ; uname -r) | \
sort | uniq | while read KERNEL ; do 
  dracut -f "/boot/initramfs-${KERNEL}.img" "${KERNEL}" || exit 1
done

這將為每個已安裝的 kernel 重新生成映像。對於 Debian 發行版及其衍生版本(包括 Ubuntu)上的等效邏輯,您可以運行:

for kernel in /boot/config-*; do 
  [ -f "$kernel" ] || continue
  KERNEL=${kernel#*-}
  mkinitramfs -o "/boot/initrd.img-${KERNEL}.img" "${KERNEL}" || exit 1
done

然后重啟。 您也可以臨時解決問題,方法是使用 rmmod 或 modprobe 手動刪除(卸載)NVIDIA 模塊,然后重新加載它們。 當你這樣做時,modprobe 將使用獨立的 kernel 模塊,它應該與你安裝的驅動程序版本相匹配。

PS 我在從 470.x 驅動程序升級到 510.x 驅動程序時遇到了這個問題,該驅動程序最近成為推薦的穩定安裝版本。 我在使用 460.x 和 470.x 驅動程序版本時從未遇到過這個問題。

PPS 編輯 - 回顧命令:

# Red Hat Distros
dracut --regenerate-all --force

# Debian Distros
update-initramfs -u -k all

比我最初發布的需要更少的打字,並且應該適用於大多數人。

我找到了解決方案,現在 Kubuntu 按預期正常啟動。

首先,我清除了所有驅動程序和庫

$ sudo apt purge nvidia-* && sudo apt purge libnvidia-*

然后我檢查了是否沒有安裝任何 nvidia 驅動程序。 以下沒有返回任何東西,因為它應該

$ dpkg -l nvidia-*|grep ^ii

然后我從https://www.nvidia.com/Download/driverResults.aspx/177153/en-us為我的Geforce GTX 560 Ti下載了正確版本的驅動程序。 你應該 select 你的驅動程序來自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 登錄屏幕,登錄后我的雙屏幕分辨率都正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM