什么是 vesafb?

这是一个用于 Intel 机器上的图形帧缓冲区的通用驱动程序。

其想法很简单:在启动时借助 BIOS 启用图形模式,并将其用作帧缓冲区设备 /dev/fb0,就像 m68k(和其他)端口所做的那样。

这意味着我们在启动时决定是否要在文本或图形模式下运行。稍后(在保护模式下)切换模式是不可能的;BIOS 调用仅在实模式下工作。需要 VESA BIOS 扩展版本 2.0,因为我们需要一个线性帧缓冲区。

优点

  • 它提供了一个漂亮的控制台(1024x768 分辨率下,128 列 + 48 行),无需使用微小且难以辨认的字体。

  • 您可以在 /dev/fb0 之上运行 XF68_FBDev (=> 为每个兼容 VBE 2.0 的图形卡提供非加速的 X11 支持)。

  • 最重要的是:启动徽标 :-)

缺点

  • 图形模式比文本模式慢...

如何使用它?

切换模式是使用 vga=... 启动参数完成的。有关详细信息,请阅读视频模式选择支持 2.13

您应该编译 vgacon (用于文本模式) 和 vesafb (用于图形模式)。哪个接管控制台取决于指定的模式是文本还是图形。

如果您使用 vga=ask 启动并按回车键,您得到的列表中不包含图形模式。您希望使用的模式是从 VESA 模式号派生的。以下是这些 VESA 模式号

颜色

640x480

800x600

1024x768

1280x1024

256

0x101

0x103

0x105

0x107

32k

0x110

0x113

0x116

0x119

64k

0x111

0x114

0x117

0x11A

16M

0x112

0x115

0x118

0x11B

Linux 内核的视频模式号是 VESA 模式号加上 0x200

Linux_kernel_mode_number = VESA_mode_number + 0x200

因此,内核模式号的表是

颜色

640x480

800x600

1024x768

1280x1024

256

0x301

0x303

0x305

0x307

32k

0x310

0x313

0x316

0x319

64k

0x311

0x314

0x317

0x31A

16M

0x312

0x315

0x318

0x31B

要启用其中一种模式,您必须在 lilo.conf 文件中指定 “vga=ask” 并重新运行 LILO。然后,您可以在 “vga=ask” 提示符下键入所需的模式。例如,如果您想使用 1024x768x256 色,您必须在此提示符下输入 “305”。

如果这不起作用,可能是因为您的 BIOS 不支持线性帧缓冲区,或者因为它根本不支持此模式。即使您的主板支持,也可能是 BIOS 不支持。需要 VESA BIOS 扩展 v2.0,1.2 不够用。如果出现问题,您将收到 “错误的模式号” 消息。

  1. 注意:LILO 不能处理十六进制,要直接使用 “vga=mode-number” 引导,您必须将数字转换为十进制。

  2. 注意:如果将 0x 放在数字前面,一些较新版本的 LILO 似乎可以使用这些十六进制值。

X11

XF68_FBDev 应该可以正常工作,但它是非加速的。运行另一个(加速的)X 服务器(例如 XF86_SVGA)可能会或可能无法工作。这取决于 X 服务器和图形卡。

X 服务器必须正确恢复视频模式,否则您最终会得到一个损坏的控制台(并且 vesafb 对此无能为力)。

刷新率

在引导 Linux 后,无法更改 vesafb 视频模式和/或时序。如果您对 60 Hz 的刷新率不满意,您可以选择以下选项

  • 配置并加载图形卡的 DOS 工具(如果可用)并使用 loadlin 引导 Linux。

  • 如果 vesafb 不可用,请使用本地驱动程序(matroxfb/atyfb)。如果没有可用的,请编写一个新的!

  • VBE 3.0 也可能有效。我既没有支持 VBE 3.0 的图形卡,也没有规格,所以我还没有检查过。

配置

VESA BIOS 提供了一个受保护模式接口,用于更改一些参数。vesafb 可以使用它进行调色板更改和显示平移。默认情况下它已关闭,因为它似乎不适用于某些 BIOS 版本,但有一些选项可以将其打开。

您可以使用内核命令行上的 “video=vesafb:option” 将选项传递给 vesafb。多个选项应该用逗号分隔,如下所示:“video=vesafb:ypan,inverse”

接受的选项

inverse 使用反色图

ypan

使用 VESA 保护模式接口启用显示平移。可见屏幕只是视频内存的一个窗口,控制台滚动是通过更改窗口的起始位置来完成的。

pro

  • 滚动(全屏)速度很快,因为不需要复制数据。

kontra

  • 只滚动屏幕的一部分会导致一些难看的闪烁效果(例如,启动徽标闪烁)。

ywrap

与 ypan 相同,但假设您的图形卡可以环绕视频内存(即,如果它到达视频内存的末尾,则从顶部开始读取)。比 ypan 快。

redraw

通过重绘屏幕的受影响部分来滚动,这是安全(且缓慢)的默认设置。

vgapal

使用标准 vga 寄存器进行调色板更改。这是默认设置。

pmipal

使用受保护模式接口进行调色板更改。

mtrr:n

为 vesafb 帧缓冲区设置内存类型范围寄存器,其中 n

  • 0 - 禁用(相当于 nomtrr)(默认)

  • 1 - 不可缓存

  • 2 - 写回

  • 3 - 写合并

  • 4 - 写通

如果您在 dmesg 中看到以下内容,请选择与旧类型匹配的类型。在此示例中,使用 “mtrr:2”。

...

mtrr

e0000000,8000000 的类型不匹配 old: write-back new: write-combining

...

nomtrr

禁用 mtrr

vremap:n

重映射 'n' MiB 的视频 RAM。如果为 0 或未指定,则根据视频模式重映射内存。(Antonino Daplas 的 2.5.66 补丁/想法,由 tmb@iki.fi 反转为 2.4 以提供覆盖可能性(分配比内核更多的 fb 内存))

vtotal:n

如果您的显卡视频 BIOS 错误地确定了视频 RAM 的总量,请使用此选项来覆盖 BIOS(以 MiB 为单位)。

玩得开心!

Gerd Knorr <kraxel@goldbach.in-berlin.de>

Nico Schmoigl 的次要(主要是拼写)更改 <schmoigl@rumms.uni-mannheim.de>