什么是 vesafb?

这是用于英特尔平台图形帧缓冲区的通用驱动程序。

其思路很简单:在启动时借助 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 版本不足。如果出现问题,你将收到“bad mode number”(错误的模式号)消息。

  1. 注意:LILO 无法处理十六进制,若要直接使用 “vga=mode-number” 启动,你需要将数字转换为十进制。

  2. 注意:某些较新版本的 LILO 似乎支持这些十六进制值,前提是在数字前面加上 0x。

X11

XF68_FBDev 应该可以正常工作,但它不提供硬件加速。运行其他(加速)的 X-Server,如 XF86_SVGA,可能有效也可能无效。这取决于 X-Server 和显卡。

X-Server 必须正确恢复视频模式,否则你将得到一个损坏的控制台(vesafb 对此无能为力)。

刷新率

在启动 Linux 后,无法更改 vesafb 视频模式和/或时序。如果你对 60 Hz 的刷新率不满意,可以尝试以下选项:

  • 配置并加载显卡的 DOS 工具(如果可用),然后使用 loadlin 启动 Linux。

  • 使用原生驱动(matroxfb/atyfb)而不是 vesafb。如果没有可用的,就编写一个新的!

  • VBE 3.0 也可能有效。我既没有支持 VBE 3.0 的显卡,也没有其规格,所以我还没有验证这一点。

配置

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

你可以在内核命令行上使用 “video=vesafb:option” 将选项传递给 vesafb。多个选项应以逗号分隔,例如:“video=vesafb:ypan,inverse”

接受的选项

inverse 使用反色映射

ypan

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

优点

  • 滚动(全屏)很快,因为无需复制数据。

缺点

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

ywrap

与 ypan 相同,但假设你的显卡可以环绕视频内存(即到达视频内存末尾后从顶部开始读取)。比 ypan 更快。

redraw

通过重绘屏幕受影响的部分进行滚动,这是安全(但慢)的默认方式。

vgapal

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

pmipal

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

mtrr:n

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

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

  • 1 - 不可缓存

  • 2 - 回写

  • 3 - 写合并

  • 4 - 写穿透

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

...

mtrr

e0000000,8000000 的类型不匹配 旧: write-back 新: write-combining

...

nomtrr

禁用 mtrr

vremap:n

重新映射 ‘n’ MiB 的视频 RAM。如果为 0 或未指定,则根据视频模式重新映射内存。(Antonino Daplas 在 2.5.66 版本的补丁/想法,在 2.4 版本被 tmb@iki.fi 反转,以提供覆盖可能性(分配比内核通常会分配的更多帧缓冲内存))

vtotal:n

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

玩得开心!

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

Nico Schmoigl 做了少量(主要是错别字)修改 <schmoigl@rumms.uni-mannheim.de>