「Uvesafb」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(他言語へのリンクを修正)
 
(2人の利用者による、間の7版が非表示)
2行目: 2行目:
 
[[Category:視覚効果]]
 
[[Category:視覚効果]]
 
[[en:Uvesafb]]
 
[[en:Uvesafb]]
[[it:Uvesafb]]
 
 
[[zh-hans:Uvesafb]]
 
[[zh-hans:Uvesafb]]
 
{{Related articles start}}
 
{{Related articles start}}
11行目: 10行目:
 
他のフレームバッファドライバーと違って、uvesafb は v86d と呼ばれるユーザースペースの仮想化デーモンを必要とします。x86 の上で x86 のコードをエミュレートするのは馬鹿げているようにも見えますが、他のアーキテクチャでフレームバッファコードを使用したいという場合に大事になります (特に x86 以外のアーキテクチャ)。カーネル 2.6.24 では新しいフレームバッファドライバーが追加されました。標準の vesafb よりも多くの機能が存在します:
 
他のフレームバッファドライバーと違って、uvesafb は v86d と呼ばれるユーザースペースの仮想化デーモンを必要とします。x86 の上で x86 のコードをエミュレートするのは馬鹿げているようにも見えますが、他のアーキテクチャでフレームバッファコードを使用したいという場合に大事になります (特に x86 以外のアーキテクチャ)。カーネル 2.6.24 では新しいフレームバッファドライバーが追加されました。標準の vesafb よりも多くの機能が存在します:
 
# 遅延時間後の正しいブランクとハードウェアの復帰
 
# 遅延時間後の正しいブランクとハードウェアの復帰
# システム BIOS のようにカスタム解像度をサポート
+
# システム BIOS のようにカスタム解像度をサポート
 
vesafb と同じ数だけのハードウェアをサポートします。
 
vesafb と同じ数だけのハードウェアをサポートします。
   
 
== インストール ==
 
== インストール ==
   
[[AUR]] から {{aur|v86d}} を[[インストール]]してください。
+
[[AUR]] から {{aur|uvesafb-dkms}} パッケージ [[インストール]] してください。
   
== システムの準備 ==
+
== 設定 ==
   
 
フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。
 
フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。
27行目: 26行目:
 
上記のコマンドで何も返ってこないようにする必要があります。{{ic|1=vga=}} オプションを記述している場合は、削除してください。
 
上記のコマンドで何も返ってこないようにする必要があります。{{ic|1=vga=}} オプションを記述している場合は、削除してください。
   
=== GRUB ===
+
=== ブートマネージャー ===
{{note|This might not work.}}
 
まず {{ic|/etc/default/grub}} を編集して {{ic|1=GRUB_GFXPAYLOAD_LINUX=keep}} 行をコメントアウトしてください。
 
   
  +
==== GRUB ====
そして標準のスクリプトを使って {{ic|grub.cfg}} を再生成します:
 
   
  +
まず {{ic|/etc/default/grub}} を編集して {{ic|1=GRUB_GFXPAYLOAD_LINUX=keep}} 行をコメントアウトし
# grub-mkconfig -o /boot/grub/grub.cfg
 
   
  +
[[GRUB#メイン設定ファイルの生成|メイン設定のファイルを再生成します。]]
=== GRUB legacy ===
 
  +
  +
==== GRUB legacy ====
   
 
uvesafb が正しく動作するように {{ic|/boot/grub/menu.lst}} の kernel 行から {{ic|vga<nowiki>=</nowiki>xxx}} という記述を全て削除してください。
 
uvesafb が正しく動作するように {{ic|/boot/grub/menu.lst}} の kernel 行から {{ic|vga<nowiki>=</nowiki>xxx}} という記述を全て削除してください。
   
=== Systemd ===
+
=== mkinitcpio フック ===
   
systemd を使っている場合、v86d フックを {{ic|/etc/mkinitcpio.conf}} の HOOKS に追加します。これ uvesafb が起動時に動くようになります。
+
v86d フックを {{ic|/etc/mkinitcpio.conf}} の HOOKS に追加します。これにより、ブート時に uvesafb が引き継ぐことができます。
 
 
 
HOOKS="base udev v86d ..."
 
HOOKS="base udev v86d ..."
 
== uvesafb の設定 ==
 
   
 
=== 解像度の定義 ===
 
=== 解像度の定義 ===
51行目: 48行目:
 
uvesafb の設定は {{ic|/usr/lib/modprobe.d/uvesafb.conf}} で定義します:
 
uvesafb の設定は {{ic|/usr/lib/modprobe.d/uvesafb.conf}} で定義します:
   
  +
{{ic|mode_option}} のドキュメントは [https://docs.kernel.org/fb/modedb.html] にあります。
# This file sets the parameters for uvesafb module.
 
# The following format should be used:
 
# options uvesafb mode_option=<xres>x<yres>[-<bpp>][@<refresh>] scroll=<ywrap|ypan|redraw> ...
 
#
 
# For more details see:
 
# https://www.kernel.org/doc/Documentation/fb/uvesafb.txt
 
#
 
options uvesafb mode_option=1280x800-32 scroll=ywrap
 
 
{{ic|mode_option}} のドキュメントは [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/fb/modedb.txt linux.git/tree/Documentation/fb/modedb.txt] にあります。
 
   
 
パッケージが更新されたときにカスタマイズした設定が上書きされないように、ファイルを {{ic|/etc/modprobe.d/uvesafb.conf}} にコピーしてください:
 
パッケージが更新されたときにカスタマイズした設定が上書きされないように、ファイルを {{ic|/etc/modprobe.d/uvesafb.conf}} にコピーしてください:
70行目: 58行目:
 
FILES="/etc/modprobe.d/uvesafb.conf"
 
FILES="/etc/modprobe.d/uvesafb.conf"
   
変更を適用するにはカーネルの ''initramfs'' イメージ再生成する必要があります。
+
変更を有効にするにはinitramfs を[[mkinitcpio#イメージ作成とアクティベーション|再生成]] し、システムを再起動します。
 
# mkinitcpio -p linux
 
 
システムを再起動して変更が適用されたか確認してください。
 
   
 
=== 解像度の最適化 ===
 
=== 解像度の最適化 ===
92行目: 76行目:
 
$ cat /sys/class/graphics/fb0/virtual_size
 
$ cat /sys/class/graphics/fb0/virtual_size
   
== Uvesafb をカーネルに組み込む ==
+
== カーネルモジュールパラメータ ==
   
分でカーネルをコンパイルする場合、カーネルに uvesafb を組み込ん {{ic|/etc/rc.local}} などから v86d を実行することできます。この場合、オプションは {{ic|1=video=uvesafb:<options>}} という形式で[[カーネルパラメータ]]として指定しま。下で書かれているように uvesafb と 915resolution を組み合わせるときはこの方法を使うことできないので注意してください
+
カーネルをコンパイルする場合uvesafb をカーネルにコンパイルし、後で v86d を実行することできます。この場合、オプションは {{ic|1=video=uvesafb:''options''}} 形式で [[カーネルパラメータ]] としてすことできます
 
== Uvesafb と 915resolution ==
 
 
以下では、より複雑なシナリオについて説明します。ワイドスクリーンラップトップ用の多くのインテルビデオチップセットには、バグのあるBIOSが搭載されていることが知られています。これは、ワイドスクリーンのメインのネイティブ解像度をサポートしていません。このため、ブート時にBIOSにパッチを適用し、Xサーバーがワイドスクリーンの解像度を使用できるようにするために、915resolutionが作成されました。今日、Xサーバーは915resolutionの助けなしでこれを行うことができます。ただし、915resolutionをuvesafbと組み合わせると、Xを起動することなく、ワイドスクリーンフレームバッファーを取得できます。この場合、915resolutionを実行した後でuvesafbをロードして、uvesafbが適切な解像度に頼れるようにする必要があります。
 
 
=== 915resolution-static ===
 
 
このシナリオでは、915解像度を静的にコンパイルする必要があります(initramfsに置かれるので、外部ライブラリにリンクすることはできません。)。したがって、 [community] リポジトリで915 resolutionパッケージを使用することはできません。代わりに、AURで {{AUR|915resolution-static}}{{Broken package link|{{aur-mirror|915resolution-static}}}} {{aur-mirror | 915resolution-static}}}}を探してください。 これは915解像度を静的にコンパイルし、915解像度フックを提供しますので、uvesafbをロードする前に915解像度を実行して、パッチされた解像度を得ることができます。makepkgと[[pacman]]を使って915 resolution-staticをインストールしてください。
 
 
=== 解像度 ===
 
 
交換するBIOSモードと取得する解像度を定義するには、915resolutionフックを編集する必要があります。あなたは915resolutionのすべてのオプションについての情報を得ることができます。
 
 
$ 915resolution -h
 
 
{{ic|/lib/initcpio/hooks/915resolution}} を編集して915resolutionのオプションを変更します。
 
 
run_hook ()
 
{
 
msg -n ":: Patching the VBIOS..."
 
/usr/sbin/915resolution 5c 1280 800
 
msg "done."
 
}
 
 
デフォルトとして、5cは、置き換えるBIOSモードのコードです。次のコマンドを使用して、使用可能なBIOSビデオモードのリストを取得できます {{ic|915resolution -l}}
 
{{Note|915resolutionはそれを新しいユーザー定義モードに置き換えるので、(フレームバッファーでもXでも)不要なモードのコードを選択する必要があります。上記の例では、{{ic|1280 800}} が新しい望ましい解像度です。}}
 
 
=== HOOKS ===
 
 
915resolutionフックを追加し、その後、{{ic | /etc/mkinitcpio.conf}}のHOOKSにv86dフックを追加します。keymap、resume from suspension、をfilesystemのフックの前に置きます。
 
HOOKS="base udev 915resolution v86d ..."
 
 
次に、mkinitcpioを使用してinitramfsを再生成する必要があります(次のコマンドを設定に合わせて調整してください)
 
 
mkinitcpio -p linux
 
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
137行目: 86行目:
 
{{Ic|vga<nowiki>=</nowiki>xxx}} カーネルパラメータを削除するのを忘れてないか確認してください -- この設定が残っていると UVESA フレームバッファが標準の VESA フレームバッファで上書きされてしまいます。
 
{{Ic|vga<nowiki>=</nowiki>xxx}} カーネルパラメータを削除するのを忘れてないか確認してください -- この設定が残っていると UVESA フレームバッファが標準の VESA フレームバッファで上書きされてしまいます。
   
もしくは {{ic|1=video=vesa:off vga=normal}} をカーネルコマンドラインに追加してください。
+
もしくは {{ic|1=video=vesa:off vga=normal}} を [[カーネルコマンドライン]] に追加してみてください。
 
=== Error: "pci_root PNP0A08:00 address space collision + Uvesafb cannot reserve memory" ===
 
 
これは2.6.34-ARCHカーネルを搭載したAcer Aspire One 751hで発生します。他のシステムでも発生するかどうかは不明です。別のフレームバッファーがuvesafbのセットアップに干渉しない場合でも、uvesafbは必要なメモリー領域を予約できません。
 
 
この問題は、ブートローダーの設定でカーネルパラメータに以下を追加することで修正できます。
 
 
pci=nocrs
 
   
 
== 参照 ==
 
== 参照 ==

2023年10月28日 (土) 01:52時点における最新版

関連記事

他のフレームバッファドライバーと違って、uvesafb は v86d と呼ばれるユーザースペースの仮想化デーモンを必要とします。x86 の上で x86 のコードをエミュレートするのは馬鹿げているようにも見えますが、他のアーキテクチャでフレームバッファコードを使用したいという場合に大事になります (特に x86 以外のアーキテクチャ)。カーネル 2.6.24 では新しいフレームバッファドライバーが追加されました。標準の vesafb よりも多くの機能が存在します:

  1. 遅延時間後の正しいブランクとハードウェアの復帰
  2. システム BIOS のようにカスタム解像度をサポート

vesafb と同じ数だけのハードウェアをサポートします。

インストール

AUR から uvesafb-dkmsAUR パッケージを インストール してください。

設定

フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。

$ grep vga /proc/cmdline
$ grep -ir vga /etc/modprobe.d/

上記のコマンドで何も返ってこないようにする必要があります。vga= オプションを記述している場合は、削除してください。

ブートマネージャー

GRUB

まず /etc/default/grub を編集して GRUB_GFXPAYLOAD_LINUX=keep 行をコメントアウトし

メイン設定のファイルを再生成します。

GRUB legacy

uvesafb が正しく動作するように /boot/grub/menu.lst の kernel 行から vga=xxx という記述を全て削除してください。

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 の FILES セクションのエントリに設定ファイルを追加します:

FILES="/etc/modprobe.d/uvesafb.conf"

変更を有効にするには、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カーネルコマンドライン に追加してみてください。

参照