ZBOX nano VD01でX.orgがopenchromeドライバで動いたよ
2012/02/12(日) 15:40 NetBSD はてブ情報 はてブに登録 はてブ数

ここまで、起動させる、正しいディスクドライバを使う、までたどり着きました。

さて、そろそろX.orgを動かしてみたいところです。

Xorg -configureを実行してxorg.confのひな形をつくってXorg -config xorg.conf.newってな感じで動かしていくことになるわけですが、まずvesaドライバだと動くには動くのですが解像度が低くて常用するには残念な感じです。

せっかくのVX900チップセットに統合されたChrome9 HCMが泣いているぜ、ということで、さてどうするかなと思ったところで大した選択肢はなく、openChromeプロジェクトで作られているopenchromeドライバを使うことで良さそうです。

おもむろにDeviceセクションにある
        Driver "vesa"

        Driver "openchrome"
に変更して、神に祈ってからstartxです。結果は「そんなデバイスはない」といわれてしまいます。

いやいや、openChromeプロジェクトでは動くって書いてあるし、デバイスがないとは失礼な。なんかの間違いじゃないですかね。

うーんと思って、/usr/X11R7/lib/modules/drivers/openchrome_drv.so.0をstringsしてみるとどうやらVXシリーズは800番台までしか対応してくれていないみたいです。

はー、なるほど。これは例によってVX900の定義を書いて、ちょこちょこっとパッチを当てれば動くんでしょ。きっとそうでしょ。

そんな淡い期待はopenChromeの最新ソースを見て打ち砕かれたのでした。

結構差分があるのです。ここで、標準配布のxsrcではなくてpkgsrcのmodularなX.orgを使うことも考えたのですが、どうせなら最新を動かしたいなぁと。

xsrcに最新openChromeソースのVX900対応部分を取り出してパッチする方法よりもごっそりと*.c, *.hを入れ替えたほうが早そうです。

build.sh -x -X ../xsrc buildって感じで動かしてみると予想どおり止まります。エラーは、
  1. そんなヘッダファイルないよ
  2. 宣言されてないよ
の二種類だったのでxsrcのソースを参照したり、宣言部分を泥縄で追記していくことでコンパイルができるようになりました。

こまったのはbuild.shを毎回走らせていると遅くて仕方がないということです。どこかでMakefileが実行されているに違いないのですが、build.shのオートメーション化にすっかり堕落してしまい、xsrcにもないしsrc/objにもないし、とうろうろと探しまわってしまいました。

答えはsrc/external/mit/xorg/server/drivers/xf86-video-openchromeでした。ここでmakeを実行すればobjディレクトリにお目当てのものが生成されます。

一つ注意しなければならないのは、生成されたドライバモジュールの名前です。libopenchrome_drv.so.0という名前で生成されたドライバはopenchrome_drv.so.oとして/usr/X11R7/modules/driversにコピーされている必要があります。最初は名前が違うことに気づかず、同名でコピーして、事象が変わらず悩んでしまいました。

いざ、新しいドライバでstartxするとパチッと画面が暗転し...

暗転したままです。

リモートからマシンの状態を覗いてみるとXorgは動いていてpkill Xorgとかすると起動しているつもりで表示できていないxterm3匹を終了した旨のメッセージが出ます。

設定に不備があるのかと思い、Modelineを足してみたりしましたが、事態は進展しません。Option "PanelSize" "1280x1024"してみたりしても変わりません。

ふとディスプレイ装置からは信号がきてません的なメッセージが出ています。ZBOX nano VD01にはDisplayPortとHDMIが出ています。もしかしたら変なところに向かって表示をしているのかもしれません。

Option "ActiveDevice"というのがあってCRT, LCD, DFP, TVという値が設定できます。もしかしたら、これかなと思って順番に試すことにしました。

CRTだと事象に変化なし、LCDだとなにやらシマシマの模様が表示されます。信号すらきていなかった状況からすると一歩進展。DFP, TVと試してみるとシマシマ模様が表示されます。うーん、とおもって最初に試したCRTを設定してみると、あれ? シマシマ模様です。もう何が何やら。

