次のページ 前のページ 目次へ

5. インテルプラットホーム上でフレームバッファデバイスを使う

5.1 vesafb とは何か

Vesafb は VESA 2.0 類似のグラフィックカードで動くインテルアーキテクチャ のフレームバッファドライバです。カーネル内部でフレームバッファデバイス と密接に関係しています。

vesafb は、ビットマップ化されたテキストコンソールに対するインテルプラッ トホーム上で、グラフィカルモードの使用を可能にするディスプレイドライバ です。ロゴを表示できるようにもなり、それが恐らくvesafb を使いたいおも な理由かもしれません。

残念ながら、VESA 1.2 カードでは十分に vesafb を使えません。これらの 1.2 カードは linear frame buffering を使わないからです。Linear frame buffering というのは、システムの CPU がディスプレイのすべての bit にアクセスできるということです。歴史的に、古いグラフィックカード では、一度に 64K しか CPU からアクセスできません。これが、かのオソロ シイ CGA/EGA グラフィックモードの限界、というわけです! これらのカードについての vesafb12 デバイスドライバを誰かが書いてもよい でしょうが、これは、貴重なカーネルメモリを消費し、あまりやりたくない 格闘が必要になるでしょう。

しかしながら、あなたがお持ちのちょっと古い VESA 1.2 カードに対して VESA 2.0 エクステンションを加えるには、ちょっとした努力が必要です。DOS から動かせる TSR 型プログラムをダウンロードできるでしょうし、loadlin を使って適切なグラフィックコンソールモードに対してカードの設定を援助 できます。これはいつもうまくいかないことを注意しておいてください。 たとえば、VLB 54xx シリーズのような Cirrus Logic のあるものは、 フレームバッファリング用に特定のメモリアドレス(たとえば15MB-16MB の 範囲以内)の範囲をマップしており、かつそれらが 32MB 以上のメモリを持つ システムでメモリ範囲から除外されていることを前提にしています。 このようなボードを動かす方法はあります。 たとえば、15MB-16MB の範囲でメモリホールをそのままにする BIOS オプションが使えるなら動かせるでしょう。Linux 自身はメモリホー ルの使用をサポートしていません。 しかし、このオプションに対するパッチがありますが、[誰が作って、どこから入手 するか?です] あなたがこのオプションを試してみたいなら、利用できる TSR プログラムはたくさんあります。 UNIVBE はもっと有名で、インターネット上 にあります。

あるいは、 VESA フレームバッファドライバで動かすため、VESA 1.2 カード を可能にするカーネルパッチをダウンロードできるでしょう。たとえば、 VESA 1.2 をサポートしているちょっと古い S3 のボード(S3 Trio や S3 Virge のような)で使うパッチがあります。これらのカードについては、

ftp://<url url="ftp://ccssu.crimea.ua/pub/linux/kernel/v2.2/unofficial/s3new.diff.gz" name="ftp://ccssu.crimea.ua/pub/linux/kernel/v2.2/unofficial/s3new.diff.gz">
からパッチを入手できます。

5.2 vesafb ドライバを有効にする方法

menuconfig をお使いだと仮定して、次のような手順が必要です。

お使いのプロセッサ(インテルプラットホームで)が MTRR 類をサポートしてい るなら、これを有効にします。この機能はプロセッサとグラフィックカードの間でメモリ コピーを高速にしますが、必ずしも必要ではありません。もちろん、コンソー ルデバイスを動くようにした後で行うことができます。

重要:2.1.x カーネルでは、Code Maturity Level のメニューに入り、 the prompt for development とまたは、incomplete drivers を有効に します。2.2.x カーネルではこれはもう必要はありません。

Console Drivers メニューに入り、次の項目を有効にします:

VGA Chipset Support (テキストのみ) - vgafb - は、上記リストの一部でしたが、 批判をあびたので現在は取り除かれ、もうサポートされていません。近いうちに 削除されるでしょう。かわりに VGA Text Console (fbcon) を使います。 VGA Character/Attributes は VGA Chipset でのみ使用でき、選択する必要は ありません。

Mac variable bpp packed pixel support は有効にはなっていないのは確かで す。Linux カーネル 2.1.111 ( さらに 112)では、最初に、Advanced Low Level Drivers が選択されていたなら、自動的にこれを有効にするようです。 2.1.113 ではもうこのようにはなりません。

メモリにフォントをいれてコンパイルするオプションもありますが、これは実 際には必要ではなく、コンソールデバイスにフォントをロードすることでフォ ントを変更するため、通常は kbd-0.99 のフォントユーティリティ(フォントに ついての章を見てください)を使えます。

