什么是 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 不够用。如果出现问题,您将收到 “错误的模式号” 消息。
注意:LILO 不能处理十六进制,要直接使用 “vga=mode-number” 引导,您必须将数字转换为十进制。
注意:如果将 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
如果您在 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>