如何在更新内核后更新我的NVIDIA模块?

每次有内核更新时,nvidia图形驱动程序会停止工作,因为没有有效的内核模块。
在Ubuntu中,重新编译新内核的nvidia模块有什么方法?
难道这不应该自动完成吗?我正在遇到一个bug吗?
6个回答

如果您已将NVIDIA驱动程序安装为Ubuntu软件包,则在每次内核升级后应会自动更新。
您可以使用“附加驱动程序”工具或安装“nvidia-current”软件包来安装打包的驱动程序。
如果您直接从NVIDIA官网安装了驱动程序,那么在安装此软件包之前最好先将其删除 - 我不确定它能否很好地检测到冲突。
如果您是从Ubuntu软件源中安装的软件包,您可以尝试使用“dpkg-reconfigure”重新配置它,但我怀疑构建NVIDIA模块是由安装新内核触发的,而我不确定如何以其他方式触发此过程。传统的卸载和重新安装可能会起作用(sudo apt-get remove nvidia-current; sudo apt-get install nvidia-current)。

我通过Ubuntu软件包安装了NVIDIA驱动程序。但是更新内核并没有触发重新编译我的NVIDIA模块。无论如何,还是谢谢你的建议。 - fazineroso

当您安装了NVIDIA二进制驱动程序时,可能还没有安装dkms软件包。Dkms确保每次更新内核时,支持它的模块都会重新编译:
sudo apt-get install dkms
之后,您可能需要重新安装NVIDIA二进制驱动程序,并在设置过程中允许使用DKMS,因为它需要在其中注册。

我遇到了同样的问题,刚刚意识到在阅读这个答案之前我没有安装dkms - yaobin
我已经安装了dkms,但是我还需要执行sudo dpkg-reconfigure nvidia-kernel-dkms命令。 - rustyx

对我来说,dpkg-reconfigure会使用最新的内核重新构建Nvidia驱动程序。这需要重新启动才能生效。下面的示例使用较旧的nvidia-304-updates版本。
sudo dpkg-reconfigure nvidia-304-updates

编辑:我设法通过编写一个脚本 zz-dkpg-reconfigure-nvidia 来自动化这个过程,该脚本在内核更新后运行。
#!/bin/bash
#
# Reconfigure nvidia driver

DRIVER=nvidia-304-updates

dpkg-reconfigure $DRIVER > /var/log/dpkg-reconfigure-nvidia.log 2>&1

exit 0

我通过运行上述脚本进行了安装。
sudo install zz-dkpg-reconfigure-nvidia /etc/kernel/postinst.d

适用于我的Ubuntu 14.04内核3.13.0-29至3.13.0-36更新。

如果你只想重新构建内核模块,那么你可能只需要执行以下命令。
sudo apt-get install --reinstall nvidia-current

如果你已经安装了nvidia-current,或者安装了nvidia-331,那么这个应该可以解决问题。
sudo apt-get install --reinstall nvidia-331

不需要添加仓库或安装新软件 :-)

请注意,不建议安装内核升级或来自官方不支持的软件源的驱动程序!如果您知道自己在做什么,请自行承担风险并按照以下说明操作!
如果您安装了超过当前官方Ubuntu软件源的内核(例如3.4或3.5内核),简单重新安装nvidia驱动可能无法成功。
到目前为止,我找到的唯一使nvidia驱动再次正常工作的方法是将以下ppa添加到您的软件源中。在终端中输入以下命令:
sudo add-apt-repository ppa:xorg-edgers/ppa
之后,执行sudo apt-get update和sudo apt-get install nvidia-current。
这样应该就可以解决问题了。如果还不行,请运行额外的sudo apt-get upgrade命令。

安装新内核时,使用“Ubuntu Mainline Kernel Installer”不会自动重建nvidia专有驱动程序的内核模块。
首先确保您已经安装了适用于您的nvidia驱动程序的dkms软件包。软件包名称将为nvidia-dkms-{DRIVER VERSION}(例如:对于版本530,它将是nvidia-dkms-530)。
在从主线安装程序安装新内核后,运行以下命令以重新构建nvidia内核模块。 sudo dpkg-reconfigure nvidia-dkms-{DRIVER VERSION} 现在您应该能够使用新内核启动计算机。