电脑是联想Y500,系统是opensuse12.3,咱这里说的装显卡驱动当然指的是装最新的闭源独立显卡驱动了。
Y500的独显是NVIDIA的GT750M,这个显卡的最新驱动可以到NVIDIA的官网上去下载,我这个显卡目前可以搜到的最新的驱动是NVIDIA-Linux-x86_64-325.08。总之呢第一步肯定是先把它下载下来。如图所示:
PS:Y500这台机器很奇葩的一点就是它其实是有两个显卡的,一个核显一个独显,但是据说联想在BIOS里面把它给屏蔽了,有人刷BIOS刷出过那个enable核显的选项,可以把核显解放出来。但是据说linux对双显卡的支持不是很好,我也就不去费那个劲解放核显了。
下面很长的一段是按时间顺序来叙述我遇到的问题的,大家不想听我啰嗦的,可以直接跳过,看我最后面的安装过程总结。
在装显卡驱动之前,我本来是设想,要不搞个备份,这样万一那个闭源驱动没安好,也可以恢复到开源驱动来启动X呀。结果我的想法在群里受到了炮轰,人家alpha080就说,你怎么就不怕你的电脑爆炸呀,你连你电脑爆炸都不怕,还怕什么驱动安不好。虽然我至今还是没想明白为什么不要备份,但是我顿时就莫名其妙地感觉受到一股鼓舞,然后就变得大无畏起来。就不寻思搞什么备份了,装显卡驱动是不能启动X服务的,所以只能以3这个运行级别运行。我将/etc/inittab里面的运行级别5改为3,然后就重启准备安装驱动。
但是不知道为什么我改了/etc/inittab里面的数字并没有起到什么效果,重启后依旧是5级别启动的。
所以我只能用另一个方法了,在启动选项那里按e,然后就进到那个grub2efi的启动编辑项里面了,在加载linux内核的那行末尾空格后加上个3,再按F10引导就行了。
以root用户( 一定要以root用户来执行驱动的安装 )登录到tty1里面,进入到驱动的存放目录,输入:
sh NVIDIA-Linux-x86_64-325.08.run
运行之后,出现了一个错误提示,大意是说我没有禁用nouveau(opensuse里面的开源显卡驱动),点OK后,驱动程序又说它可以写一个文件到我的系统里面去禁用那个nouveau,它说它这一套方法对于绝大多数linux发行版都是有用的,而且我若想取消对nouveau的禁用只要把它写的那个/etc/modprobe.d/nvidia-installer-disable-nouveau.conf删掉就行了。这个nvidia驱动程序这么可爱,这么贴心呀,后来才知道它的这一套纯属扯淡。
它写了那么个文件之后,自以为就真的把nouveau给禁用了,重启后再运行它就没有要你禁用nouveau的提示了,然后它就开始执行自己的安装过程了,之后我就遇到了我的第二个错误提示,没有在/usr/src/linux/include/linux/或者/usr/src/linux/include/generated/uapi/linux/下面找到version.h。问题的解决方法是女王教我的,先用find命令在/usr/src/下找到那个version.h,然后再用ln -s建立一个软链接。
我运行
find /usr/src/ -name version.h
找到一大堆version.h,不知道所有的这些version.h是不是相同的,反正我是从中选了一个做的软链接,命令如下:
ln -s /usr/src/linux-3.7.10-1.16-obj/x86_64/desktop/include/generated/uapi/linux/version.h /usr/src/linux/include/linux/version.h
女王帮完之后,语重心长地说,只能帮你到这里了,下面就要靠你自己了。说完就突然地消失了,就如她突然地出现。唉,靠自己。。。这个。。。就比如说吧,我小的时候,想要长生不老,得道成仙,可结果呢?!我到现在基本已经放弃这个梦想了。所以我就得出一个结论,自己是靠不住的。果然事实又一次证明,我自己果然是靠不住的。
马上我就迎来了第三个错误,具体的错误信息可以查看/var/log/nvidia-installer.log。主要的错误信息如下:
看来这一个错误的关键点就在于: fatal error:generated/autoconf.h:No such file or directory
看到这里我是很崩溃的,就在我毫无头绪,濒临放弃时,又一位大神出现了,tuzki就像一个灯塔一般照亮了我通往安装成功的道路。他说,“驱动需要用你当前用的内核对应的代码进行编译。代码必须是生成当前使用的内核的版本。他是通过查 /lib/modules/<当前内核>/build 来找到内核对应的代码的。这个错误应该是当前内核和代码不一致,或你的代码 distclean 过?”我表示对于他后面的话,我真的没太听懂。而他似乎也发现了他在对牛弹琴,所以就直接叫我运行如下命令:
cp /boot/config-3.7.10-1.16-desktop /usr/src/linux/.config
cd /usr/src/linux/
make oldconfig && make prepare
我运行了如上命令后,就在/usr/src/linux的目录下面出现了generated,里面也有autoconf.h。
嗯,这下好了,可以继续迈向下一个错误提示了。
果然,重启后再运行,出现了新的错误提示,如下:
关键性的一句应该就是 /bin/sh: scripts/genksyms: No such file or directory
tukzki大神继续耐心地指导说还是在那个目录下(也就是说在/usr/src/linux/这个目录),运行
make scirpts
所以说嘛,出手就知道到底有没有,高手就是高手,我运行完后果然生成了那个genksyms。嗯,到此我多灾多难的驱动安装算是划上一个尽头了吧。因为接下来出现的那个错误提示其实就第一个错误提示。
重启后再运行那个run文件,出现如下错误提示:
大意是说像rivafb, nvidiafb或者nouveau之类的没有被禁用导致nvidia驱动模块没有被加载,看吧,这个驱动程序自己打自己脸了吧,之前还信誓旦旦地说它已经帮我禁用了nouveau,所以连报错都不报地继续执行自己的安装进程。现在看来它那套禁用方法根本就没用嘛,还是我自己亲自动手吧,方法如下:
打开YaST->/etc/sysconfig编辑器,System->Kernel下面有个键值NO_KMS_IN_INITRD,把这个值设为yes,然后编辑/etc/modprobe.d/50-blacklist.conf,在这个文件的最后插入一行blacklist nouveau,保存并退出。
然后再重启运行那个NVIDIA-Linux-x86_64-325.08.run的时候,一切就都完美了,最后很顺利地出现了:
最后依次运行,
modprobe nvidia
rcxdm start
这样整个驱动安装就彻底完结了。在看到那个NVIDIA的画面一闪而过时,那个把我感动的,立马就欢呼了起来。
感谢我所在宇宙中的alpha080,感谢我所在宇宙中的女王,感谢我所在宇宙中的tuzki,感谢NVIDIA,感谢openSUSE,没有你们就没有显卡驱动程序的成功安装;不感谢平行宇宙中的alpha080,女王,tuzki。
以上是按时间顺序来叙述我的整个安装过程的,大家看完了这么长的一段,辛苦了,其实除了那段真诚的感谢列表外,其余的基本上是废话,所以不想听我罗嗦的人还是直接看下面的总结吧。
** 安装步骤总结 ** :
第一步:打开YaST->/etc/sysconfig编辑器,System->Kernel下面有个键值NO_KMS_IN_INITRD,把这个值设为yes,然后运行
vi /etc/modprobe.d/50-blacklist.conf
在最后插入一行blacklist nouveau,保存并退出。
第二步:
cp /boot/config-3.7.10-1.16-desktop /usr/src/linux/.config
(PS:3.7.10-1.16是我的内核版本号,你如果不是的话,那就改成你用的内核版本号),然后依次运行:
cd /usr/src/linux/
make oldconfig
make prepare
make scripts
这三个命令。
第三步,重启,在启动选项那个界面按e,进到那个grub2efi的启动编辑项里面了,在加载linux内核的那行末尾空格后加上个3(ps:我用的是grub2efi,所以是在linuxefi后面),再按F10引导以便以运行级别3来启动。
第四步,以root用户登录到tty1,进入到驱动的存放目录,输入:sh NVIDIA-Linux-x86_64-325.08.run来运行驱动的安装程序。安装成功后,依次运行modprobe nvidia和rcxdm start
一切顺利的话,就安装成功了,这里面省掉了一个做version.h的软链接的步骤,这是因为执行第二步后,自动在/usr/src/linux/include/generated/uapi/linux/目录下生成了version.h。所以我猜测应该不用做软链接了。