「Uvesafb」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→GRUB: {{note|This might not work.}} を削除) |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
||
(2人の利用者による、間の11版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:グラフィック]] |
+ | [[Category:グラフィックス]] |
[[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| |
+ | [[AUR]] から {{aur|uvesafb-dkms}} パッケージを [[インストール]] してください。 |
− | == |
+ | == 設定 == |
フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。 |
フレームバッファ関連のカーネルブートパラメータは全てブートローダーの設定から削除して vesafb フレームバッファがロードされないようにしてください。 |
||
27行目: | 26行目: | ||
上記のコマンドで何も返ってこないようにする必要があります。{{ic|1=vga=}} オプションを記述している場合は、削除してください。 |
上記のコマンドで何も返ってこないようにする必要があります。{{ic|1=vga=}} オプションを記述している場合は、削除してください。 |
||
− | === |
+ | === mkinitcpio フック === |
+ | v86d フックを {{ic|/etc/mkinitcpio.conf}} の HOOKS に追加します。これにより、ブート時に uvesafb が引き継ぐことができます。 |
||
− | まず {{ic|/etc/default/grub}} を編集して {{ic|1=GRUB_GFXPAYLOAD_LINUX=keep}} 行をコメントアウトしてください。 |
||
− | |||
− | そして標準のスクリプトを使って {{ic|grub.cfg}} を再生成します: |
||
− | |||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | === GRUB legacy === |
||
− | |||
− | uvesafb が正しく動作するように {{ic|/boot/grub/menu.lst}} の kernel 行から {{ic|vga<nowiki>=</nowiki>xxx}} という記述を全て削除してください。 |
||
− | |||
− | === Systemd === |
||
− | |||
− | systemd を使っている場合、v86d フックを {{ic|/etc/mkinitcpio.conf}} の HOOKS に追加します。これで uvesafb が起動時に動くようになります。 |
||
HOOKS="base udev v86d ..." |
HOOKS="base udev v86d ..." |
||
− | |||
− | == uvesafb の設定 == |
||
=== 解像度の定義 === |
=== 解像度の定義 === |
||
51行目: | 36行目: | ||
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}} にコピーしてください: |
||
66行目: | 42行目: | ||
# cp /usr/lib/modprobe.d/uvesafb.conf /etc/modprobe.d/uvesafb.conf |
# cp /usr/lib/modprobe.d/uvesafb.conf /etc/modprobe.d/uvesafb.conf |
||
− | そして {{ic|/etc/mkinitcpio.conf}} の |
+ | そして {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|modconf}} が含まれていることを確認してください。 |
+ | 変更を有効にするには、initramfs を[[mkinitcpio#イメージ作成とアクティベーション|再生成]] し、システムを再起動します。 |
||
− | FILES="/etc/modprobe.d/uvesafb.conf" |
||
− | |||
− | 変更を適用するにはカーネルの ''initramfs'' イメージを再生成する必要があります。 |
||
− | |||
− | # mkinitcpio -p linux |
||
− | |||
− | システムを再起動して変更が適用されたか確認してください。 |
||
=== 解像度の最適化 === |
=== 解像度の最適化 === |
||
92行目: | 62行目: | ||
$ cat /sys/class/graphics/fb0/virtual_size |
$ cat /sys/class/graphics/fb0/virtual_size |
||
− | == |
+ | == カーネルモジュールパラメータ == |
− | 自 |
+ | 独自のカーネルをコンパイルする場合は、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行目: | 72行目: | ||
{{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 |
||
== 参照 == |
== 参照 == |
||
152行目: | 79行目: | ||
* [http://dev.gentoo.org/~spock/projects/uvesafb Gentoo の uvesafb ページ] |
* [http://dev.gentoo.org/~spock/projects/uvesafb Gentoo の uvesafb ページ] |
||
* [http://infosnews.5cz.de/VESA_BIOS_Extensions.html#VBE_mode_numbers VESA mode numbers] |
* [http://infosnews.5cz.de/VESA_BIOS_Extensions.html#VBE_mode_numbers VESA mode numbers] |
||
+ | |||
+ | {{TranslationStatus|Uvesafb|2024-05-10|804015}} |
2024年9月3日 (火) 22:41時点における最新版
他のフレームバッファドライバーと違って、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
を カーネルコマンドライン に追加してみてください。