nvidia驱动一直都是以non-free的类别存在在debian的源里边,而且debian官方提供的二进制包总是很滞后,经常需要自己编译驱动。之前说过一次关于nvidia驱动编译的问题,貌似还是被搜索最多的。那是在两年前写的,现在又出现了新的情况,安装方法又要更新了。其实如果看官方的README.Debian,安装方法并没有变化,但是,你实际操作就是不能成功编译,急啊。通过万能的google,还是找到一些蛛丝马迹,貌似解决了我遇到的问题,相信还是有不少人遇到的。
话说在debian安装nvidia驱动有两种方法,一是从nvidia的网站上直接下载驱动的安装脚本文件,运行脚本,编译安装一次到位;二是可以从debian的源里安装nvidia-kernel-source自己编译,生成deb包再安装。我想一般用惯了debian的人,都有点强迫症,都喜欢用deb包进行安装。不管别人怎么样,反正我是这样的。
新的问题在于,在debian的linux-2.6.21-1-k7的内核下编译nvidia驱动,会出现如下报错:
FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘paravirt_ops’
这是由于从2.6.20以后,debian的linux内核就启用了CONFIG_PARAVIRT选项来编译内核。现在由于加入这一选项,使得不只是nvidia的驱动不能正常编译,还有别的non-free内核模块也不能正常编译,所以这被视为bug #419943提交了。下面就说一下安装步骤吧,以我的古董tnt2 pro的显卡为例。
首先,修改linux-kbuild-2.6.21:
# apt-get build-dep linux-kbuild-2.6.21
$ mkdir linux-kbuild-2.6.21-build
$ cd linux-kbuild-2.6.21-build
$ apt-get source linux-kbuild-2.6.21
这时,linux-kbuild-2.6.21的相关文件会出现在linux-kbuild-2.6.21-build这个目录,并且有一个解压缩之后的linux-kbuild-2.6-2.6.21目录,修改linux-kbuild-2.6-2.6.21/scripts/mod/modpost.c,在大约1177行前后,找到fatal函数,注释掉这两行fatal函数,保存文件。
生成修改过的linux-kbuild,并且安装
$ dpkg-buildpackage -uc -us -rfakeroot
# apt-get install linux-kbuild-2.6.21
第二,就是安装相应的包:
# apt-get install nvidia-kernel-common nvidia-kernel-legacy-71xx-source linux-headers-2.6.21-1-k7
安装这两个包,应该还会自动安装和debhelper相关的包,如果在之后编译发现还缺少什么包,自行补齐就是了。nvidia-kernel-legacy-71xx-source安装之后,会在/usr/src里出现一个nvidia-kernel-legacy-71xx-source.tar.gz,解压缩到随便什么地方。进入解出来的modules/nvidia-kernel-legacy-71xx/nv目录,修改Makefile.kbuild,在
EXTRA_CFLAGS += -Wall -Wimplicit -Wreturn-type… 后边加入
PARAVIRT_OPS := $(shell grep “D paravirt_ops” /boot/System.map-$(shell uname -r) | colrm 9)
EXTRA_LDFLAGS := -defsym paravirt_ops=0x$(PARAVIRT_OPS)
之后,安装README.Debian中的方法生成deb包。
进入modules/nvidia-kernel-legacy-71xx
# KSRC=/usr/src/linux-headers-2.6.21-1-k7 KVERS=2.6.21-1-k7 debian/rules binary_modules
# dpkg -i nvidia-kernel-legacy-71xx-2.6.21-1-k7_i386.deb
最后,安装nvidia-glx
# apt-get install nvidia-glx-legacy-71xx
修改/etc/X11/xorg.conf,或dpkg-reconfigure xserver-xorg,改用nvidia驱动既可。
如果觉得上边的方法比较不解,可以等一等debian和nvidia的反应,看看哪边会妥协,那样安装就不会这么麻烦了。下边是几个相关的网页,如果有什么问题,请告诉我。
http://grizach.servebeer.com/nvpatch/
http://www.debianhelp.org/node/6880
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=419943