まず、このドライバであるカーネルモジュールを探してみました。/lib/modules/2.6.31-14-generic の下だろうと見当をつけて適当に検索。私は "tree | less" が好きです。
"/lib/modules/2.6.31-14-generic/updates/dkms/nividia.ko" を発見。
"dkms" が謎なので、Wikipediaで調べる。「kernel suorce treeに含まれないドライバをサポートする仕組み」とある。ふーん知らないことがいっぱいあるなぁ。というか、こういう細かい仕組みが増えつづけててキャッチアップできない。
何かログが残ってるだろ、と思って/var/log以下を見てみると、dkms_autoinstallerというログファイルがあり、中には、
nvidia (185.18.36): Installing module.というエラーメッセージが。
Kernel headers for 2.6.31.5 are not installed. Cannot install this module.
Try installing linux-headers-2.6.31.5 or equivalent.
多分dkmsは、/usr/srcの下をチェックするのだろうが、2.6.31.5は/home/kawamoto/work/linux-2.6-xenでビルドしただけなので、/usr/src/linux-headers-2.6.31.5なるものはない。逆に、/usr/src/linux-headers-2.6.31.5にヘッダをおいて、dkmsというのを使えばインストールできそうである。
# make headers_install INSTALL_HDR_PATH=/usr/src/linux-headers-2.6.31.5とヘッダをインストールしてから、dkmsコマンドでビルド & インストールしてみた。
# dkms build -m nvidia -k 2.6.31.5 -v 185.18.36
Kernel preparation unnecessary for this kernel. Skipping...
applying patch rt_preempt_31.patch...patching file nv-linux.h
applying patch fall_back_on_mtrr_if_no_pat.patch...patching file nv.c
Hunk #1 succeeded at 891 (offset -49 lines).
applying patch nvidia-rt-compat.patch...patching file os-interface.c
Building module:
cleaning build area....
su nobody -c "make KERNELRELEASE=2.6.31.5 module KERNDIR=/lib/modules/2.6.31.5 IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=/lib/modules/2.6.31.5/build".......
cleaning build area....
DKMS: build Completed.
# dkms install -m nvidia -k 2.6.31.5 -v 185.18.36これで、2.6.31.5 + NVIDIAプロプライエタリドライバで動きました。
nvidia.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/2.6.31.5/updates/dkms/
depmod.............
DKMS: install Completed.
$ uname -r
2.6.31.5
$ lsmod | grep nvidia
nvidia 10316680 36
教訓:
いくつかのモジュールにおいては(少なくとも dkms では)、カーネルに対応したヘッダが、/usr/src/linux-headers-`uname -r`に存在している事が前提となっているので、パッケージを使わない場合も置いておくこと。
2009-11-29 追記:
NVIDIAプロプライエタリドライバは、Xenに対応してないことが分かりました・・・。残念。
0 件のコメント:
コメントを投稿