モジュールにしないよう確認してください。[モジュールとして組み込みが 可能かはよくわかりません。これについては教えてください。 ]

/dev にフレームバッファデバイスを作らなくてはいけません。フレームバッ ファデバイスごとにひとつ必要で、デバイスを作るために、まず mknod /dev/fb0 c 29 0 と入力します。次のひとつは 32 の倍数になり、たとえば、 /dev/fb1 を作るには、mknod /dev/fb1 c 29 32 と入力しなければいけません。 このようにして続けて8 つのフレームバッファデバイスまで作ることができま す(mknod /dev/fb7 c 29 224)。

次に、カーネルを再構築し、/etc/lilo.conf に VGA=ASK というパラメータを 加えて書き直し、lilo を走らせ、これで使いたいモードを選択できるように します。

簡単な LILO の設定例です(私のマシンで使っている例です)。

# LILO 設定ファイル
boot = /dev/hda3
delay = 30 
prompt
vga = ASK # ユーザが望むモードを入力する。
image = /vmlinuz
  root = /dev/hda3
  label = Linux
  read-only # 非-UMSDOS ファイルシステムは読みだしのみでマウントされます。

カーネルを再起動し、簡単なテストとして、VGA プロンプトで 0301 を入力し ます( 640x480 @ 256 になります)、これであなたはかわいい小さなペンギン ロゴを見ることができるはずです。

VGA プロンプトで、''0''と 3 で表す形式での数字の入力を要求されることに 注意してください。'x' ではだめです。LILO を使っているならこれは必要あ りません。

うまく動くことを確かめたなら、さまざまな VESA モード(後述)を試してもっ ともよいものに決め、lilo.conf に ''VGA=x''パラメータにハードウェアを指 示します。もっとも良いものを選んだとき、下記の表から10進の数値に相当す るものを探し、それを使い(たとえば、1280x1024 @ 256 に対しては、 ''VGA=0x307''を使います)、lilo を再起動します。それで終りです。もっと詳 しい情報に関しては、LoadLin と LILO についての HOWTO を読んでください。

注意! vesafb はデフォルトではスクロールバックバッファリングが有効で はありません。カーネルで有効にするオプションを渡す必要があります。 アクティブにするため video=vesa:ypan または video=vesa:ywrap を使いま す。この二つは同じことを違った方法で行います。ywrap は ypan よりかなり高速です が、少し怪しい VESA 2.0 グラフィックカード上では動かないかもしれません。 ypan は ywrap より遅いですがより高い互換性があります。このオプションはカー ネル2.1.116 とそれ以降のカーネルでだけ使えます。少し前のカーネルは vesafb でスクロールバッファリングを許可する能力を持っていません。

5.3 どのような VESA モードを利用できるか

お使いのシステムで使っている VESA 2.0 類似グラフィックカードの型とビデ オメモリの容量に依存します。この件は、お使いのビデオカードにとって最良 に動くモードをテストする事柄です。

次の表は、 VGA プロンプトで入力できる、または LILO プログラムで使える モード数値を示したものです。(これらの数値は表を参照するのをより簡単にして いるため、実際には0x200 が加わります。)

Colours   640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
--------+--------------------------------------------------------------
 4 bits |    ?       ?     0x302      ?        ?        ?         ?
 8 bits |  0x300   0x301   0x303    0x305    0x161    0x307     0x31C
15 bits |    ?     0x310   0x313    0x316    0x162    0x319     0x31D
16 bits |    ?     0x311   0x314    0x317    0x163    0x31A     0x31E
24 bits |    ?     0x312   0x315    0x318      ?      0x31B     0x31F
32 bits |    ?       ?       ?        ?      0x164      ?

Key: 8 bits は 256 色、15 bits は 32,768 色、16 bits は 65,536 色、24 bits は 16.8 万色、32 bits は 24 bits とほぼ同じですが、余分の 8 bits は他のことに使えます。そして、32 bit PCI/VLB/EISA バスで、完璧に適応し ます。

追加モードはカードメーカーの判断にあり、VESA 2.0で、 0x31F に定義され たモードを書いているだけです。これらの特別のモードを見つけるにはあれこ れあたらなくてはいけないかもしれません。

5.4 Matrox カードを設定するには?

Matrox のグラフィックカードを持っているなら、実際のところ vesafb は必 要ありません。かわりに matroxfb ドライバが必要です。これはお使いのカー ドの能力を著しく高めます。Matroxfb は Matrox Mystique Millennium I と II、G100 と G200 で動くでしょう。multiheaded システムもまたサポートし ています(つまり、自分のマシンに2枚の Matrox カードをつけているなら、 同じマシンで2つのディスプレイを使うことができます!) Matrox を設定す るため、次のようにする必要があります。

