FreeBSD VESA高分辨率控制台支持

FreeBSD VESA高分辨率控制台支持

介绍

VESA 高分辨率控制台是使用显卡提供的 VESA 接口来改善控制台显示分辨率的一项功能。例如,在笔记本上可以使用 1440×900 这样的分辨率,从而提供更好的显示效果。

早期版本的 FreeBSD 中的 VESA 支持只适用于 i386 平台。从 FreeBSD 8.1-RELEASE 开始, FreeBSD 在 amd64 和 i386 平台上都可以支持高分辨率控制台了。

内核配置

通常所说的高分辨率控制台实际上是使用 VESA 的图形模式。这种模式下内核需要自行“画”出每一个字符,而不是像在文本模式那样直接在显示缓冲区中写入字符的颜色和ASCII码。为了让内核具有绘制字符的能力,需要在配置内核时加入下面的配置:

options         SC_PIXEL_MODE

此外,可以将 VESA 支持直接静态联编进内核,以减少启动时间:

options         X86BIOS
device          vesa

引导加载器配置

FreeBSD 默认的传统 VESA 高分辨率模式是 800×600,不过在现时的显示器上,这个分辨率可能仍然偏低。使用下面的命令可以获得本机支持的显示模式:

vidcontrol -i mode < /dev/ttyv0

其输出类似下面这样:

mode#     flags   type    size       font      window      linear buffer
——————————————————————————
24 (0x018) 0x00000001 T 80×25           8×16  0xb8000 32k 32k 0x00000000 32k
30 (0x01e) 0x00000001 T 80×50           8×8   0xb8000 32k 32k 0x00000000 32k
32 (0x020) 0x00000001 T 80×30           8×16  0xb8000 32k 32k 0x00000000 32k
34 (0x022) 0x00000001 T 80×60           8×8   0xb8000 32k 32k 0x00000000 32k
256 (0x100) 0x0000001f G 640x400x8 1     8×16  0xa0000 64k 64k 0xf3000000 250k
257 (0x101) 0x0000001f G 640x480x8 1     8×16  0xa0000 64k 64k 0xf3000000 300k
258 (0x102) 0x0000001b G 800x600x4 4     8×16  0xa0000 64k 64k 0x00000000 234k
259 (0x103) 0x0000001f G 800x600x8 1     8×16  0xa0000 64k 64k 0xf3000000 468k
260 (0x104) 0x0000001b G 1024x768x4 4    8×16  0xa0000 64k 64k 0x00000000 384k
261 (0x105) 0x0000001f G 1024x768x8 1    8×16  0xa0000 64k 64k 0xf3000000 768k
270 (0x10e) 0x0000001f G 320x200x16 1    8×8   0xa0000 64k 64k 0xf3000000 125k
271 (0x10f) 0x0000001f G 320x200x32 1    8×8   0xa0000 64k 64k 0xf3000000 250k
273 (0x111) 0x0000001f G 640x480x16 1    8×16  0xa0000 64k 64k 0xf3000000 600k
274 (0x112) 0x0000001f G 640x480x32 1    8×16  0xa0000 64k 64k 0xf3000000 1200k
276 (0x114) 0x0000001f G 800x600x16 1    8×16  0xa0000 64k 64k 0xf3000000 937k
277 (0x115) 0x0000001f G 800x600x32 1    8×16  0xa0000 64k 64k 0xf3000000 1875k
279 (0x117) 0x0000001f G 1024x768x16 1   8×16  0xa0000 64k 64k 0xf3000000 1536k
280 (0x118) 0x0000001f G 1024x768x32 1   8×16  0xa0000 64k 64k 0xf3000000 3072k
304 (0x130) 0x0000001f G 320x200x8 1     8×8   0xa0000 64k 64k 0xf3000000 62k
305 (0x131) 0x0000001f G 320x400x8 1     8×16  0xa0000 64k 64k 0xf3000000 125k
306 (0x132) 0x0000001f G 320x400x16 1    8×16  0xa0000 64k 64k 0xf3000000 250k
307 (0x133) 0x0000001f G 320x400x32 1    8×16  0xa0000 64k 64k 0xf3000000 500k
308 (0x134) 0x0000001f G 320x240x8 1     8×8   0xa0000 64k 64k 0xf3000000 75k
309 (0x135) 0x0000001f G 320x240x16 1    8×8   0xa0000 64k 64k 0xf3000000 150k
310 (0x136) 0x0000001f G 320x240x32 1    8×8   0xa0000 64k 64k 0xf3000000 300k
317 (0x13d) 0x0000001f G 640x400x16 1    8×16  0xa0000 64k 64k 0xf3000000 500k
318 (0x13e) 0x0000001f G 640x400x32 1    8×16  0xa0000 64k 64k 0xf3000000 1000k
352 (0x160) 0x0000001f G 1280x800x8 1    8×16  0xa0000 64k 64k 0xf3000000 1000k
353 (0x161) 0x0000001f G 1280x800x32 1   8×16  0xa0000 64k 64k 0xf3000000 4000k
354 (0x162) 0x0000001f G 768x480x8 1     8×16  0xa0000 64k 64k 0xf3000000 360k
356 (0x164) 0x0000001f G 1440x900x8 1    8×16  0xa0000 64k 64k 0xf3000000 1265k
357 (0x165) 0x0000001f G 1440x900x32 1   8×16  0xa0000 64k 64k 0xf3000000 5062k
379 (0x17b) 0x0000001f G 1280x720x32 1   8×16  0xa0000 64k 64k 0xf3000000 3600k

最左边一列是显示模式的代码。一般而言我们希望选择分辨率最高的显示模式中颜色数最少的一种模式,在这个例子中,是 1440x900x8 (256色),代码为 356。我们可以在 /boot/loader.conf 中加入下面的配置:

hint.sc.0.flags=0x0180
hint.sc.0.vesa_mode=356

这样,系统在引导到初始化系统控制台的时候,便会自动切换显示模式了。

更多细节,请参阅 syscons(4)[URL:http://www.freebsd.org/cgi/man.cgi?query=sc&sektion=4]。

原文链接: http://wiki.freebsdchina.org/feature/v/vesa_console