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

3. プログラマから見た /dev/fb*

既に説明したように、フレームバッファデバイスは /dev/mem のよ うなメモリデバイスであり、これと同じ機能を持っています。読み書きや、ど こかの位置をシークすること、mmap() すること(これが主な使用方 法)ができます。唯一の違いは、特殊ファイルに現われるメモリは,全てのメ モリを表しているのではなく、何らかのビデオハードウェアのフレームバッファ を意味していることです。

/dev/fb* に対して使うことができる ioctl がいくつかあります。 これを使って、ハードウェアに関する情報をたくさん問い合わせることや設定 することができます。カラーマップ処理も ioctl 経由で行います。ヘッダ <linux/fb.h> を見れば、どんな ioctl があって、どんな構 造体が使われるのかという詳細がわかります。そこで、ここでは概要だけを簡 単に説明することにします:

以上のような抽象化のおかげで、アプリケーションプログラムを実装するの も移植するのも楽になるわけです。例えば、X サーバは /dev/fb* を使っ て完全に動作するので、具体的なハードウェアの色レジスタがどのように構成 されているか等を知る必要がありません。XF68_FBDev はビットマップを 使用し、アクセラレーションの無いビデオハードウェア用の汎用の X サーバ です。アプリケーションプログラムに組み込まなければならないのは、画面の 構成(ビットプレーン、まとまったピクセル等)だけです。なぜなら、アプリケー ションは直接フレームバッファのイメージデータを操作するからです。

将来的には、グラフィックスカード等のフレームバッファドライバをカーネル モジュールとして実装し、実行時にロードすることが考えられています。この ようなドライバは、ただ register_framebuffer() を呼び出し、何らかの機能 を提供するだけでよくなります。このようなドライバを独立に作成・配布すれ ば、カーネルがトラブルに巻き込まれることも少ないでしょう…。


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