什麼是 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”(錯誤的模式號)訊息。

  1. 注意:LILO 無法處理十六進位制,若要直接使用 “vga=mode-number” 啟動,你需要將數字轉換為十進位制。

  2. 注意:某些較新版本的 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 為

  • 0 - 停用(相當於 nomtrr)(預設)

  • 1 - 不可快取

  • 2 - 回寫

  • 3 - 寫合併

  • 4 - 寫穿透

如果你在 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>