top page > X Window System > here

PC-98 における XFree86


概要

現時点での FreeBSD と XFree86 との関係を概説します.

対象は次のようなものです.

  1. PC-98 (AT 互換機と共通の情報もあります.)
  2. XFree86 4 系 (一部に XFree86 3 系や X.Org の記述もあります.)
  3. FreeBSD は X.Org 7 系が標準採用になった version (6.3, 6.4, 7.2, 8.0, etc.)
    それ以前の version も対比のために取り上げています.

目次

1. FreeBSD における XFree86 の現状
2. XFree86 4 系における MGA
2.1 XFree 4.7.0 まで
2.2 XFree 4.8.0

1. FreeBSD における XFree86 の現状

FreeBSD と XFree86 および X.Org との関係は,X on PC-98 にまとめました. そこに書くと散漫になるような話題のために,このページを作りました.

XFree86 と X.Org の分裂以来,FreeBSD はどちらが「標準」かは別として,どちらでも選べる環境を提供していました. XFree86 は「標準」でなくなった後も,4.5.0 までは ports から導入することができました. (逆に言うと,4.5.0 までで update は打ち切られました.)

そしてついに,X.Org 7 系の採用を契機に,XFree86 は ports からはずされました. (うちでは FreeBSD 6.2 から 7.2 の間は導入していないので正確にいつからとは言えませんが,この二つの version の間です.)

では,ports を使わなければ XFree86 を導入,利用できるかということですが,以下のような状態です.

この場合に注目しなければならないのは,動作するか否かだけでなくそもそも make World ができるか否かです. XFree86 3.3.6 および XFree86 4.8.0 に対するそれらの状況を,種々の version の FreeBSD に対して次表に示します. この表の「動作」は PC-98 + MGA だけの結果です.

FreeBSD における XFree86 の導入
FreeBSD XFree86 3.3.6 XFree86 4.8.0
version gcc make 動作 make 動作
4.112.95.4
5.3 3.4.2 
6.2 3.4.6 
7.2 4.2.1  ×
8.0 4.2.1  ×

  表中の make の欄の記号の意味は次の通り.
〇 : ソースの修正なしに make することができる.
△ : エラーに対処してソース修正すれば make することができる.
× : make できない.[1]

  また,動作の欄の記号の意味は次の通り.
〇 : 問題なく動作する.
△ : 動作に問題がある.
× : 動作しない.
? : 確認作業をしていない.
― : make できないため確認できない.

表中に△で示した「動作の問題」は,具体的には次のようなものです.
(1) XFree86 3.3.6
    Bus Mouse はキーボードからの入力ができないか,またはマウスを動かすまで反映されません. USB Mouse はそれに加えてマウスのイベントが余計に発生し,意図した操作ができません. [2]
    (実用性という観点からは×を付けても良い状態です.)
    なお,これは PC-98 特有の問題であり,少なくとも AT 互換機 + MGA では生じませんでした.
(2) XFree86 4.8.0
    X Server が起動しません. 本来は×ですが,暫定対策を施して△にしました. 詳細は 2.2 節を参照して下さい.

make において独自の修正が必要であったり,make に失敗したりする理由は,

などです. XFree86 4 系は現在も FreeBSD 用に binary が供給されています. ただし,FreeBSD 7 系のためのものは FreeBSD 7.0 にて make したものです. このままだと供給は続けられなくなるかもしれません.

次にグラフィックカードごとの動作について概観します. (確認は FreeBSD(98) 4.11 にて行なっています.)

  1. XFree86 4.6.0 から 4.8.0 まで make World, make install は問題なくできます.
  2. trident は 4.6.0 から 4.8.0 まで動作します.
  3. mga は 4.6.0, 4.7.0 にて動作しますが,4.8.0 では動作しません.
  4. cirrus は 4.4.0 を最後に動作の確認をしておりません.(cirrus のみ,確認は FreeBSD(98) 4.10 にて)

上記のような確認作業を行なって実感したのは,OS の update に追従して X もメンテを続けないと,動作云々以前に compile すらできなくなってしまうのだなあということです. 素直に OS 標準の X を使うのが楽でかつ確実でしょう.
(逆に「この X を使いたい」という要求があるなら,それに見合った version の OS を選べば良いのです.[3])

2003 年に XFree86 と X.Org とが分裂した時点では帰趨が分からなかったし,PC-98 にとっては XFree86 の方がきちんと対応してくれたので 4.8.0 まで動作の確認を続けてきたのですが,そろそろ潮時のようです.

