Label Cloud

Tuesday, December 9, 2008

在Debian下安装nVidia的商业驱动

  对于多数情况,debian是可以直接安装nvidia官方提供的驱动的。但是在最近的testing和sid中,由于使用2.6.20或2.6.21内核,导致驱动的模块不能编译,需要手动进行一些操作。需要提醒的是,只要内核升级到2.6.22,这个问题就不再会出现。

  本文大量参考了: http://blog.joypig.org/archives/156 。为2.6.20或2.6.21内核的debian安装nvidia驱动。
对于这两个版本的内核,在安装nvidia时,编译内核模块失败,在/var/log/nvidia-installer.log中提示:
FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol 'paravirt_ops'

  在不重新编译内核的情况下,解决这个问题的办法是修改linux-kbuild的源代码(以2.6.21为例),并修改nvidia驱动的部分代码(你 只需要一行一行复制命令就可以了,如果还是嫌麻烦,等2.6.22吧。):
  修改linux-kbuild
# 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的源码。

$ cd linux-kbuild-2.6-2.6.21
$ sed -i '1177,+1 s/^/\/\//' scripts/mod/modpost.c
$ dpkg-buildpackage -uc -us -rfakeroot
$ cd ..

  现在换成root用户,安装这个包

# dpkg -i *.deb

  修改nvidia驱动

  本部分以nvidia的.run文件为例。我的显卡是 GeForce4 MX 440,只能用96xx的显卡,以9631为例,後续版本也支持这样 做。假设当前目录下有NVIDIA-Linux-x86-1.0-9631-pkg1.run。

# head -n 2 NVIDIA-Linux-x86-1.0-9631-pkg1.run

  看一下输出的第二行,把skip=後面那个数记录下来,替换下面的943。

# tail -n +943 NVIDIA-Linux-x86-1.0-9631-pkg1.run | gzip -cd | tar tvf - 2>/dev/null

编辑usr/src/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)

  使用刚才解压出来的./nvidia-installer就可以安装了。

本文来源于http://www.linux-wiki.cn

No comments: