Uvesafb
与其他 framebuffer 驱动程序相比,uvesafb 需要一个用户空间虚拟化守护进程,称为 v86dAUR。在一个 x86 架构上模拟 x86 代码可能看起来很愚蠢,但如果想要在其他架构(特别是非 x86 架构)上使用 framebuffer 代码,这非常重要。它在内核 2.6.24 中添加,并且比标准的 vesafb 具有更多功能,包括
- 延迟后正确的屏幕关闭和硬件挂起
- 支持系统 BIOS 中的自定义分辨率。
它应该支持与 vesafb 一样多的硬件。
安装
安装 uvesafb-dkmsAUR 软件包。
配置
从引导加载器配置中删除任何与 framebuffer 相关的内核参数,以禁用旧的 vesafb framebuffer 的加载。以下命令应返回无结果
$ 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
。
检查当前分辨率
可以使用以下任一命令来显示当前 framebuffer 分辨率,作为检查设置是否生效的健全性检查
$ cat /sys/devices/virtual/graphics/fbcon/subsystem/fb0/virtual_size
$ cat /sys/class/graphics/fb0/virtual_size
内核模块参数
如果你编译自己的内核,那么你也可以将 uvesafb 编译到内核中,并在之后运行 v86d。在这种情况下,选项可以作为内核参数以 video=uvesafb:options
格式传递。
故障排除
Uvesafb 无法预留内存
检查你是否忘记删除任何 vga=
内核参数 - 这会将 UVESA framebuffer 覆盖为标准的 VESA framebuffer。
尝试将 video=vesa:off vga=normal
添加到内核命令行。