[1] 原理的には修正を続ければ make できるはず,すなわち「△」になるはずですが,現実には極めて困難です.

[2] XF86Config にてマウスを効かないようにすれば,キーボードは正常に動作します. 一見容易に解決できそうですが,意外と奥が深いです. そもそも原因が分かりませんし. PCI のグラフィックボードならば,X.Org 7 系を修正した方がいろいろな意味で楽かもしれません.

[3] 当然ですが,古い OS や X を使いたい場合には,導入する前に security がどうなっているかを調べましょう.

2. XFree86 4 系における MGA

2.1  XFree86 4.7.0 まで

XFree86 4.7.0 までは,グラフィックボードが MGA のみである PC-9821 Rv20 では X Server の起動と終了を繰り返すことができました. ところが,「抜いてはいけない」グラフィックボードである Trident を持つ PC-9821 Ra20 に MGA を挿してこれを使うと,OS を起動してから X Server の起動,終了,起動とすると,二回目の起動は途中で止まりました.[1][2] (Trident の方は MGA を挿した状態においても,起動と終了を繰り返すことができます.)

症状としては,起動しても console から X の画面に切り換わらずにそこで固まります. XFree86 Server が CPU のほぼ 100% を占めます. log の最後は

(--) MGA(0): MMIO registers at 0x20414000

です. 正常に動作する場合には,さらに次のように続くはすです.

(WW) MGA(0): Video BIOS info block not detected!    ← PC-98 なので,これで正しい.
(==) MGA(0): Write-combining range (0x20004000,0x4000) was already clear

この症状は XFree86 が 4 系になってから PC-98 + MGA に対して生じたり直ったりしてきたものです.[3]

[1] OS は生きているので,電源 OFF 以外の方策はあります.
   [Ctrl] + [Graph] + [DEL] で reboot するとか,LAN 経由で ssh で入って対処するとか.

[2] この「PC-9821 Ra20 おける X Server の二回目の起動の問題」は X.Org 6 系でも同様に生じます.
   一方 X.Org 7.4 ではこの問題は解決されています. Video BIOS の検出は driver の側にてより安定した形で実現されています. (mga_bios.c) ソースを参考にするなら,ports で言うと以下のところです.

/usr/ports/x11-drivers/xf86-video-mga/
/usr/ports/x11-servers/xorg-server/    ← 参考までに,server はこちら.

[3] 私がではないのですが,意識的に直してくれた方もいらしたし,AT 互換機のための改変によりついでに直ったこともありました.

2.2  XFree86 4.8.0

XFree86 4.8.0 においては,Rv20, Ra20 の別なく一回目の起動から上記の症状が出て X Server が動作しません.
これは driver (/usr/X11R6/lib/modules/drivers/mga_drv.o) の問題ではありません.[1] すなわち,

  • 4.7.0 の mga_drv.o を 4.8.0 の環境で用いても同じ症状が出て動かない.
  • 4.8.0 の mga_drv.o を 4.7.0 の環境で用いても正常に動作する.

この問題には,OS を起動したら先ず XFree86 4.7.0 や X.Org 6.9.0 の X Server を立ち上げてそれを終了させ,次いで XFree86 4.8.0 の X Server を立ち上げるようにすれば対処できます. (それができる環境ならば,XFree86 4.7.0 や X.Org 6.9.0 を使えば良いのですが.)

[1] 問題が生じる箇所は X Server の PCI がらみの部分です. ソースで言えばここです.

xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c  の  xf86ReadPciBIOS()

しかし,この問題が生じる原因までは追求できませんでした.

参考までに補足致します. XFree86 4.7.0 までは,(そして X.Org 7.4 でも)

(!!) More than one possible primary device found
(--) PCI: (0:7:0) NEC Corporation PCI to PC9800 Core-Graph Bridge rev 2
(--) PCI: (0:14:0) Matrox Graphics, Inc. MGA 2064W [Millennium] rev 1, Mem @ 0x20004000/14, 0x23000000/23

のように PCI を認識できていたのが,XFree86 4.8.0 では上記の修正の有無に関係なく,2 行目が次のようになります.

(--) PCI: (0:7:0) unknown vendor (0x1033) unknown chipset (0x0009) rev 2

mga が動作しないことと原因が同じとは限りませんが,XFree86 の側も FreeBSD から遠ざかっているという印象です.