用户工具

站点工具


feature:v:vesa_console

VESA高分辨率控制台支持

– delphij

介绍

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

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

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

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

需要注意的是,某些情况下可能需要选择分辨率最高且颜色数最多的模式。例如,当前显卡支持1024x768x8、1024x768x16、1024x768x32三种模式,若选择1024x768x8可能会导致以下两个问题:
1. 控制台下的某些”伪图形“界面程序(如sysinstall)配色不当而难以识别;
2. 从控制台进入X再退出后位深切换不当而导致屏幕变暗。
但如果选择1024x768x16或1024x768x32则不会出现以上问题。

更多细节,请参阅 syscons(4)

/data/vhosts/wiki-data/pages/feature/v/vesa_console.txt · 最后更改: 2011/01/22 11:26 由 alphachi