2007年9月28日金曜日

Nvidiaの最新の純正ドライバを導入したい

■はじめに

Nvidiaの純正のドライバを導入したからといって、 Synaptic で入れた nvidia-glx や envy で導入したドライバと比べて、 劇的に速くなるとか、安定するとかいうわけではありません。
すでにほかのさまざまな方法で導入に成功しておられる方は、 あえて手を出す必要はないものだと思います。

グラフィックドライバの導入を手動でやってみたいとか、 たとえコケたりハマッたりする可能性があっても、 新しいバージョンでないと落ち着かないとか、 Nvidia製の最新のグラフィックス・カードを導入して、 どうにもこうにも正常に動作しないとか、 そういう人たち向けです。

コマンド操作が中心になります。
ここでは、エディタとして「vi」を用いています。
設定ファイルの編集時は、使い慣れたエディタで適宜読み替えてください。
Ubuntu、Linux環境を始めて間もない方には、ハードルが高くてリスクも伴うかもしれませんが、 慣れてきて興味が出てきたら、チャレンジしてみてください。

############### 下準備 ###############
必要なパッケージをあらかじめ導入しておく。(コマンドライン端末を起動して入力)

$ sudo aptitude install build-essential linux-source linux-headers-`uname -r` xserver-xorg-dev

############### ドライバのダウンロード ###################
NVIDIA HP から、ドライバをダウンロードする。
http://www.nvidia.com/page/home.html

上段メニュー [DOWNLOAD DRIVERS]から
Option 1 : [Pruduct Type] : GeForce
[Product Series] : GeForce **** Series (お手持ちのカードにあったものを選択)
[Operating System] : Linux 32-bit (x64 の人は Linux 64-bit )
[Language] : English (US)

[Seach] ボタンをクリック。ここでは 32-bit を選択。

(古いカードの人は、ページ下方の OTHER DOWNLOADS & SUPPORT より
Support - Legacy Driver Download System を利用してください)

Download - NVIDIA-Linux-x86-100.14.11-pkg1.run を 適当な場所(ここではユーザのホームディレクトリ)にダウンロード。

→ x64 環境の人は NVIDIA-Linux-x86_64-100.14.11-pkg2.run を。

############### ドライバのインストール ###############
[Ctrl] + [Alt] + [F2] を押して、テキストモードに。
ユーザ名とパスワードを入力。
GDM を停止して X を落としてから、インストール。

$ sudo /etc/init.d/gdm stop
$ sudo sh NVIDIA-Linux-x86-100.14.11-pkg1.run

[Accept] [Yes] [OK] と質問と確認に答えていけば、インストールが始まる。

インストール終了後、「 xorg.conf を自動で書き換えるか?」と(英語で)訊かれるので [Yes] 。
最後に [OK] を押す。テキスト画面に戻ります。

############### 補足 ################
NVIDIA ドライバ導入後、直ちに Compiz Fusion などを導入したいときは、
この時点で設定を済ませてしまうと、あとが楽になるでしょう。

$ sudo nvidia-xconfig --add-argb-glx-visuals --composite とか、

/etc/X11/xorg.conf の Section "Device" に、 Load "dbe" 行を追加するとか。

############### xorg.conf の編集 ###############
xorg.conf を自動で設定してくれるとはいうものの、 どうしても自分で確認しないと気持ちが悪い方は、「見直し」しましょう。

$ sudo vim /etc/X11/xorg.conf

《チェックするポイント》
Section "Device"
Identifier "nVidia Corporation NV** [GeForce 6***]"
Driver "nvidia"
EndSection

## Driver が "nvidia" になっているか確認。

Section "Screen"
Identifier "Default Screen"
Device "nVidia Corporation NV** [GeForce 6***]"
Monitor "Generic Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection


《後略》

画面の解像度が正しく記述されているかを確認。
Ubuntu インストール直後、デフォルトのままでは "1024x768" が上限だったので、
該当する箇所すべてに "1280x1024" を追加した( Depth 24 まで)。

############### 設定ファイルの編集 ###############
ふたつのファイルを編集する。
参考HP : http://www.prc.tsukuba.ac.jp/~washo/?p=121

まず、
$ sudo vi /etc/default/linux-restricted-modules-common

DISABLED_MODULES = "" の行を、
DISABLED_MODULES = "nv nvidia_new" に編集。

もひとつ。
$ sudo vi /etc/modprobe.d/lrm-video

