02:00.0 3D controller: NVIDIA Corporation Device 1c94 (rev a1)
背景介绍:我使用的是联想小新Pro13 Intel版(2020款)笔记本电脑,搭载Ubuntu 18.04操作系统,内核版本为5.4.0-74-generic,配备了NVIDIA GeForce MX350显卡。在我在Ubuntu系统下运行仿真时,经常遇到卡顿的情况,让我开始怀疑GeForce MX350的性能。通过百度搜索,我了解到问题出在显卡驱动上。原来Ubuntu默认使用的是开源显卡驱动nouveau,而不是NVIDIA官方驱动。想想也是,如果不使用NVIDIA自家的驱动,怎么能充分发挥显卡的性能呢?因此,我的目标很明确:将nouveau驱动切换为NVIDIA驱动。那么,如何进行切换呢?这个过程分为两步:
前期准备:
- 首先,确定自己电脑的显卡型号:运行命令”$ lspci | grep -i nvidia”,输出结果如下:
其中,1c94是PCI号,根据PCI号在PCI devices查询显卡型号。从查询结果可以看出,我的显卡型号是GeForce MX350。
- 明确需要安装的显卡驱动版本:根据显卡型号,从NVIDIA官网查看相应的显卡驱动版本。例如,选择MX350显卡驱动:
$ service network-manager start # 启动网络服务
$ nmcli dev wifi # 查看可以使用的无线网
$ nmcli dev wifi connect 'your_wifi_id' password 'your_password' # 连接无线网
$ iwconfig # 看是否连接上对应wifi_id的网络
$ ping www.baidu.com # 如果能ping通, 说明已经连上网络
根据查询结果,我需要安装的显卡驱动版本是460.84。
填写显卡驱动类型信息:
查看显卡驱动版本号。可以运行命令来查看:
可以看出,我需要安装的显卡驱动版本是460.84。
注意事项:
- 最好将BIOS安全启动关闭,否则可能会出现循环登录情况。
- 下面的步骤是在Ubuntu恢复模式下完成的,可能没有网络连接,所以需要在终端启动网络管理器并连接无线网:
好了,现在我们可以开始下载并安装驱动了。
第一步:安装NVIDIA驱动
安装对应版本的显卡驱动。可以运行命令”$ apt search nvidia-driver”来查看nvidia驱动列表,输出如下:
可以看到版本号为460的驱动名称为nvidia-driver-460。由于我已经安装了这个驱动,所以这里显示为[已安装]。执行下面的命令完成驱动安装:
$ apt-get update
$ apt install nvidia-driver-460
安装完成后,可以利用nvidia系统管理接口(NVIDIA System Management Interface,nvidia-smi)来查看显卡设备信息,运行命令”$ nvidia-smi”,输出如下:
1. $ apt-get update
2. $ apt install nvidia-driver-xxx # 下载并安装xxx版本驱动
3. $ vim /etc/modprobe.d/blacklist.conf # 禁用nouveau
添加 blacklist nouveau 和 options nouveau modeset=0 两行
4. $ update-initramfs -u # 更新内核
5. $ reboot # 重启电脑
此时,nvidia显卡驱动安装完成,接下来需要禁用原来的nouveau驱动。
第二步:禁用nouveau驱动
为了禁止启动nouveau驱动,需要将其加入黑名单。打开文件”$ vim /etc/modprobe.d/blacklist.conf”,在文件末尾加入两行内容:”blacklist nouveau”和”options nouveau modeset=0″。保存文档并退出编辑模式。最后,记得更新一下内核,运行命令”$ update-initramfs -u”。重启电脑,运行命令”$ reboot”。
总结:
将上述所有步骤总结如下:
如果在重启电脑后能正常进入系统,那么恭喜您,驱动切换成功。此时可以运行命令来查看显卡信息。可以看到nvidia显卡下有一行:”configuration: driver=nvidia latency=0″,说明已经成功切换到nvidia显卡。此时再使用”$ nvidia-smi”命令查看显卡运行情况,应该能看到显卡正常运行。
但有时候,在执行以上步骤之后,仍然可能遇到各种奇怪的问题。下面是我遇到的一些问题及解决办法:
- PCIe Bus Error: severity=Corrected, type=Physical Layer,重启电脑后不断出现这个错误。
1. $ vim /etc/default/grub # 打开编辑grub
2. 在GRUB_CMDLINE_LINUX_DEFAULT末尾添加pci=noaer,就像这样:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=noaer"
3. $ update-grub
4. $ reboot
解决办法:
- Started GNOME Display Manager. Dispatcher Service… 或者 Started GNOME Display Manager. systemed-networkd.ce…或者 fsckd-cancel-msg:..system changes
每次重启电脑,都会卡在这三种情况中的某一种里。为了解决这三个问题,我尝试了各种办法,包括多次安装和卸载驱动,花费了很长时间都没有解决。我还尝试使用”$ apt –fix-broken install”命令修复,但仍然无效。
在准备放弃修复,重装系统的时候,我看到了一个答案。其中提到了使用”apt dist-upgrade”命令。
“Solved! In recovery mode after enabling networking I selected dpkg – Repair broken packages, and then in root shell I used apt update and then apt dist-upgrade and this seems to have solved the problem. I’m not sure why it worked, but it worked.”
我查看了一下”apt update”和”apt dist-upgrade”两者的区别:
“当执行apt-get dist-upgrade时,除了拥有upgrade的全部功能外,dist-upgrade会比upgrade更智能地处理需要更新的软件包的依赖关系。”
听起来很高级,于是我尝试在恢复模式下运行了一下(仍然在恢复模式下),没想到,重启之后竟然可以进入Ubuntu图形桌面了,而且之前的问题也都消失了。”apt dist-upgrade”简直是魔法般的存在,让我免于重装系统。
参考链接: