在Debian的linux-2.6.21内核下装nvidia驱动

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的反应,看看哪边会妥协,那样安装就不会这么麻烦了。下边是几个相关的网页,如果有什么问题,请告诉我




使用Debian已经有一段时间了,但是所使用的一直是开源的nv或是vesa驱动。也曾经想着试一下官方的nvidia驱动,但是在Debian的源中却没有简单的驱动可以安装来用,而又不是太懂得用Debian的方式来编译安装。而使用Nvidia官方下载的驱动来安装又一直没有成功过。所以也就一直就这样用着。但是最近一段时间上了一下Debian的Wiki,搜索了一下Nvidia的驱动安装方法,照着做了一下,哈哈,还真的成功。在这里记录一下自己的安装过程。


我的系统情况如下:Debian Etch Testing,GFore MX 400,Xorg,内核是自己编译的2.6.20。另外要提醒大家就是Nvidia的驱动已不再支持某些为卡,首先我们要确定我们的显卡是还被支持,如果不是这样,我们就要安装Leacy的驱动。

Nvidia的驱动安装概括说来是以下四个步骤:

1 安装内核模块

2 安装用户空间库

3 配置Xorg

4 配置在系统启动时装入驱动模块

1 安装内核模块

# apt-get install module-assistant gcc nvidia-kernel-common

然后运行下面的命令:

# m-a update

# m-a prepare

# m-a auto-install nvidia

最后一步是驱动安装最重要的一步,也是最有可能出现错误的一步。而这一步可以分为三个步骤,这有助于我们进行调试:get build install

而我自己在安装时就是在这里出现了问题,但是却可以正确的生成deb安装包,所以我只是自己手动的安装了这个deb包。

2 安装用户空间库

# apt-get install nvidia-glx

3 配置Xorg

我们可以手动编辑Xorg的配置文件,在”Module”部分,我们要确认有下一行:

Load "glx"

同时注释掉dri部分。

而在Device部分,我们要将我们的驱动改为nvidia:

Driver "nvidia"

4 配置在系统启动时装入驱动模块

# grep -q ^nvidia /etc/modules || echo nvidia >> /etc/modules

经过这样的安装配置以后我们就已经安装上了Nvidia驱动模块,我们可以用下面的命令来试着装入驱动模块:

# modprobe nvidia

如果可以正常的装入就说明我们的驱动安装成功了。

如果我们不想重新启动系统,我们可以用下面的命令来重新启动X:

# invoke-rc.d gdm restart

这样在我们启动X时就可以看到Nvidia的Logo了,而这也就说明我们的nvidia驱动安装成功了