什么是 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”(错误的模式号)消息。
注意:LILO 无法处理十六进制,若要直接使用 “vga=mode-number” 启动,你需要将数字转换为十进制。
注意:某些较新版本的 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 为
如果你在 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>