2007/05末よりportsに含まれるようになったX.org 7.2で、Matrox Millennium G550のDVI経由でモニタ出力を行おうとしたところ、画面が出力されない(モニタ上の表示が「No Signal」になる)不具合に遭遇しました。
そもそもの原因は、X.orgに標準で添付されているMatroxドライバがDVI出力に対応していないためで、DVI出力に対応するためには、mga_halをports経由で導入する必要がありました。
ただしこのportsが曲者で、コンパイル済みのバイナリをただインストールするだけの動作になっていて、なおかつ古いバージョンのドライバをインストールしてしまっていたため、このページではportsのアーカイブからX.org 7.0.0向けのドライバを取り出して無理やり利用する方法について紹介していました。
しかしながら、この度ようやっと純正ドライバをソースからコンパイルする方法を編み出しましたので、以下にご説明させていただきます。
これでお気に入りのMillennium G550も当面使い続けられるんじゃないかと思います。
まずはじめに、Matroxのサイトから純正ドライバのソースコードを取得します。
$ fetch ftp://ftp.matrox.com/pub/mga/archive/linux/2006/matrox_driver-x86_32-src-4.4.0.tar.gz
続いて、ソースコードを展開し、当方にて作成したパッチを適用します。
$ tar -xvzf matrox_driver-x86_32-src-4.4.0.tar.gz $ cd matrox_driver-x86_32-src-4.4.0 $ cp -pR 7.0.0 7.3.0 $ fetch http://www.kishiro.com/FreeBSD/patch/matrox_driver-x86_32-src-4.4.0_xorg-7.3.0.patch $ patch < matrox_driver-x86_32-src-4.4.0_xorg-7.3.0.patch
上記で適用しているパッチは、X.org 7.3の環境でMatrox純正ドライバがコンパイルできるようにするためのものです。
上記のように展開した「7.0.0」の中のオリジナルのソースコードを、「7.3.0」にすべてコピーし、パッチを適用してください。
続いて、ドライバ「mga_drv.so」の構築に入ります。
下記のようにして「configure」の後、「make」を行ってください。
$ cd 7.3.0/src/mga $ ./configure $ make
上記の手順で構築したドライバは、HALが有効になります。
構築されたドライバは、「src/.libs/」下に「mga_drv.so」の名前で格納されますが、HALが有効になっているため、このドライバ単体では動作しません。
引き続きmgaのHALドライバである「mga_hal_drv.so」を構築します。
続いて、HALドライバ「mga_hal_drv.so」の構築に入ります。
困ったことにMatroxから配布されている純正ドライバには、HALドライバ構築用のMakefileは用意されていませんので、下記のようにmakeではなく、直接「gcc」を利用して構築します。
$cd src $ gcc -m32 -o ./.libs/mga_hal_drv.so -shared -nostdlib ./.libs/mga_halmod.o ./.libs/clientlx.o ./HALlib/mgaHALlib.a -Wl,-Bstatic -lgcc -Wl,-Bdynamic
これで構築は完了です。
構築されたドライバ、およびHALドライバは、いずれも「.libs/」下にそれぞれ「mga_drv.so」「mga_hal_drv.so」の名前で格納されています。
このファイルを「/usr/local/lib/xorg/modules/drivers/」下にコピーしてください。
標準でmgaドライバをインストールしている場合、上記ドライバの格納先には、既に「mga_drv.so」が含まれていますので、既にあるファイルは「mga_drv.so.original」等にリネームして退避しておいてください。
今回、私の方ではFreeBSD 6.3-RELEASE + X.org 7.3の環境で構築から実際の動作までの一連を確認しています。
未確認ですが、FreeBSD 7.0-RELEASE環境やLinux環境、X.org 7.2環境でもうまくいくんじゃないかと思います。
お試しあれ。
尚、X.org 7.4ではPciRework対応によりドライバモデルが変更されていて、このパッチではG550を動作させることができない(コンパイルすら通らない)ので、ご注意ください。
・Linux環境(Debian 5.03およびUbuntu 8.04)での動作報告を追記。
・X.org 7.4においては、PciReworkの影響でドライバモデルが変更され、このパッチでは動作しない旨を追記。
| まさにこれだ 2 (100%) |
【まさにこれだ】 ありがとうございます。Linux の Debian 5.03 と、Ubuntu 8.04(いずれも X.org 7.3)でうまくいきました。
残念なことは Ubuntsu 9.04 では X.org 7.4 のため、コンパイルがうまくいかないようです。X.org 7.4 に対応は可能でしょうか? (2009/09/16 Wed 06:27:09)
→ X.org 7.4に対応させるには、「PCI rework」と呼ばれるソースコードの修正が必要です。(PCIデバイスの認識のさせ方が大幅に変更になっています)
修正を試みたのですが、コンパイルは通るけど上手く動かない状況でスタックしてます。すみません。
