折腾linux的人恐怕早晚都会遇到驱动的问题。今天升级完重启机器的时候,发现两个显示器只有一个能用,而且分辨率极低,猜测是因为nvidia的显示驱动挂掉了,于是linux使用了默认vesa驱动的缘故。
这里的nvidia驱动特指商业驱动,以下均为商业驱动版本。
下面开始排查。
首先通过以下命令搞清楚显卡的型号:
[~]$ lspci |grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 620 OEM] (rev a1)
NVIDIA GeForce GT620。
第二步是准备重装驱动。第一步是删除掉已经安装好的所有驱动。我的办法是删除掉所有包名字中带nvidia以及nouveau的,以及xf86-video-nv。
接下来在这里找到并安装新驱动:
https://en.opensuse.org/SDB:NVIDIA_drivers
由于我是GeForce 6系列显卡,点第二个进去以后自动安装。
第三步是重启以后进一步调试,运行以下命令:
[~]$ lsmod |grep nvidia
[~]$ cat /var/log/Xorg.0.log
发现既没有载入nvidia内核模块,xorg也没能成功加载驱动,需要进一步调试。
这里需要解说一下模块这个定义,nvidia驱动包括两部分(两个rpm包),一部分是nvidia内核模块(nvidia-gfxG02-kmp-desktop包),另外一部分是xorg的驱动(x11-video-nvidiaG02 RPM包)。
xorg的驱动部分比较简单,它的文件包括了/usr/lib64/xorg/modules/updates/这个目录下的几个.so文件。(例如nvidia_drv.so和libglx.so)
下面说明内核模块驱动部分。openSUSE 13.1下,nvidia 驱动的RPM包会把内核模块源代码解压到如下位置:
/usr/src/kernel-modules/nvidia-304.121-desktop
之后在该目录下运行make install,把编译好的nvidia.ko文件放置到/lib/modules/3.11.10-21-desktop/kernel/drivers/video这个目录下面,然后运行下面两个命令:
depmod -ae
modprobe nvidia
这样我们在lsmod里面就能看到nvidia模块了,如果X的驱动安装也正确的话,显示应该没有问题(能正确驱动双显示器,分辨率正常)。