エディタで開いた設定ファイルを、すべての行をコメントアウト(行頭に # を挿入して無効化)する。

# Make nvidia/nvidia_legacy and fglrx use /sbin/lrm-video to load
# install fglrx /sbin/lrm-video fglrx $CMDLINE_OPTS
# install nvidia /sbin/lrm-video nvidia $CMDLINE_OPTS
# install nvidia_legacy /sbin/lrm-video nvidia_legacy $CMDLINE_OPTS
# install nvidia_new /sbin/lrm-video nvidia_new $CMDLINE_OPTS

これらの作業をやらないと、再起動しても
nvidia drivers error: Failed to load the NVIDIA kernel module
というエラーが出て、 X が立ち上がらないので注意。

############### 再起動 #################
お疲れ様でした。再起動。
$ sudo /sbin/shutdown -r now

なお、再起動しなくてもXを再起動するだけでもOK!
$ sudo /etc/init.d/gdm restart
どちらでも良いんですけど、あまり再起動したくない人はどうぞ!
############### 以上です #################

Powered by kyo-san & pal-san

2 件のコメント:

匿名 さんのコメント...

はじめまして、

古いカード(Geforce MX-4000)をubuntuのシステムで使っています。今回Ubuntu8.04から8.10へアップグレードをしました。

8.10のリリースノートでは,
「NVIDIAの71系・96系プロプライエタリドライバ(これはUbuntu 8.04 LTSではnvidia-glx-legacyやnvidia-glxとして提供されていました)は、Ubuntu 8.10に含まれるX.Orgと互換性がありません。NVIDIA TNT・TNT2・TNT Ultra・GeForce・GeForce2・GeForce3・GeForce4・Vantaなどのハードウェアを利用している場合、アップグレード時にフリーなnvドライバへの差し換えが行われます。このドライバは3Dアクセラレーションをサポートしていません。 」との事で、当然アップグレード後Compizが使えなくなりました。

そこでNVIDAのサイトから最新版のドライバーを取ってきてインストールを試みたのですが、NVIDIAのカーネルモジュールをビルド出来ないと言うエラーでストップしました。

ちょっと長いですがインストールログは以下のとおりです。

nvidia-installer log file '/var/log/nvidia-installer.log'
creation time: Tue Nov 4 15:29:18 2008
installer version: 1.0.7

option status:
license pre-accepted : false
update : false
force update : false
expert : false
uninstall : false
driver info : false
precompiled interfaces : true
no ncurses color : false
query latest version : false
OpenGL header files : true
no questions : false
silent : false
no recursion : false
no backup : false
kernel module only : false
sanity : false
add this kernel : false
no runlevel check : false
no network : false
no ABI note : false
no RPMs : false
no kernel module : false
force SELinux : default
no X server check : false
no cc version check : false
force tls : (not specified)
X install prefix : (not specified)
X library install path : (not specified)
X module install path : (not specified)
OpenGL install prefix : (not specified)
OpenGL install libdir : (not specified)
utility install prefix : (not specified)
utility install libdir : (not specified)
doc install prefix : (not specified)
kernel name : (not specified)
kernel include path : (not specified)
kernel source path : (not specified)
kernel output path : (not specified)
kernel install path : (not specified)
proc mount point : /proc
ui : (not specified)
tmpdir : /tmp
ftp mirror : ftp://download.nvidia.com
RPM file list : (not specified)

Using: nvidia-installer ncurses user interface
-> License accepted.
-> Installing NVIDIA driver version 96.43.07.
-> No precompiled kernel interface was found to match your kernel; would you li
ke the installer to attempt to download a kernel interface for your kernel f
rom the NVIDIA ftp site (ftp://download.nvidia.com)? (Answer: Yes)
-> No matching precompiled kernel interface was found on the NVIDIA ftp site;
this means that the installer will need to compile a kernel interface for
your kernel.
-> Performing CC sanity check with CC="cc".
-> Performing CC version check with CC="cc".
-> Kernel source path: '/lib/modules/2.6.27-7-generic/build'
-> Kernel output path: '/lib/modules/2.6.27-7-generic/build'
-> Performing rivafb check.
-> Performing nvidiafb check.
-> Performing Xen check.
-> Cleaning kernel module build directory.
executing: 'cd ./usr/src/nv; make clean'...
-> Building kernel module:
executing: 'cd ./usr/src/nv; make module SYSSRC=/lib/modules/2.6.27-7-generi
c/build SYSOUT=/lib/modules/2.6.27-7-generic/build'...
NVIDIA: calling KBUILD...
make CC=cc KBUILD_VERBOSE=1 -C /lib/modules/2.6.27-7-generic/build SUBDIRS=
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv modules
test -e include/linux/autoconf.h -a -e include/config/auto.conf || ( \
echo; \
echo " ERROR: Kernel configuration is invalid."; \
echo " include/linux/autoconf.h or include/config/auto.conf are mis
sing."; \
echo " Run 'make oldconfig && make prepare' on kernel src to fix it
."; \
echo; \
/bin/false)
mkdir -p /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/.tmp_ver
sions ; rm -f /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/.tm
p_versions/*
make -f scripts/Makefile.build obj=/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.0
7-pkg1/usr/src/nv
cc -Wp,-MD,/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/.nv.
o.d -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.3.2/include -D__KERNEL
__ -Iinclude -I/usr/src/linux-headers-2.6.27-7-generic/arch/x86/include -i
nclude include/linux/autocon
f.h -Iubuntu/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-
strict-aliasing -fno-common -Werror-implicit-function-declaration -O2 -m32 -
msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -ma
rch=i586 -mtune=generic -ffreestanding -pipe -Wno-sign-compare -fno-asynchro
nous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Iinclude/asm-x86/
mach-default -fno-stack-protector -fno-omit-frame-pointer -fno-optimize-sibl
ing-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -I/tmp/selfgz1
8773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv -Wall -Wimplicit -Wreturn-typ
e -Wswitch -Wformat -Wchar-subscripts -Wparentheses -Wpointer-arith -Wno-mul
tichar -Werror -MD -Wsign-compare -Wno-cast-qual -Wno-error -D_LOOSE_KERNEL_
NAMES -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"96.43.07\" -UDEBUG
-U_DEBUG -DNDEBUG -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_ST
R(nv)" -D"KBUILD_MODNAME=KBUILD_STR(nvidia)" -c -o /tmp/selfgz18773/NVIDIA-
Linux-x86-96.43.07-pkg1/usr/src/nv/.
tmp_nv.o /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c
In file included from include/linux/bitops.h:17,
from include/linux/kernel.h:15,
from include/linux/sched.h:52,
from include/linux/utsname.h:35,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv-linux.h:19,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
include/asm/bitops.h: In function ‘set_bit’:
include/asm/bitops.h:60: 警告: pointer of type ‘void *’ used in arithm
etic
include/asm/bitops.h: In function ‘clear_bit’:
include/asm/bitops.h:97: 警告: pointer of type ‘void *’ used in arithm
etic
In file included from include/linux/list.h:6,
from include/linux/preempt.h:11,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/timex.h:57,
from include/linux/sched.h:54,
from include/linux/utsname.h:35,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv-linux.h:19,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
include/linux/prefetch.h: In function ‘prefetch_range’:
include/linux/prefetch.h:57: 警告: pointer of type ‘void *’ used in ar
ithmetic
In file included from include/linux/utsname.h:35,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv-linux.h:19,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
include/linux/sched.h: In function ‘object_is_on_stack’:
include/linux/sched.h:1969: 警告: pointer of type ‘void *’ used in ari
thmetic
In file included from include/asm/dma-mapping.h:9,
from include/linux/dma-mapping.h:52,
from include/asm-generic/pci-dma-compat.h:7,
from include/asm/pci.h:94,
from include/linux/pci.h:983,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv-linux.h:85,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
include/linux/scatterlist.h: In function ‘sg_virt’:
include/linux/scatterlist.h:199: 警告: pointer of type ‘void *’ used i
n arithmetic
In file included from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv-linux.h:106:27
: error: asm/semaphore.h: No such file or directory
In file included from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv-linux.h:108,
from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
include/linux/highmem.h: In function ‘zero_user_segments’:
include/linux/highmem.h:134: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:134: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:134: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:134: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:137: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:137: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:137: 警告: pointer of type ‘void *’ used in ar
ithmetic
include/linux/highmem.h:137: 警告: pointer of type ‘void *’ used in ar
ithmetic
In file included from /tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv/nv.c:14:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv-linux.h: In fu
nction ‘nv_execute_on_all_cpus’:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv-linux.h:627: e
rror: too many arguments to function ‘on_each_cpu’
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c: In function
‘__nv_setup_pat_entries’:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:836: 警告:
符合付きと符合無しとの比較です
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c: In function
‘__nv_restore_pat_entries’:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:862: 警告:
符合付きと符合無しとの比較です
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c: In function
‘nv_kern_cpu_callback’:
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:1188: 警告
: 符合付きと符合無しとの比較です
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:1191: error:
too many arguments to function ‘smp_call_function’
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:1195: 警告
: 符合付きと符合無しとの比較です
/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.c:1198: error:
too many arguments to function ‘smp_call_function’
make[3]: *** [/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/src/nv/nv.
o] エラー 1
make[2]: *** [_module_/tmp/selfgz18773/NVIDIA-Linux-x86-96.43.07-pkg1/usr/sr
c/nv] エラー 2
NVIDIA: left KBUILD.
nvidia.ko failed to build!
make[1]: *** [module] エラー 1
make: *** [module] エラー 2
-> Error.
ERROR: Unable to build the NVIDIA kernel module.
ERROR: Installation has failed. Please see the file
'/var/log/nvidia-installer.log' for details. You may find suggestions
on fixing installation problems in the README available on the Linux
driver download page at www.nvidia.com.

インストール前に、$ sudo aptitude install build-essential linux-source linux-headers-`uname -r` xserver-xorg-dev コマンドで必要なパッケージは導入出来ているのですが、なにか不足しているものがあるのでしょうか?

よろしくご教示ねがいます。

匿名 さんのコメント...

たてやんです(ネット上には久々の書き込み)

NVIDIAのFTPサイト
 ftp: //download.nvida.com/XFree86/Linux-x86/

以下に 96.43.09 というフォルダがあり これの NVIDIA-linux-x86-96.43.09-pkg1.run
を使ったら あっさり Ubuntu8.10 で動きましたよ

Linux-2.6.27用のパッチとか探して充ててみたりしたけど動かなくて、最終的に上記を見つけて動きました