2012-03-15

nomodesetとLinuxにおけるGPUドライバーの問題

前回、コメントからヒントを得て、カーネルパラメーターにnomodesetを渡した結果、Ubuntu Live CDの起動に成功した。しかし、釈然としない。ともかく、調べた範囲を書いてみる。

まず、nomodesetは何をしているのかというと、kernel mode settingを無効にする。mode settingとは、画面の解像度やビット数を変更するための規格である。これは、カーネルスペース(Linux)で行うこともできるし、ユーザースペース(X)で行うこともできる。カーネルスペースで行う利点は、パフォーマンスやフリッカーのない変更などの様々な利点をもたらすし、セキュリティ上も、ユーザースペースで動くコードに不必要な権限を与える必要がないという点で優れている。Linuxカーネルは2.6.28でIntelからGEMを提供されて、カーネルスペースでのmode settingに移行した。

ところが、IntelやATIのGPUはそれなりにサポートされているのだが、nVidiaは相変わらずのバイナリブロブでドライバーを提供しており、この変更にも追従していない。結果として、ブートに失敗する。私はnVidiaのGPUを使用しているので、これは問題になる。

しかしよくわからないのだが、UbuntuのLive CDにはnVidiaのプロプライエタリなバイナリブロブは含まれていない。nouveauという、nVidiaドライバのリバースエンジニアリングの結果を元に開発しているフリーなドライバーが使われている。nouveauはmode settingをサポートしている(むしろnomodesetでは動かない)という触れ込みなのだが、事実として、nomodesetでなければ動かない。まったく釈然としない。

追記:kernel mode settingを無効にすると、フォールバックとしてnVidiaがかつて最低限のサポートのために公開していたオープンソースのドライバー、-nvが使われるらしい。

問題は、Linuxにおけるこれらの諸問題の情報が、全然まとまっていないということだ。このフォーラムにぽつり、あのフォーラムにぽつり、このディストリのwikiにぽつり、あのディストリのWebサイトにぽつり、X.orgのサイトにぽつり、といった具合に、バラバラに散らばっている。単体では問題の本質が理解できない。これだけのことを調べるのにも、ひと手間かかった。なにも、カーネル側でのmode settingは最新の機能というわけではない。Windows NTは大昔から実装しているし、Linux Kernelは2.6.28からなのだから、2009年の1月である。3年前からある問題が、いまだもって、こちらにぽつり、あちらにぽつりというのは、一体どういうことだろう。それも、nVidiaのGPUのような有名なハードの問題で、まともにブートできない深刻な問題なのだ。

もちろん、フリーを尊びプロプライエタリを拒否する原理主義者は、nVidiaのハードウェアなど使わないのかもしれない。しかし、現時点で真にフリーな個人用コンピューターは、Yeelong notebookぐらいしかないではないか。しかもRMSは、最新のYeelongを批難している。GPUにATIを選択肢したという理由でだ。ATIのドライバーは完全にオープンソースというわけではなく、一部バイナリブロブが残っているらしい。

ともかく、Linuxで何かするたびにこんな低レベルな問題に一喜一憂しなければならないとしたら、実際の作業はWindowsで行い、どうしてもLinux側で必要な作業はsshでLinuxに接続して行うという、一件不思議な使い方も、妥当に思えてくる。すくなくとも、Xを使わなければこういう問題は些細な事であろうから。

参考:
Mode setting - Wikipedia, the free encyclopedia
Graphics Execution Manager - Wikipedia, the free encyclopedia
X.Org Wiki - Home
その他多数のフォーラムや各種ディストリのWebサイト

No comments: