什么是 matroxfb?

这是一个用于 Alpha、Intel 和 PPC 平台上的 Matrox 设备的图形帧缓冲驱动程序。

优点

  • 它提供了一个很好的大型控制台(1024x768 分辨率下,128 列 + 48 行),无需使用微小、难以辨认的字体。

  • 您可以在 /dev/fb0 之上运行 XF{68,86}_FBDev 或 XFree86 fbdev 驱动程序。

  • 最重要的是:启动徽标 :-)

缺点

  • 图形模式比文本模式慢...但是如果您使用与文本模式相同的分辨率,您应该不会注意到。

如何使用它?

模式切换使用 video=matroxfb:vesa:... 引导参数或使用 fbset 程序完成。

例如,如果您想启用 1280x1024x24bpp 的分辨率,您应该向内核传递以下命令行:“video=matroxfb:vesa:0x1BB”。

您应该编译 vgacon(如果从计算机中移除 Matrox 时启动)和 matroxfb(用于图形模式)。除非您的主显示器位于非 Matrox VBE2.0 设备上,否则不应编译 vesafb(有关详细信息,请参阅 什么是 vesafb?)。

当前支持的视频模式为(通过 vesa:... 接口,PowerMac 具有 [作为附加组件] 兼容性代码)

图形模式

bpp

640x400

640x480

768x576

800x600

960x720

4

0x12

0x102

8

0x100

0x101

0x180

0x103

0x188

15

0x110

0x181

0x113

0x189

16

0x111

0x182

0x114

0x18A

24

0x1B2

0x184

0x1B5

0x18C

32

0x112

0x183

0x115

0x18B

图形模式(续)

bpp

1024x768

1152x864

1280x1024

1408x1056

1600x1200

4

0x104

0x106

8

0x105

0x190

0x107

0x198

0x11C

15

0x116

0x191

0x119

0x199

0x11D

16

0x117

0x192

0x11A

0x19A

0x11E

24

0x1B8

0x194

0x1BB

0x19C

0x1BF

32

0x118

0x193

0x11B

0x19B

文本模式

文本

640x400

640x480

1056x344

1056x400

1056x480

8x8

0x1C0

0x108

0x10A

0x10B

0x10C

8x16

2, 3, 7

0x109

您可以输入这些数字,无论是十六进制(以 0x 开头)还是十进制 (0x100 = 256)。您还可以使用 value + 512 来实现与传递给 vesafb 的旧数字的兼容性。

未列出的数字可以通过更复杂的命令行来实现,例如,1600x1200x32bpp 可以通过 video=matroxfb:vesa:0x11C,depth:32 指定。

X11

XF{68,86}_FBDev 应该可以正常工作,但它是非加速的。在非 intel 架构上,24bpp 视频模式存在一些小故障。8、16 和 32bpp 工作正常。

运行另一个(加速的)X 服务器(如 XF86_SVGA)也可以。但是(至少)XFree 服务器在多头配置中存在很大的问题(即使在第一个头,更不用说第二个头)。运行 XFree86 4.x 加速 mga 驱动程序是可能的,但您不能启用 DRI - 如果这样做,X 桌面的分辨率和颜色深度必须与虚拟控制台的分辨率和颜色深度匹配,否则 X 将破坏加速器设置。

SVGALib

驱动程序包含 SVGALib 兼容性代码。通过为控制台选择文本模式来启用它。您可以在启动时使用视频模式 2,3,7,0x108-0x10C 或 0x1C0 来执行此操作。在运行时,fbset -depth 0 可以实现此目的。不幸的是,在 SVGALib 应用程序退出后,屏幕内容会被损坏。切换到另一个控制台然后再切换回来可以修复它。我希望这是 SVGALib 的问题而不是我的问题,但我不确定。

配置

您可以使用 video=matroxfb:option1,option2:value2,option3 将内核命令行选项传递给 matroxfb (多个选项应以逗号分隔,值与选项之间用 : 分隔)。接受的选项

mem:X

内存大小(X 可以是兆字节、千字节或字节)。由于它始终探测内存,因此您只能减少由驱动程序确定的值。默认是使用整个检测到的可用于屏幕显示的内存(即最大 8 MB)。

disabled

不加载驱动程序;您也可以使用 off,但此处也提供 disabled

enabled

加载驱动程序,如果您在 LILO 配置中有 video=matroxfb:disabled,您可以使用此选项覆盖它(您不能覆盖 off)。这是默认值。

noaccel

不使用加速引擎。它在 Alpha 上不起作用。

accel

使用加速引擎。这是默认值。

nopan

创建初始控制台时,vyres = yres,从而禁用虚拟滚动。

pan

创建初始控制台时尽可能高(vyres = memory/vxres)。这是默认值。

nopciretry

禁用 PCI 重试。某些损坏的芯片组需要它,它会自动检测 Intel 的 82437。在这种情况下,设备不符合 PCI 2.1 规范(它不保证每次事务都会成功终止或在 32 PCLK 中重试)。

pciretry

启用 PCI 重试。除了 Intel 的 82437 之外,这是默认值。

novga

禁用 VGA I/O 端口。如果 BIOS 未启用设备,则此为默认值。您不应使用此选项,某些主板在不关闭电源的情况下不会重新启动。

vga

保留 VGA I/O 端口的状态。这是默认值。如果 BIOS 没有启用 VGA I/O,则驱动程序不会启用它(在大多数情况下启用它是不安全的)。

nobios

禁用 BIOS ROM。如果 BIOS 未启用 BIOS 本身,则此为默认值。您不应使用此选项,某些主板在不关闭电源的情况下不会重新启动。

bios

保留 BIOS ROM 的状态。这是默认值。如果 BIOS 之前未启用 BIOS,则驱动程序不会启用它。

noinit

告诉驱动程序设备已初始化。如果您有 G100 和/或驱动程序无法检测到内存,您在屏幕上看到奇怪的图案等,则应使用它。BIOS 未启用的设备仍会初始化。这是默认值。

init

驱动程序初始化它知道的每个设备。

memtype

指定内存类型,表示“init”。这仅对 G200 和 G400 有效,含义如下

G200
  • 0 -> 2x128Kx32 芯片,2MB 板载,可能是 sgram

  • 1 -> 2x128Kx32 芯片,4MB 板载,可能是 sgram

  • 2 -> 2x256Kx32 芯片,4MB 板载,可能是 sgram

  • 3 -> 2x256Kx32 芯片,8MB 板载,可能是 sgram

  • 4 -> 2x512Kx16 芯片,8/16MB 板载,可能仅是 sdram

  • 5 -> 与上述相同

  • 6 -> 4x128Kx32 芯片,4MB 板载,可能是 sgram

  • 7 -> 4x128Kx32 芯片,8MB 板载,可能是 sgram

G400
  • 0 -> 2x512Kx16 SDRAM,16/32MB

  • 2x512Kx32 SGRAM,16/32MB

  • 1 -> 2x256Kx32 SGRAM,8/16MB

  • 2 -> 4x128Kx32 SGRAM,8/16MB

  • 3 -> 4x512Kx32 SDRAM,32MB

  • 4 -> 4x256Kx32 SGRAM,16/32MB

  • 5 -> 2x1Mx32 SDRAM,32MB

  • 6 -> 保留

  • 7 -> 保留

除了 memtype 参数外,您还应使用 sdram 或 sgram 参数。

nomtrr

禁用帧缓冲区上的写组合。这会降低驱动程序的速度,但如果启用了写组合,则据报道,在高负载下,GUS DMA 和 XFree 之间存在轻微的不兼容(声音丢失)。

mtrr

启用帧缓冲区上的写组合。这会大大加快视频访问速度。这是默认值。您的内核中必须启用 MTRR 支持,并且您的 CPU 必须具有 MTRR(例如,奔腾 II 具有它们)。

sgram

告诉驱动程序您拥有带有 SGRAM 内存的 Gxx0。没有 init,它不起作用。

sdram

告诉驱动程序您拥有带有 SDRAM 内存的 Gxx0。这是默认值。

inv24

更改 Millennium 和 Millennium II 上 24bpp 模式的计时参数。如果您看到字符周围有奇怪的颜色阴影,请指定此选项。

noinv24

使用标准计时。这是默认值。

inverse

反转屏幕上的颜色(用于 LCD 显示器)

noinverse

在屏幕上显示真实颜色。这是默认值。

dev:X

将驱动程序绑定到设备 X。驱动程序将设备从 0 到 N 编号,其中设备 0 是找到的第一个 已知 设备,1 是第二个,依此类推。lspci 按此顺序列出设备。默认是 每个 已知设备。

nohwcursor

禁用硬件光标(改用软件光标)。

hwcursor

启用硬件光标。这是默认设置。如果您使用非加速模式(noaccelfbset -accel false),则会使用软件光标(文本模式除外)。

noblink

禁用光标闪烁。文本模式下的光标始终闪烁(硬件限制)。

blink

启用光标闪烁。这是默认设置。

nofastfont

禁用快速字体功能。这是默认设置。

fastfont:X

启用快速字体功能。X 指定为字体数据保留的内存大小,必须 >= (字体宽度 * 字体高度 * 字体中的字符数)/8。在 Gx00 系列上速度更快,但在较旧的卡上速度较慢。

grayscale

启用灰度求和。它在 PSEUDOCOLOR 模式(文本、4bpp、8bpp)下工作。在 DIRECTCOLOR 模式下,它仅限于通过 putc/putcs 显示的字符。直接访问帧缓冲可以绘制颜色。

nograyscale

禁用灰度求和。这是默认设置。

cross4MB

启用像素线可以跨越 4MB 边界。对于非 Millennium 系列,这是默认设置。

nocross4MB

像素线不能跨越 4MB 边界。对于 Millennium I 或 II,这是默认设置,因为这些设备具有不允许这样做的硬件限制。但是,此选项与某些(如果不是所有已发布的)XF86_FBDev 版本不兼容。

dfp

启用数字平板显示接口。此选项与辅助(电视)输出不兼容 - 如果 DFP 处于活动状态,则电视输出必须处于非活动状态,反之亦然。DFP 始终使用与主(显示器)输出相同的时序。

dfp:X

使用设置 X 作为数字平板显示接口。X 是从 0 到 0xFF 的数字,每个单独位的含义在 G400 手册的 DAC 寄存器 0x1F 的描述中进行了说明。对于正常操作,您应该将所有位设置为零,最低位除外。最低位选择显示时钟的来源,是 G400 还是面板。默认值现在从硬件读取 - 因此,只有在使用 init 参数时才应指定此值。

outputs:XYZ

设置 CRTC 和输出之间的映射。每个字母的值可以是 0(表示没有 CRTC)、1 (CRTC1) 或 2 (CRTC2),第一个字母对应于主模拟输出,第二个字母对应于辅助模拟输出,第三个字母对应于 DVI 输出。对于 G400 以下或没有 DFP 的 G400 卡,默认设置为 100;对于带有 DFP 的 G400 卡,默认设置为 101;对于 G450 和 G550,默认设置为 111。您只能在第一张卡上设置映射,使用 matroxset 设置其他设备。

vesa:X

选择启动视频模式。X 是一个从 0 到 0x1FF 的数字,有关详细说明,请参见上表。如果驱动程序支持 8bpp,则默认设置为 640x480x8bpp。否则,使用第一个可用的 640x350x4bpp、640x480x15bpp、640x480x24bpp、640x480x32bpp 或 80x25 文本模式(80x25 文本模式始终可用)。

如果您对 vesa 选项选择的视频模式不满意,您可以使用以下选项对其进行修改

xres:X

水平分辨率,以像素为单位。默认值来自 vesa 选项。

yres:X

垂直分辨率,以像素行为单位。默认值来自 vesa 选项。

upper:X

上边界:VSYNC 脉冲结束和图像第一条像素行开始之间的行数。默认值来自 vesa 选项。

lower:X

下边界:图像结束和 VSYNC 脉冲开始之间的行数。默认值来自 vesa 选项。

