Debian (xorg 7.5) で GMA500(aka US15W, poulsbo)

背景

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

少し前のバージョン(xorg 7.4)の話 もあるので安定版の方はこちらをどうぞ。

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

  1. xorg を 7.5 にする。
  2. kernel モジュールを作れる環境にする。
  3. Ubuntu ようのパッケージとソースをいくつか持ってくる。
  4. カーネルモジュールをビルドする。
  5. いくつかの deb パッケージをインストールする。
  6. そのままインストールしにくいパッケージを extract して、必要なファイルをしかるべき場所に置く。
  7. xorg.conf を編集する。

詳細手順

用意するもの

Ubuntu 10.04 ようの以下のモジュール及びソース一式を http://ppa.launchpad.net/lucazade/poulsbo-lucid-fix/ からダウンロードします。

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

以下の説明は linux-2.6.33.5 の場合です。これ以外のバージョンの場合は 多少エラーの内容が異なると思います。

  1. カーネルモジュールがビルドできる環境(linux-headers-*パッケージが インストールされている、もしくは自分でコンパイルしたカーネルで 動いている環境)にしします。
  2. 適当な作業ディレクトリに psb-kernel-source_4.42.0-0ubuntu2~1004um3.2.tar.gz を展開します。
  3. その中で make psb.o を実行します。途中で
    include/linux/irqreturn.h:16: note: previous declaration of 'irqreturn_t' was here
    
    というエラーが出たら drm_os_linux.h を編集して
    //typedef void irqreturn_t;
    
    とコメントアウトしてください。そして再度 make psb.o。
  4. さらに
    ~/psb3/psb-kernel-source-4.42.0/drm_memory.c:267: error: 'struct agp_memory' has no member named 'memory'
    
    というエラーが出たら drm_memory.c の中の agpmem->memory->memory を agpmem->memory->pages に 変更します。また make psb.o。 drm_vm.c でも同じエラーが出るので修正(2箇所)。 また make psb.o。
  5. 今度は drm_agpsupport.c でエラーが出るので、 その先頭に
    #define phys_to_gart(x) (x)
    
    として再度 make psb.o。
  6. さらに drm_edid.c でエラーが出るので、その中の printk(KERN_ERR PREFIX "Invalid _DDC data\n"); をコメントアウトしてまたまた make psb.o 。これでようやく psb.ko と drm.ko が完成します。
  7. psb.ko はカーネルモジュール置き場(/lib/modules/バージョン/)の 適当な場所、例えば kernel/drivers/misc/ とかに、 drm.ko は同名のモジュールが kernel/drivers/gpu/ にあるのでそれを 上書きするように置きます。
  8. 最後に depmod -a してできあがり。

いくつかのパッケージをインストールする

以下の 4 つを dpkg -i でインストールしてください。

xserver-xorg-video-psb のインストール

残る xserver-xorg-video-psb_0.36.0-0ubuntu3~1004un2.3_i386.deb については依存関係がうるさいので手動でインストールします。 適当な作業ディレクトリで

 dpkg -x xserver-xorg-video-psb_0.36.0-0ubuntu3~1004un2.3_i386.deb .
などとします(最後のピリオドを忘れないよう)。 すると、etc/ と usr/ というディレクトリができるので、その中身を ルートディレクトリの /etc/ /usr/ 以下に同じように移動させます。 これで完成。

xorg.conf の編集

こんなんで十分です。

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

終わりに

長いこと xorg 7.4 を7.5にアップデートできず気持ち悪かったのですがようやく 解決、めでたしめでたし…というわけにはいきませんでした。 とりあえず不具合としては

というものが見られています。早く xorg 純正ドライバ出ないかな…。