linux 2.6.28 + nvidia 177.82 on debian

debian/unstable に linux 2.6.28 rc5 と nvidia 177.82 をインストールする方法。

linux 2.6.28 rc5 のソースコードを用意

The Linux Kernel Archives からカーネルとパッチをdownload.

以下の手順で,展開,パッチをあてる.

$ cd /usr/src
$ sudo tar xjfz linux-2.6.27.tar.bz2
$ sudo mv linux-2.6.27 linux-2.6.28-rc5
$ cd linux-2.6.28-rc5
$ bzcat patch-2.6.28-rc5.bz2 | sudo patch -p1

linux kernel の debian package を作成

make-kpkg を使って、kernelのdebパッケージを作る

まず,設定ファイル(.config)を用意

make oldconfig を使って、現在使っているカーネルの設定ファイル(/boot/config-???)をベースに,新しい設定ファイル(.config)を作成すると楽.

$ sudo cp /boot/config-2.6.27-rc8 .config
$ sudo make oldconfig

.config ができたら make-kpkg でパッケージをビルド

$ sudo make-kpkg --initrd --append_to_version .custom kernel_image

以上の手順で,/usr/src 以下に *.deb ができる.

nvidia-kernel module を作成

続いて nvidia のドライバをビルド,インストール.

apt-get install で入手できるパッケージは,ドライバのバージョンが少々古いので,自前でアップデートする.まず,apt-get source コマンドでパッケージのソースコードを入手

$ apt-get source  nvidia-graphics-drivers
$ cd nvidia-graphics-drivers

次に,NVIDIA の AI (人工知能) コンピューティングにおけるリーダーシップ から最新のドライバのソースコードをdownload。

両方のファイルをdownloadする。


続いて、nvidia-graphics-drivers/debian 以下のファイルを少し書き換える。先ずは debian/changelog

$ vi debian/changelog

先頭に以下の5行を加える

nvidia-graphics-drivers (177.82-1) unstable; urgency=low

  * New upstream.

 -- anonymouse <nobody@localhost>  Sat, 30 Aug 2008 17:59:56 -0700

177.82 ってのがdeb packageのバージョン番号となる。

次に、 debian/upstream_info

$ vi debian/upstream_info

こちらもバージョン番号を書き換える

RELEASE=177.82
NEXTVER=177.83

あとは, パッケージをビルドするだけ.

$ dpkg-makepackage -us -uc -rfakeroot

以上の作業で,以下のファイルが生成される.

nvidia-glx-dev_177.82-1_i386.deb
nvidia-glx_177.82-1_i386.deb
nvidia-kernel-source_177.82-1_i386.deb

nvidia ドライバのインストール

1) まず上記手順で作成した nvidia-kernel-source をインストール

$ sudo dpkg -i nvidia-kernel-source_177.82-1_i386.deb 

/usr/src/nvidia-kernel.tar.bz2 というファイルがインストールされる。

2) nvidia-kernel-source.tar.bz2 を展開

$ cd /usr/src
$ sudo tar xvfj  nvidia-kernel.tar.bz2 

ファイルは、/usr/src/modules/ 以下に展開される

3) モジュール作成

$ cd /usr/src/linux-2.6.28-rc5
$ sudo make-kpkg --initrd --append_to_version .custom modules_image

通常はこのコマンドを実行するだけで、モジュールのパッケージが生成される。しかし、今回は以下のようなエラーが出る。 これは,nvidiaのドライバが最新の linux-2.6.28 に対応できていないため。

Module /usr/src/modules/nvidia-kernel failed.
Hit return to Continue

4) 手パッチ。上記のエラーを直すために、ソースコードを修正する。

手順は、http://www.trausch.us/2008/10/25/nvidia-17780-linux-2628/ で紹介されている方法に従う。

まずmodules/nvidia-kernel/nv/nvacpi.c の 161行目の以下の部分を

  // assign driver data structure ptr to this device
  acpi_driver_data(device) = pNvAcpiObject;

以下のように書き換える

  // assign driver data structure ptr to this device
  void *addd = acpi_driver_data(device);
  addd = pNvAcpiObject;

次にヘッダファイルをコピー(豪快な方法だけど,今回は黙認)

$ cd /lib/modules/2.6.28-rc5.custom/source/include/asm-x86/
$ sudo cp -r ../../arch/x86/include/asm/* 

5) 再度 make-kpkg modules_image を実行.

$ sudo make-kpkg --initrd --append_to_version .custom modules_image

一つ上に nvidia-kernel-????.deb が生成されれば、成功。

6) 出来上がったパッケージなどをインストール

まずはカーネルモジュール

$ sudo dpkg -i nvidia-kernel-2.6.28-rc5.custom_177.82-1+2.6.28-rc5.custom_i386.deb 

つづいてライブラリ

$ sudo dpkg -i nvidia-glx_177.82-1_i386.deb nvidia-glx-dev_177.82-1_i386.deb 

以上.