メッセージ欄

2012年2月の日記

一覧で表示する

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"

ZBOX nano VD01のHDDが遅い
2012/02/07(火) 25:38 NetBSD はてブ情報 はてブに登録 はてブ数

めでたく起動したZBOXですが、使っていてどうもディスクが遅い気がしてなりません。

で、ひとつ覚えのdbenchを走らせてみたところ、

Throughput 13.9741 MB/sec 5 procs

という結果。なんだこれ、KVM上のNetBSDより遅いじゃないか!

よく見ると、ディスクのドライバがpciideというgenericなドライバが使われていて、しかもPIOで動いているっぽいメッセージ。

一方で、本来使われるべきviaideドライバは認識されていないということで、viaideのソースを見たところ、どうやらチップセットを登録してあげないといけないようです。

ということで、以下のような修正を加えました。
--- sys/dev/pci/viaide.c.orig	2012-02-07 01:08:45.000000000 +0000
+++ sys/dev/pci/viaide.c	2012-02-07 08:01:25.000000000 +0000
@@ -345,6 +345,11 @@
 	  "VIA Technologies VT8237S SATA Controller",
 	  via_sata_chip_map_7,
 	},
+	{ PCI_PRODUCT_VIATECH_VX900_SATA,
+	  0,
+	  "VIA Technologies VX900 SATA Controller",
+	  via_chip_map,
+	},
 	{ 0,
 	  0,
 	  NULL,
--- sys/dev/pci/pcidevs.orig	2011-10-19 00:21:35.000000000 +0000
+++ sys/dev/pci/pcidevs	2012-02-07 01:08:04.000000000 +0000
@@ -4676,6 +4677,7 @@
 product VIATECH VT82C597AGP	0x8597	VT82C597 (Apollo VP3) CPU-AGP Bridge
 product VIATECH VT82C598AGP	0x8598	VT82C598 (Apollo MVP3) CPU-AGP Bridge
 product VIATECH VT8605AGP	0x8605	VT8605 (Apollo ProMedia 133) Host-AGP Bridge
+product VIATECH VX900_SATA	0x9001	VX900 SATA Controller
 product VIATECH K8T890_PPB_A238	0xa238	K8T890 PCI-PCI Bridge
 product VIATECH VT8633AGP	0xb091	VT8633 (Apollo Pro 266) CPU-AGP Bridge
 product VIATECH VT8366AGP	0xb099	VT8366 (Apollo KT266) CPU-AGP Bridge
すると、
viaide0 at pci0 dev 15 function 0: VIA Technologies VX900 SATA Controller (rev. 0x00)
viaide0: VIA Technologies unknown VIA ATA controller
viaide0: bus-master DMA support present
viaide0: primary channel configured to native-PCI mode
viaide0: using ioapic0 pin 21 for native-PCI interrupt
てな感じで認識され、dbenchも

Throughput 63.8846 MB/sec 5 procs

ということで4.5倍程度高速になりました!

1: tsutsui 『wd0 の attach message で UDMA が使われているかどうかが気になるんですが、 http://www.cer...』 (2012/02/15 24:36)