什麼是 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)。 您也可以使用值 + 512 來實現與傳遞給 vesafb 的舊數字的相容性。

可以透過更復雜的命令列實現未列出的數字,例如,可以透過 video=matroxfb:vesa:0x11C,depth:32 指定 1600x1200x32bpp。

X11

XF{68,86}_FBDev 應該可以正常工作,但是它沒有加速。 在非英特爾架構上,24bpp 影片模式存在一些小故障。 8、16 和 32bpp 工作正常。

執行另一個(加速)X-Server(如 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 = 記憶體/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(例如,Pentium 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 功能。 這是預設設定。

fastfont:X

啟用 fastfont 功能。 X 指定為字型資料保留的記憶體大小,它必須 >= (fontwidth*fontheight*chars_in_font)/8。 在 Gx00 系列上速度更快,但在較舊的卡上速度較慢。

grayscale

啟用灰度求和。 它在 PSEUDOCOLOR 模式(文字、4bpp、8bpp)下工作。 在 DIRECTCOLOR 模式下,它僅限於透過 putc/putcs 顯示的字元。 直接訪問幀緩衝區可以繪製顏色。

nograyscale

停用灰度求和。 這是預設設定。

cross4MB

啟用畫素行可以跨越 4MB 邊界的功能。 這是非 Millennium 的預設設定。

nocross4MB

畫素行不能跨越 4MB 邊界。 這是 Millennium I 或 II 的預設設定,因為這些裝置具有不允許此操作的硬體限制。 但是此選項與某些(如果不是所有已釋出的)XF86_FBDev 版本不相容。

dfp

啟用數字平板介面。 此選項與輔助(TV)輸出不相容 - 如果 DFP 處於活動狀態,則 TV 輸出必須處於非活動狀態,反之亦然。 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 accel)驅動程式在 Alpha 上不起作用。 因此,Alpha 上有權訪問 /dev/fb* 的每個人都可以掛起機器(您應該限制對 /dev/fb* 的訪問 - 相信我,有權訪問此裝置的每個人都可以破壞您的顯示器...)。

  • 24bpp 不正確支援 big-endian 架構上的 XF-FBDev。

  • 不支援隔行掃描文字模式; 這看起來像硬體限制,但我不確定。

  • Gxx0 SGRAM/SDRAM 未自動檢測到。

  • 可能還有更多...

以下是錯誤功能

  • SVGALib 在退出時不恢復螢幕。

  • 文字模式的點時鐘受硬體限制為

    • 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 上可用。 這是一個硬體限制。

  • 1:5:5:5 和 5:6:5 16bpp 影片模式之間的選擇由 fbset 的 -rgba 選項完成:“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);對於 8x16 字型來說,16 秒,即 187 MBps)。這些時間是從驅動程式的一箇舊版本獲得的,現在它們大約快 3%,這是在 P-II/350 MHz、Millennium I 在 33 MHz PCI 插槽、G200 在 AGP 2x 插槽上的純核心空間時間。我沒有測試 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 和 32bpp 影片模式。

  • 輔助頭沒有加速。當輔助頭使用加速時,加速的 XFree 存在嚴重問題。

  • 輔助頭總是以 640x480@60-32 影片模式啟動。您必須使用 fbset 來更改此模式。

  • 輔助頭總是以監視器模式啟動。您必須使用 fbmatroxset 將其更改為電視模式。此外,您必須為 NTSC 輸出選擇至少 525 行,為 PAL 輸出選擇 625 行。

  • 核心還沒有完全準備好支援多頭。所以有些事情是不可能做到的。

  • 如果您將其編譯為模組,則必須將 i2c-matroxfb、matroxfb_maven 和 matroxfb_crtc2 插入到核心中。

雙頭 G450

驅動程式支援雙頭 G450,但有一些限制
  • 輔助頭與主頭共享視訊記憶體。如果您有 32MB 的視訊記憶體,這不是問題,但如果您只有 16MB,您可能需要在選擇影片模式之前三思而後行。

  • 由於硬體限制,輔助頭只能使用 16 和 32bpp 影片模式。

  • 輔助頭沒有加速。

  • 輔助頭總是以 640x480@60-32 影片模式啟動。您必須使用 fbset 來更改此模式。

  • 不支援電視輸出

  • 核心還沒有完全準備好支援多頭,所以有些事情是不可能做到的。

  • 如果您將其編譯為模組,則必須將 matroxfb_g450 和 matroxfb_crtc2 插入到核心中。

Petr Vandrovec <vandrove@vc.cvut.cz>