vslen:X

VSYNC 脉冲的长度,以行为单位。默认值来自 vesa 选项。

left:X

左边界:HSYNC 脉冲结束和第一个像素之间的像素数。默认值来自 vesa 选项。

right:X

右边界:图像结束和 HSYNC 脉冲开始之间的像素数。默认值来自 vesa 选项。

hslen:X

HSYNC 脉冲的长度,以像素为单位。默认值来自 vesa 选项。

pixclock:X

点时钟,单位为皮秒 (ps)。默认值来自 vesa 选项以及 fhfv 选项。

sync:X

同步脉冲 - 位 0 反转 HSYNC 极性,位 1 反转 VSYNC 极性。如果设置了位 3(值 0x08),则生成复合同步而不是 HSYNC。如果设置了位 5(值 0x20),则启用绿色同步。请不要忘记,如果您想要绿色同步,您可能也需要复合同步。默认值取决于 vesa

depth:X

每像素位数:0=文本,4、8、15、16、24 或 32。默认值取决于 vesa

如果您了解显示器的功能,则可以指定 maxclkfhfv 的某些(或全部)值。在这种情况下,计算 pixclock,使得 pixclock <= maxclk,real_fh <= fh 和 real_fv <= fv。

maxclk:X

最大点时钟。X 可以用 MHz、kHz 或 Hz 指定。默认值为 don't care

fh:X

最大水平同步频率。X 可以用 kHz 或 Hz 指定。默认值为 don’t care

fv:X

最大垂直频率。X 必须用 Hz 指定。对于来自 vesa 的 yres <= 400 的模式,默认值为 70,对于 yres > 400 的模式,默认值为 60Hz。

限制

存在已知和未知的错误、特性和缺陷。目前有以下已知错误

  • SVGALib 在退出时不会恢复屏幕

  • 通用的 fbcon-cfbX 过程在 Alpha 上不起作用。因此,noaccel(和 cfb4 加速)驱动程序在 Alpha 上不起作用。因此,任何可以在 Alpha 上访问 /dev/fb* 的人都可以挂起机器(您应该限制对 /dev/fb* 的访问 - 任何可以访问此设备的人都可以破坏您的显示器,相信我...)。

  • 24bpp 在大端体系结构上不支持 XF-FBDev。

  • 不支持隔行扫描文本模式;这看起来像是硬件限制,但我不确定。

  • Gxx0 SGRAM/SDRAM 未自动检测到。

  • 可能还有更多...

以下缺陷

  • SVGALib 在退出时不会恢复屏幕。

  • 文本模式的 pixclock 受硬件限制为

    • G200 上为 83 MHz

    • Millennium I 上为 66 MHz

    • Millennium II 上为 60 MHz

    因为我无法访问其他设备,所以我不知道它们的具体频率。因此,驱动程序不会检查此项,并允许您设置高于此值的频率。它会在屏幕上引起火花、黑洞和其他漂亮的效果。在测试过程中,设备没有被破坏。:-)

  • 我的 Millennium G200 振荡器的频率范围为 35 MHz 到 380 MHz(它在 8bpp 时以大约 320 MHz 的点时钟工作(并更改了 mclk))。但是 Matrox 在产品表中说 VCO 限制为 50-250 MHz,所以我相信他们(也许该芯片过热,但它有一个非常大的散热器(G100 没有),所以它应该可以工作)。

  • Mystique 和 Gx00 的特殊混合视频/图形视频模式 - 2G8V16 和 G16V16 不受支持

  • 不支持颜色键控

  • Mystique 和 Gx00 的功能连接器设置为 VGA 模式(它被 BIOS 禁用)

  • 通过双头驱动程序支持 DDC(显示器检测)

  • 对输入值的一些检查并不像应该的那样严格(您可以指定 vslen=4000 等)。

  • 可能还有更多...