もうこれは一つ一つオプションを試すしかないのかと思い、manやWebなどを参考に
        Option "VBEModes" "true"
を足して起動したところ、びしっと1280x1024でxtermが3枚表示されました!

記念にxorg.confを張っておきます。あと、openChromeの最新ソースをxsrcでコンパイルするための稚拙なパッチも張っておこう。
Section "ServerLayout"
        Identifier     "ZOTAC ZBOX nano VD01"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
        ModulePath   "/usr/X11R7/lib/modules"
        FontPath     "/usr/X11R7/lib/X11/fonts/misc/"
        FontPath     "/usr/X11R7/lib/X11/fonts/TTF/"
        FontPath     "/usr/X11R7/lib/X11/fonts/Type1/"
        FontPath     "/usr/X11R7/lib/X11/fonts/75dpi/"
        FontPath     "/usr/X11R7/lib/X11/fonts/100dpi/"
EndSection

Section "Module"
        Load  "dbe"
        Load  "dri"
        Load  "dri2"
        Load  "extmod"
        Load  "glx"
        Load  "record"
        Load  "shadow"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "wsmouse"
        Option      "Device" "/dev/wsmouse"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "IO DATA"
        ModelName    "Monitor Model"
EndSection

Section "Device"
        Identifier  "VX900"
        Driver      "openchrome"
        Option "VBEModes" "true"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "VX900"
        Monitor    "Monitor0"
EndSection
diff -ur src.openchrome-orig/via_dga.c src/via_dga.c
--- src.openchrome-orig/via_dga.c       2012-02-12 13:23:10.000000000 +0000
+++ src/via_dga.c       2012-02-10 01:43:42.000000000 +0000
@@ -30,6 +30,8 @@
 #include "via_driver.h"
 #include "dgaproc.h"
 
+extern void viaShowCursor(ScrnInfoPtr pScrn);
+extern void viaHideCursor(ScrnInfoPtr pScrn);
 
 static Bool VIADGAOpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
                                   int *, int *, int *);
diff -ur src.openchrome-orig/via_driver.c src/via_driver.c
--- src.openchrome-orig/via_driver.c    2012-02-12 13:23:10.000000000 +0000
+++ src/via_driver.c    2012-02-10 06:50:44.000000000 +0000
@@ -39,7 +39,7 @@
 #include <X11/extensions/dpms.h>
 #endif
 
-#include "version.h"
+#include "svnversion.h"
 
 #include "via_driver.h"
 #include "via_video.h"
@@ -58,6 +58,9 @@
 /* RandR support */
 #include "xf86RandR12.h"
 
+extern Bool viaHWCursorInit(ScreenPtr pScreen);
+extern void viaHideCursor(ScrnInfoPtr pScrn);
+
 /* Prototypes. */
 static void VIAIdentify(int flags);
 
diff -ur src.openchrome-orig/via_mode.c src/via_mode.c
--- src.openchrome-orig/via_mode.c      2012-02-12 13:23:10.000000000 +0000
+++ src/via_mode.c      2012-02-11 17:50:00.000000000 +0000
@@ -41,6 +41,11 @@
 #include "via_id.h"
 #include <unistd.h>
 
+extern void ViaDisplaySetStreamOnCRT(ScrnInfoPtr pScrn, Bool primary);
+extern void ViaDisplaySetStreamOnDFP(ScrnInfoPtr pScrn, Bool primary);
+extern void ViaDisplaySetStreamOnDVO(ScrnInfoPtr pScrn, int port, Bool primary);
+extern void ViaDisplayEnableDVO(ScrnInfoPtr pScrn, int port);
+
 /*
  * Modetable nonsense.
  *
diff -ur src.openchrome-orig/via_video.c src/via_video.c
--- src.openchrome-orig/via_video.c     2012-02-12 13:23:10.000000000 +0000
+++ src/via_video.c     2012-02-11 17:57:58.000000000 +0000
@@ -51,6 +51,7 @@
 #include <X11/extensions/Xv.h>
 #include "xaa.h"
 #include "xaalocal.h"
+#include "damage.h"
 #include "dixstruct.h"
 #include "via_xvpriv.h"
 #include "via_swov.h"

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0777/tb/