如何从 ubuntu 16.04 内核客户端和内核模块中删除 nvidia 驱动程序,或者让内核客户端和模块使用相同的 nvidia 驱动程序?

如何从 ubuntu 16.04 内核客户端和内核模块中删除 nvidia 驱动程序,或者让内核客户端和模块使用相同的 nvidia 驱动程序?

查看 /var/log/syslog 和 /var/log/kern.log 后,我发现以下内核问题:

NVRM: API mistmatch: the client has version 375.26, but
NVRM: this kernel module has the version 375.39. Please 
NVRM: make sure that kernel module and all NVIDIA driver
NVRM: components have the same version.

我发现Nvidia 驱动程序已更新 - 304.88 和 319.32 的混合版本描述了同样的问题。为了解决我的问题,我运行了命令:

dpkg -l | grep nvidia
sudo apt-get autoremove nvidia375
sudo apt-get --purge remove nvidia*
dpkg -l | grep nvidia

最后一个命令的输出确认没有安装 nvidia 软件包。此后,我运行:

sudo update-grub
sudo update-initramfs -u
sudo reboot

但是,我仍然遇到相同的内核问题。启动时,我卡在低图形模式设置中,内核和 /var/log/syslog 以及 /var/log/kern.log 仍然抱怨客户端有 Nvidia 驱动程序 375.26,内核模块有 Nvidia 驱动程序 375.39。

我当前的内核是 4.4.0-64-generic。

更新1:为了查看内核读入的 nvidia 模块,我运行了此命令。

$ lsmod | grep nvidia
module            size    used by
nvidia_drm        53248   0
nvidia_modeset   790528   1 nvidia_drm
nvidia         12144640   1 nvidia_modeset
drm_helper       155648   2 i915_bpo,nvidia_drm
drm              364544   4 i915_bpo,drm_helper,nvidia_drm

还发现modinfo module_name这些模块位于文件夹中/lib/modules/4.4.0-64-generic/updates/dkms/,它们的文件名分别为nvidia-drm.konvidia-modeset.konvidia.ko,其版本为 375.39。

第二个问题:为什么在我清除了所有 nvidia 软件包后这些模块仍然存在?我应该删除它们吗?如果是,该怎么做?

答案1

通过执行以下步骤我能够解决我的问题:

  1. 首先重新安装 nvidia-418 存储库图形驱动程序。
    安装 nvidia-418

在安装过程中,我注意到 nvidia-418.26 驱动程序正在安装。

  1. 我将整个 /lib/modules/4.18.0-17-generic/updates/dkms 文件夹移至我的主目录备份文件夹。这是为了确保所有旧的 .ko 文件都已被删除。
    sudo mv /lib/modules/4.18.0-17-generic/updates/dkms/nvidia* /home//backup

  2. 我使用以下方法重新生成了已安装驱动程序的 .ko 文件
    sudo dpkg-重新配置 nvidia-418

    它创建了一个包含相关 nvidia 内核模块的新 dkms 文件夹。我还使用以下命令检查了它们的版本:

    sudo modinfo /lib/modules/4.18.0-17-generic/updates/dkms/nvidia.ko
    sudo modinfo /lib/modules/4.18.0-17-generic/updates/dkms/nvidia_drm.ko
    sudo modinfo /lib/modules/4.18.0-17-generic/updates/dkms/nvidia_modeset.ko
    sudo modinfo /lib/modules/4.18.0-17-generic/updates/dkms/nvidia_uvm.ko

    它们的输出显示它们适用于 418.26 版本。太好了,这证实了内核客户端和内核模块指的是同一个 NVidia 驱动程序版本。

  3. (可选,但建议这样做,以确保 apt-get 正常工作)卸载并重新安装驱动程序 sudo apt-get 删除”英伟达 sudo apt-get 安装 nvidia-driver-418

  4. 我重启了系统
    sudo 重启

改编自https://devtalk.nvidia.com/default/topic/525877/linux/api-mismatch-means-ubuntu-can-39-t-boot-i-can-39-t-fix-i-please-help-/1

相关内容