以下特性

  • 4bpp 仅在 Millennium I 和 Millennium II 上可用。这是硬件限制。

  • 通过 fbset 的 -rgba 选项完成 1:5:5:5 和 5:6:5 16bpp 视频模式之间的选择:“fbset -depth 16 -rgba 5,5,5” 选择 1:5:5:5,其他任何内容选择 5:6:5 模式。

  • 文本模式使用 6 位 VGA 调色板而不是 8 位调色板(262144 种颜色之一而不是 16M 种颜色之一)。这是由于 Millennium I/II 的硬件限制和 SVGALib 兼容性。

基准测试

在 1024x768、60Hz 下,重新绘制整个屏幕 1000 次所需的时间。通过 /dev/vcsa 在屏幕上绘制 6144000 个字符所需的时间(对于 32bpp,大约为 3GB 数据(正好 3000 MB);对于 16 秒内的 8x16 字体,即 187 MBps)。时间是从旧版本的驱动程序获得的,现在它们快了大约 3%,这是 P-II/350 MHz、33 MHz PCI 插槽中的 Millennium I 和 AGP 2x 插槽中的 G200 上的内核空间时间。我没有测试 vgacon

NOACCEL
      8x16                 12x22
      Millennium I  G200   Millennium I  G200
8bpp    16.42         9.54   12.33         9.13
16bpp   21.00        15.70   19.11        15.02
24bpp   36.66        36.66   35.00        35.00
32bpp   35.00        30.00   33.85        28.66

ACCEL, nofastfont
      8x16                 12x22                6x11
      Millennium I  G200   Millennium I  G200   Millennium I  G200
8bpp     7.79         7.24   13.55         7.78   30.00        21.01
16bpp    9.13         7.78   16.16         7.78   30.00        21.01
24bpp   14.17        10.72   18.69        10.24   34.99        21.01
32bpp   16.15      16.16   18.73        13.09   34.99        21.01

ACCEL, fastfont
      8x16                 12x22                6x11
      Millennium I  G200   Millennium I  G200   Millennium I  G200
8bpp     8.41         6.01    6.54         4.37   16.00        10.51
16bpp    9.54         9.12    8.76         6.17   17.52        14.01
24bpp   15.00        12.36   11.67        10.00   22.01        18.32
32bpp   16.18        18.29*  12.71        12.74   24.44        21.00

TEXT
      8x16
      Millennium I  G200
TEXT     3.29         1.50

* Yes, it is slower than Millennium I.

双头 G400

驱动程序支持双头 G400,但有一些限制
  • 辅助头与主头共享视频内存。如果您有 32MB 的显存,这不是问题,但是如果您只有 16MB,您可能需要在选择视频模式之前三思而后行(例如,不可能使用两个 1880x1440x32bpp)。

  • 由于硬件限制,辅助头只能使用 16 位和 32 位视频模式。

  • 辅助头没有加速。当辅助头过去使用加速时,加速 XFree 存在严重问题。

  • 辅助头始终以 640x480@60-32 视频模式启动。您必须使用 fbset 来更改此模式。

  • 辅助头始终以显示器模式启动。您必须使用 fbmatroxset 将其更改为电视模式。此外,对于 NTSC 输出,您必须至少选择 525 行,对于 PAL 输出,您必须至少选择 625 行。

  • 内核尚未完全准备好支持多头。因此,有些事情是不可能完成的。

  • 如果将其编译为模块,则必须将 i2c-matroxfb、matroxfb_maven 和 matroxfb_crtc2 插入内核。

双头 G450

驱动程序支持双头 G450,但有一些限制
  • 辅助头与主头共享视频内存。如果您有 32MB 的显存,这不是问题,但是如果您只有 16MB,您可能需要在选择视频模式之前三思而后行。

  • 由于硬件限制,辅助头只能使用 16 位和 32 位视频模式。

  • 辅助头没有加速。

  • 辅助头始终以 640x480@60-32 视频模式启动。您必须使用 fbset 来更改此模式。

  • 不支持电视输出

  • 内核尚未完全准备好支持多头,因此有些事情是不可能完成的。

  • 如果将其编译为模块,则必须将 matroxfb_g450 和 matroxfb_crtc2 插入内核。

Petr Vandrovec <vandrove@vc.cvut.cz>