前面写过一篇修复Ubuntu14.04启动时黑屏卡死的文章。自以为知道如何解决问题,于是尝试了用nvidia-settings切换到核心显卡省电。在又要用CUDA的时候切换回来,却发现又黑屏了。而且前面的方法无法解决。经过7个小时的探索,有了新解决方案,记录如下。
(注意:本方法仅适用于双显卡笔记本。)
1. 软件版本
我使用的软件版本如下:
系统 | 内核版本 | Nvidia 驱动版本 | CUDA版本 |
---|---|---|---|
Ubuntu 14.04 | 3.13.0-61 | 352.63 | 7.5 |
2. 故障现象及原因
故障现象:
- 直接启动系统时,直接黑屏,并出现了一个Null Pointer的Kernel Bug,系统卡死在进入登陆界面前。
- 用Recovery Mode启动系统时,也会看到显卡驱动加载出现Bug,然后有”Vga Codecs Changed”的提示,并卡上40秒左右(可以按Ctrl+C跳过),最终可以看见登陆界面。但是一旦登陆仍然会黑屏卡死。
回顾一下:笔记本启动时黑屏卡死一定是显卡驱动问题(Nvidia驱动经常出现这种问题)。对于Kernel Bug,除了换硬件,一般只能换内核版本或者驱动来尝试了。
3. 解决方案
本人尝试了更换内核版本(3.13.0-85, 3.13.0-19…)和驱动版本(nvidia-340),并且按照上次的方法反复重装Nvidia驱动,均无法解决问题。因为本人的目的是为了用CUDA,无奈之下想到了屏蔽Nvidia驱动。
具体方法:
1. 用Recovery Mode启动系统
2. 在登陆界面按下 Ctrl + Alt + F1进入命令行登陆
3. 禁用Nvidia驱动。执行如下命令:
sudo vi /etc/modprobe.d/blacklist.conf
按下i,并在尾部添加如下内容
blacklist nvidia
按下Esc,在控制栏输入:wq,按下回车。保存修改。之后重启电脑,就可以进入系统了。
进入系统后输入lsmod命令,可以看到如下内容:
...
drm 303102 5 i915,drm_kms_helper,nvidia
alx 32452 0
libahci 32716 1 ahci
mdio 13807 1 alx
video 19476 1 i915
video一栏只有核心显卡驱动i915,而独显驱动nvidia并没有被加载。
经过本人测试,CUDA程序可以正常运行。但是显卡失去了自动变频的功能,耗电量和发热量都有所增加。于是本人尝试再尝试取消禁用nvidia显卡禁用。按上面的方法将blacklist.conf中的blacklist nvidia去掉。同时手动运行命令加载驱动:
sudo modprobe nvidia-352
用nvidia-settings查看可以发现显卡又可以自动变频了,并且温度和发热量恢复正常。重启系统后也正常使用。
4.总结
Nvidia显卡驱动与Ubuntu系统的配合并不是很稳定,建议一旦安装好就不要更新内核;双显卡机器不要切换显卡,否则就容易引发各种问题。
5.更新
最近发现,升级内核到3.16.0-70可以解决N卡驱动导致Null Pointer Kernel Bug的问题。
打开终端,运行
sudo apt-get install 3.16.0-70-generic
注意去掉 blacklist.conf 文件中 blacklist nvidia这一行。重启电脑即可正常使用Nvidia驱动。