US15W(Poulsbo) の Debian GNU/Linux マシンで psb ドライバを使う

背景

UMPCではおなじみの US15W (Poulsbo) チップセットなのですが、この ビデオが困り者で、Linux のドライバがなかなか出てくれません。 でも最近 Ubuntu 9.04 ように新しいドライバが出てたので Debian に持ってきてみました。 せっかくだから、俺はこっちの web サイトでやり方を説明するぜ。
LOOX U/B50 と VAIO type P (VGN-P91HS) で動きました。

概要(ざっくりこんな手順)

  1. xorg を 7.4 にする。
  2. kernel 2.6.28.10 を入れる。
  3. Ubuntu ようのパッケージをいくつか持ってくる。
  4. カーネルモジュールをビルドする。
  5. パッケージを extract して、必要なファイルをしかるべき場所に置く。
  6. 起動時にモジュール読み込むようにする。
  7. xorg.conf を編集する。

詳細手順

xorg を 7.4 にする。

このドライバは xorg 7.4 じゃないと動かないようなので、 7.4 にします。幸い 2009/9 にようやく Debian でも testing が 7.4 になったようなので、ふつうに aptitude か何かで アップグレードしてください。

kernel 2.6.28.10 を入れる。

Ubuntu 9.04 ようの psb ドライバはカーネル 2.6.28 ようの カーネルモジュールを使います。この辺が linux の困りどころで カーネルのバージョンがちょっと違うだけでモジュールが 読み込めないばかりかビルドすらできないこともふつうです。 悪いことに psb ようのモジュールはこれに該当します。ですので 2.6.28 限定。その中で最新(2009/9現在)の 2.6.28.10 を インストールしましょう。 http://www.kernel.orgあたりから持ってきて適当に ビルド・インストールしてください。
うまくインストールできたらそのカーネルで再起動します。

Ubuntu ようのパッケージをいくつか持ってくる。

以下の 4 つのファイル(パッケージ 3 つとソース 1つ)を http://ppa.launchpad.net/ubuntu-mobile/ppa/ubuntu/pool/main/ あたりから入手します。適当なディレクトリにでもまとめて 保存しましょう。

カーネルモジュールをビルドする。

psb-kernel-source_4.41.1.orig.tar.gz から 2 つのファイル psb.ko, drm.ko を作ります。

yagshi@mobula:~/psb$ tar zxf psb-kernel-source_4.41.1.orig.tar.gz 
yagshi@mobula:~/psb$ cd psb-kernel-source-4.41.1/
yagshi@mobula:~/psb/psb-kernel-source-4.41.1$ make psb.o
(中略)
yagshi@mobula:~/psb/psb-kernel-source-4.41.1$ ls *ko
drm.ko  psb.ko

完成したらこれらを /lib/modules/2.6.28.10/ に置いて、 depmod しときましょう。

パッケージを extract して、必要なファイルをしかるべき場所に置く。

例えばlibdrm-poulsbo1_2.3.0-0ubuntu1~904um1_i386.debの場合、 展開すると以下のように4つのファイルになります。ドキュメントは無視して、 libdrm.so.2 (シンボリックリンク), libdrm.so.2.3.0 の 2 つを然るべき場所 (この場合 /usr/lib/ )に移します。 これを 3 つの .deb ファイルすべてについて行います。

yagshi@mobula:~/psb$ dpkg -x libdrm-poulsbo1_2.3.0-0ubuntu1~904um1_i386.deb .
yagshi@mobula:~/psb/tmp$ ls -R usr/
usr/:
lib  share

usr/lib:
libdrm.so.2  libdrm.so.2.3.0

usr/share:
doc

usr/share/doc:
libdrm-poulsbo1

usr/share/doc/libdrm-poulsbo1:
changelog.Debian.gz  copyright

起動時にモジュール読み込むようにする。

/etc/modules に psb の 1 行を追加します。

xorg.conf を編集する。

xorg が 7.4 になってから xorg.conf の書き方がずいぶん変わって ぼくはまだよくわからないのですが、さしあたり以下の 4 行だけの ファイルにしておけば ok みたいです。

Section "Device"
  Identifier  "Generic Video Card"
  Driver      "psb"
EndSection

終わりに

LOOX U 買って苦節 1 年。やっと 1280x800 で使えるようになりました。 dri も効いているみたいなのですが、あまり(というか全然)速くないですね。 でも本来の解像度と外部出力が使えるようになっただけでもありがたい。 それと、LOOX はふたを閉じたときにバックライトが消えるようになりました。
難点はカーネルのバージョンが縛られること。早く psb.ko が linux カーネルに取り込まれればいいのにね。

ところで、VAIO type P だと VESA で 1600x768 出るし、閉じるとちゃんと バックライト消えるのに、なぜ LOOX U はダメなんでしょ。