/dev/fb*
既に説明したように、フレームバッファデバイスは /dev/mem
のよ
うなメモリデバイスであり、これと同じ機能を持っています。読み書きや、ど
こかの位置をシークすること、mmap()
すること(これが主な使用方
法)ができます。唯一の違いは、特殊ファイルに現われるメモリは,全てのメ
モリを表しているのではなく、何らかのビデオハードウェアのフレームバッファ
を意味していることです。
/dev/fb*
に対して使うことができる ioctl がいくつかあります。
これを使って、ハードウェアに関する情報をたくさん問い合わせることや設定
することができます。カラーマップ処理も ioctl 経由で行います。ヘッダ
<linux/fb.h>
を見れば、どんな ioctl があって、どんな構
造体が使われるのかという詳細がわかります。そこで、ここでは概要だけを簡
単に説明することにします:
EINVAL
を返し
ます)。
以上のような抽象化のおかげで、アプリケーションプログラムを実装するの も移植するのも楽になるわけです。例えば、X サーバは /dev/fb* を使っ て完全に動作するので、具体的なハードウェアの色レジスタがどのように構成 されているか等を知る必要がありません。XF68_FBDev はビットマップを 使用し、アクセラレーションの無いビデオハードウェア用の汎用の X サーバ です。アプリケーションプログラムに組み込まなければならないのは、画面の 構成(ビットプレーン、まとまったピクセル等)だけです。なぜなら、アプリケー ションは直接フレームバッファのイメージデータを操作するからです。
将来的には、グラフィックスカード等のフレームバッファドライバをカーネル モジュールとして実装し、実行時にロードすることが考えられています。この ようなドライバは、ただ register_framebuffer() を呼び出し、何らかの機能 を提供するだけでよくなります。このようなドライバを独立に作成・配布すれ ば、カーネルがトラブルに巻き込まれることも少ないでしょう…。