Uvesafb
他のフレームバッファドライバーと違って、uvesafb は v86d と呼ばれるユーザースペースの仮想化デーモンを必要とします。x86 の上で x86 のコードをエミュレートするのは馬鹿げているようにも見えますが、他のアーキテクチャでフレームバッファコードを使用したいという場合に大事になります (特に x86 以外のアーキテクチャ)。カーネル 2.6.24 では新しいフレームバッファドライバーが追加されました。標準の vesafb よりも多くの機能が存在します:
- 遅延時間後の正しいブランクとハードウェアの復帰
- システム BIOS のようにカスタム解像度をサポート
vesafb と同じくらい多くのハードウェアをサポートします。
目次
インストール
AUR から uvesafb-dkmsAUR パッケージを インストール してください。
設定
フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。
$ grep vga /proc/cmdline $ grep -ir vga /etc/modprobe.d/
上記のコマンドで何も返ってこないようにする必要があります。vga=
オプションを記述している場合は、削除してください。
mkinitcpio フック
v86d フックを /etc/mkinitcpio.conf
の HOOKS に追加します。これにより、ブート時に uvesafb が引き継ぐことができます。
HOOKS="base udev v86d ..."
解像度の定義
uvesafb の設定は /usr/lib/modprobe.d/uvesafb.conf
で定義します:
mode_option
のドキュメントは [1] にあります。
パッケージが更新されたときにカスタマイズした設定が上書きされないように、ファイルを /etc/modprobe.d/uvesafb.conf
にコピーしてください:
# cp /usr/lib/modprobe.d/uvesafb.conf /etc/modprobe.d/uvesafb.conf
そして /etc/mkinitcpio.conf
の HOOKS
配列に modconf
が含まれていることを確認してください。
変更を有効にするには、initramfs を再生成 し、システムを再起動します。
解像度の最適化
次のコマンドを使うことで使用できる解像度を全てリストアップできます:
$ cat /sys/bus/platform/drivers/uvesafb/uvesafb.0/vbe_modes
返ってきたエントリを使って /usr/lib/modprobe.d/uvesafb.conf
を修正しましょう。
現在の解像度のチェック
以下のコマンドを使うことで現在のフレームバッファの解像度を表示できます。設定が反映されているかどうか確認するのに使ってください:
$ cat /sys/devices/virtual/graphics/fbcon/subsystem/fb0/virtual_size
$ cat /sys/class/graphics/fb0/virtual_size
カーネルモジュールパラメータ
独自のカーネルをコンパイルする場合は、uvesafb をカーネルにコンパイルし、後で v86d を実行することもできます。この場合、オプションは video=uvesafb:options
の形式で カーネルパラメータ として渡すことができます。
トラブルシューティング
Uvesafb cannot reserve memory
vga=xxx
カーネルパラメータを削除するのを忘れてないか確認してください -- この設定が残っていると UVESA フレームバッファが標準の VESA フレームバッファで上書きされてしまいます。
もしくは video=vesa:off vga=normal
を カーネルコマンドライン に追加してみてください。