Matrox BIOS を更新したいなら、 http://www.matrox.com/mgaweb/drivers/ftp_bios.htmからBIOS アップグレード版をダウンロードできます。アップグレードするには DOS が 必要になることに注意してください。

Code Maturity Level メニューに入り、development and/or incomplete drivers を有効にします。[これは今後のカーネルでは変更になるかもしれま せん。そうなれば、このHOWTO は改訂されるでしょう。 ]

Console Drivers メニューに入り、次の項目を有効にします。

カーネルを再構築します。それから Matroxfb デバイスを有効にするため lilo.conf ファイルを修正する必要があります。もっとも速くて簡単な方法は 私のものを再利用することです。

# LILO configuration file
boot = /dev/hda3
delay = 30 
prompt
vga = 792    # You need to do this so it boots up in a sane state
# Linux bootable partition config begins
image = /vmlinuz
  append = "video=matrox:vesa:440" # then switch to Matroxfb
  root = /dev/hda3
  label = Linux
  read-only # Non-UMSDOS filesystems should be mounted read-only for checking

最後に /dev にフレームバッファデバイスを作らなければいけません。フレー ムバッファデバイスごとに一つ必要で、デバイスを作るために、まず mknod /dev/fb0 c 29 0 と入力します。次のひとつは 32 の倍数になり、たとえば、 /dev/fb1 を作るには、mknod /dev/fb1 c 29 32 と入力しなければいけません。 このようにして続いて、8 番目のフレームバッファデバイスまで作れます (mknod /dev/fb7 c 29 224)。

これでいいはずです![注意:どなたかこの multiheaded support をお使 いなら、できるだけ早く私に連絡してください。私はその件について書くため に (情報がほしいため) 話したいのです。]

5.5 Permedia カードを設定するには?

Permedia カードは vesafb ドライバでは使うことはできませんが、幸いに、 Permedia フレームバッファドライバがあります。menuconfig をお使いなら、 次のように行います。

Code Maturity Level メニューに入り、development and/or incomplete drivers [これは将来のカーネルでは変更されるかもしれません。そうなった ら、この HOWTO は改訂されるでしょう。]

Console Drivers メニューに入り、次の項目を選択します。

カーネルを再構築します。それから pm2fb デバイスを有効にするため、 lilo.conf ファイルを修正しなければいけません。より速く簡単にするなら、次 に示したものを使ってください。

# LILO configuration file
boot = /dev/hda3
delay = 30 
prompt
vga = 792    # You need to do this so it boots up in a sane state
# Linux bootable partition config begins
image = /vmlinuz
  append = "video=pm2fb:mode:1024x768-75,font:SUN12x22,ypan" # then switch to pm2fb
  root = /dev/hda3
  label = Linux
  read-only # Non-UMSDOS filesystems should be mounted read-only for checking

''pm2fb:mode:1024x768-75,font:SUN12x22,ypan''の行は、75Hz で 1024x768 モード、scrollback サポートに対する ypan を含む SUN12x22 フォント(それ を選択しているなら)を選択しているのを示します。お望みならモードを選択 してもよいでしょう。

最後に、 /dev でフレームバッファデバイスを作らなければいけません。フレー ムバッファデバイスごとにひとつ必要ですから、最初のひとつを作るのに、 mknod /dev/fb0 c 29 0 と入力するべきです。次のものは、32 の倍数で、た とえば、/dev/fb1 を作るには、mknod /dev/fb1 c 29 32 と入力しなければい けません。そのように続けて、8 番目のフレームバッファデバイスを作ります (mknod /dev/fb7 c 29 224)。

Permedia のフレームバッファドライバのその他の仕様についての詳細情報は お使いのブラウザで次のところで見てください:

<htmlurl
url="http://www.cs.unibo.it/~nardinoc/pm2fb/index.html"
name="http://www.cs.unibo.it/~nardinoc/pm2fb/index.html">

video=pm2fb:[option[,option[,option...]]]

option の場所には次のどれかひとつを使います。

5.6 ATI カードを設定するには?

[注意:私は ATI のカードを持っていませんので、テストはしていません。 この情報は、また聞き、またはうわさのみの情報です。間違っていたり、 ご意見があれば、どうぞ気軽にご訂正をお送りください。 ]

ATI カードは vesafb ドライバで使えますが、そのカードがどの程度腐って いるかによって問題にぶつかるかもしれませんし、あるいは問題なしに いけるかもしれません。menuconfig をお使いなら、次のように行ってくださ い。

