什麼是 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”(錯誤的模式號)訊息。
注意:LILO 無法處理十六進位制,若要直接使用 “vga=mode-number” 啟動,你需要將數字轉換為十進位制。
注意:某些較新版本的 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 為
如果你在 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>