-- X11R6.3, X11R6.4 を使っているなら、こうした方が得 --
下記の _mem_rop などの未解決シンボルについてですが、これらはどうやら SunView の pixrect 関係のもので、cgsix.o に組み込まれているものの SunView を使わなければ使用されないように思えてきました。
そこで、下記では conf/files を修正し、mem_rop.o 等を link することで解決したのですが、そうではなく、_mem_rop 等のシンボルを、単なるダミースタブに置き換えてみることにしました。
具体的には、conf/files を元に戻し、_mem_rop, _mem_putattributes, _mem_ops を定義した適当な C ソースを書き、 config のあと、作成された Makefile にそのソースを追加し、後は普通に kernel make します。
こうすると、mem_rop.o 等のオブジェクトも外れるため、vmunix はさらに小さくきれいになります。
この状態で、X11R6.3 が問題なく動きました。
さらに、X11R6.4 も無事動きました。
SunView のドライバーは、/usr/kvm/sys/`arch -k`/conf 以下のコンフィグファイルに、
pseudo-device win128 pseudo-device dtop4
のように記述されています。(sun4m では win256 かもしれません)
このオプションが指定されていると、vmunix にはかなりの数の SunView 関係のドライバーがリンクされます。
これらは、X11 を使う限り、全く不要です。 これらのドライバーは外した方がシステムが軽くきれいになります。
では、この2行を単純に # でコメントアウトしてカーネルを make
してみましょう。
(あと、options WINSVJ もコメントアウトの必要があります)
すると、make の最後付近の ld
で、
loading vmunix ld: Undefined symbol _mem_rop _mem_putattributes _mem_ops
というエラーが出て、make に失敗するでしょう。
これを解決する方法がわかりました。
修正するファイルは /usr/kvm/sys/`arch -k`/conf/files です。このファイルには、カーネルのコンフィグファイルで、『どの option が指定されるとどのソースとリンクするか』ということが書かれています。 問題は、このファイルの先頭付近にある、
pixrect/../mem/mem_colormap.c optional win device-driver pixrect/../mem/mem_kern.c optional win device-driver pixrect/../mem/mem_rop.c optional win device-driver pixrect/../pr/pr_clip.c optional win device-driver
の4行です。これらの、mem_colormap.c (実際には OBJ/mem_colormap.o, カーネルのソースコードは持っていないため) 等の4つのファイルは、cgsix 等を使う場合に必要です。しかし、optional win device-driver と書かれているため、カーネルのコンフィグオプションから win128 をコメントアウトすると、files のこれらのファイルまで外されてしまうのです。
そこで、この win を cgsix に書き換えます。つまり、
pixrect/../mem/mem_colormap.c optional cgsix device-driver pixrect/../mem/mem_kern.c optional cgsix device-driver pixrect/../mem/mem_rop.c optional cgsix device-driver pixrect/../pr/pr_clip.c optional cgsix device-driver
とします。すると、カーネルのコンフィグオプションで cgsix を有効にしている限り、これらの4つのファイルが無事リンクされます。 このように files を修正してから、再度 /usr/etc/config を実行し、あとは通常通りカーネルを make すれば、エラーなく SunView のドライバーの外れた vmunix ができます。もちろん、こうしてできた新しい vmunix 上で、X11R6.3 が問題なく動作しています。
おそらく、Sun では cgsix とかを使う場合は SunView のドライバーを必ず使うという前提で、/usr/kvm/sys/`arch -k`/conf/files を記述したのでしょう。
しかし、考えてみれば SunView もコンパクトによくできたシステムだったのかも知れません。私も昔、Sun3 時代に SunView を使っていました。
今、インストールメディアの SunView_Users のカテゴリーを見てみると、そのサイズはたったの 2.7MByte(*1) です。・・これは font を含んでいないのだな ・・と思ったら、ちゃんとフォントも含めてこのサイズなのです。
X11 だと、コア部分だけでも数十MByte になるので、SunView をあらためて見ると驚きます。 あと、(本質に関係ありませんが)SunView では、全体にデザインが上品な感じがしました。例えば、SunView の clock を見なれたあとで、X11 の xclock を見た時、そのデザインがなんとなく無骨に感じました。
(*1) これは non-JLE の場合のサイズ。JLE では 約5.4MByte。ちなみに、JLE のインストレーション紙マニュアルでは、non-JLE の英文マニュアルを直訳したせいか、SunView_Users, SunView_Programmers のサイズの記述が間違っていて non-JLE 版のサイズが書かれている。