Code Maturity Level メニューに入り、prompt for development and/or incomplete drivers を有効にします[これは将来のカーネルで変更になるかも しれません。そうなったとき、この HOWTO は更新されるでしょう。]

コンソールドライバのメニューにはいり、次の項目を選択してください。

カーネルを再構築します。それから、atyfb デバイスを有効にするため、お使 いのlilo.conf ファイルを修正しなければいけません。手早く簡単にするには 次のものを利用しましょう。

# LILO configuration file
boot = /dev/hda3
delay = 30
prompt
vga = 792    # You need to do this so it boots up in a sane state
# Linux bootable partition config begins
image = /vmlinuz
  append = "video=atyfb:mode:1024x768,font:SUN12x22"
  root = /dev/hda3
  label = Linux
  read-only # Non-UMSDOS filesystems should be mounted read-only for checking

''atyfb:mode:1024x768,font:SUN12x22'' 行は、1024x768 モードを選択して いることを示します。

最後に、 /dev でフレームバッファデバイスを作らなければいけません。フレー ムバッファデバイスごとにひとつ必要ですから、最初のひとつを作るのに、 mknod /dev/fb0 c 29 0 と入力するべきです。次のものは、32 の倍数で、た とえば、/dev/fb1 を作るには、mknod /dev/fb1 c 29 32 と入力しなければい けません。そのように続けて、8 番目のフレームバッファデバイスを作ります (mknod /dev/fb7 c 29 224)。

video=atyfb:[option[,option[,option...]]]

オプションの場所には次のどれかひとつを使います。

5.7 どのグラフィックカードがVESA 2.0 類似のものか

このリストは vesafb デバイスで動くことがわかっているグラフィックカードです。

このリストはシステムのマザーボードにオンボードチップセットになっています。

このリストは vesafb デバイスでは動かないグラフィックカードをまとめたものです。

5.8 vesafb をモジュールにできますか。

分かっている限り、vesafb はモジュールにすることはできません。 しかしながら将来のある時点で、vesafb の開発者がモジュール化のためソース を修正する判断を行う可能性はあります。たとえモジュールにできても、 起動時に vesafb が modprobed モジュールをロードするまでディスプレイ に何も出力されないでしょう。起動時に問題がでる場合があ るので、カーネルのなかに残す方がずっと賢いのかもしれません。

5.9 カーソルを修正する方法は?

[VGA-softcursor.txt からの引用 - Martin Mares に感謝 ]

現在、Linux はカーソル形状を変更できます。通常、ハードウェアカーソルの サイズを設定できます(そしてこれらのあまり性能のよくない Trident カード にはいやなバグを持っているものがあります。 drivers/char/ にある vga.c のなかの #define TRIDENT_GLITCH を見てください。) システムの設定で ''Software generated cursor''を有効にできる場合、ちょっとした新手のトリックを使え ます。カーソルを点滅しない赤い塊のように見せることができ、文字の背景を 反転させることができ、文字を透過あるいはハイライトにもでき、もとのハー ドウェアカーソルが可視、または不可視のどちらかの選択もまだ残っています。 私がまだ考えたことがないようなその他の操作があるかもしれません。

カーソルの形状は

<ESC>[?1;2;3c
エスケープシーケンスで制御 できます。1、2 そして 3 は次に示すパラメータになります。どれも使わない なら、デフォルトの 0 になります。

パラメータ 1 は、カーソルのサイズ 16 まで、を明示します(0=デフォルト、 1=透明、2=下線状、..., 8=ブロック状)、ソフトウェアカーソルが使いたいな ら、 32 を使わないといけません。背景の色は 64 を使い、いつも変更して、 前面の色と同じ色を背景にしたくないなら 64 にします。。Highlight は最後 の二つのフラグを無視します。

2番目のパラメータは変更したい文字属性のビットを選択します(このパラメー タの値を単純に合計して)。標準の VGA 上で、上位の 4 つのビットは背景を示 し、下位の 4 つのビットは前面になります。両方のグループで、下位の 3 ビット が色を決め(コンソールで使われる通常のカラーコードのように)、そして最も 重要なものがハイライトになります(あるいはときどきは点滅状態になります。 これはお使いの VGA の設定に依存します。)

第3パラメータは設定したい文字属性ビットからなります。設定するビットは ビットをトグルする前に置けば、マスクの設定とマスクトグルの両方を含んで ビットを簡単に消去できます。

アンダーラインを普通に点滅させるには、次のようにします。: echo -e '\033[?2c' 領域を点滅させるには、次のようにします。: echo -e '\033[?6c' 領域外を点滅させるには、次のようにします。: echo -e '\033[?17;0;64c'


次のページ 前のページ 目次へ