Compiling

如何製作EDID

  • November 28, 2017

我在這裡閱讀了這篇文章,並嘗試使用我從文章中了解到的內容,但這裡有一些問題:

  1. /lib/firmware例如,位於何處/usr/src/linux/lib/firmware/usr/lib/firmware其他地方?
  2. 我可以在文章給出的地址中使用預建構的 EDID 並使用 Gvim 之類的編輯器對其進行調整,然後使用以下資訊將其傳遞給核心嗎?我嘗試設置的解析度是 1600x900@60:
 1: [H PIXELS RND]  :  1600.000000
 2: [V LINES RND]  :  450.000000
 3: [V FIELD RATE RQD]  :  120.000000
 4: [TOP MARGIN (LINES)]  :  8.000000
 5: [BOT MARGIN (LINES)]  :  8.000000
 6: [INTERLACE]  :  0.500000
 7: [H PERIOD EST]  :  16.648841
 8: [V SYNC+BP]  :  33.000000
 9: [V BACK PORCH]  :  30.000000
 10: [TOTAL V LINES]  :  500.500000
 11: [V FIELD RATE EST]  :  120.008471
 12: [H PERIOD]  :  16.650017
 13: [V FIELD RATE]  :  120.000000
 14: [V FRAME RATE]  :  60.000000
 15: [LEFT MARGIN (PIXELS)]  :  32.000000
 16: [RIGHT MARGIN (PIXELS)]  :  32.000000
 17: [TOTAL ACTIVE PIXELS]  :  1664.000000
 18: [IDEAL DUTY CYCLE]  :  25.004995
 19: [H BLANK (PIXELS)]  :  560.000000
 20: [TOTAL PIXELS]  :  2224.000000
 21: [PIXEL FREQ]  :  133.573440
 22: [H FREQ]  :  60.060000
 17: [H SYNC (PIXELS)]  :  176.000000
 18: [H FRONT PORCH (PIXELS)]  :  104.000000
 36: [V ODD FRONT PORCH(LINES)]  :  1.500000

如果是,我在哪裡可以獲得edid.bin文件? 3. 或者我應該從頭開始建構一個 EDID 文件;如果是,我該如何製作 EDID 文件?

/lib/韌體在哪裡?

EDID 模式韌體的最後存放位置應位於/lib/firmware/edid. 但是,許多 linux 發行版將範例 EDID 模式設置韌體源和 Makefile 放在 linux 核心文件的目錄下。對於 Fedora,這是由kernel-doc軟體包提供的,位於/usr/share/doc/kernel-doc-3.11.4/Documentation/EDID. 為您的顯示器編譯韌體後,您可以將 edid 二進製文件放在 grub 啟動時可訪問的任何位置,但約定是/lib/firmware/edid/.

我可以調整現有的 edid.bin 文件以匹配顯示器的解析度嗎?

這些edid.bin文件是二進制格式,因此調整它的正確方法並不直覺。

如何從頭開始製作 EDID 文件?

您提供的文章連結到用於建構自定義 edid 文件的官方核心文件。HOWTO.txt上面引用的核心文件目錄中的文件也提供了相同的說明。本質上,您編輯範例韌體文件之一,例如1024x768.S,為您的顯示器提供參數。然後使用提供的編譯它Makefile並配置 grub 以使用新韌體。

對我來說,要做到這一點有兩個棘手的地方。第一個是哪裡可以找到需要編譯的edid源文件。上面的 Fedora 已經回答了這個問題。

第二個棘手的問題是1024x768.S為您的顯示器找到正確的值。這是通過執行cvt生成所需的模式行然後做一些算術來實現的。對於 1600x900 的解析度、60 Hz 的刷新率和減少的消隱(建議用於 LCD),您將擁有:

[user@host ~]$ cvt 1600 900 60 -r
# 1600x900 59.82 Hz (CVT 1.44M9-R) hsync: 55.40 kHz; pclk: 97.50 MHz
Modeline "1600x900R"   97.50  1600 1648 1680 1760  900 903 908 926 +hsync -vsync

您可以將此輸出的最後一行與以下說明相匹配HOWTO.txt

Please note that the EDID data structure expects the timing
values in a different way as compared to the standard X11 format.

X11:
HTimings:  hdisp hsyncstart hsyncend htotal
VTimings:  vdisp vsyncstart vsyncend vtotal

EDID:
#define XPIX hdisp
#define XBLANK htotal-hdisp
#define XOFFSET hsyncstart-hdisp
#define XPULSE hsyncend-hsyncstart

#define YPIX vdisp
#define YBLANK vtotal-vdisp
#define YOFFSET (63+(vsyncstart-vdisp))
#define YPULSE (63+(vsyncend-vsyncstart))

cvt輸出最後一行( 1600 1648 1680 1760) 中的第 2 到第 5 個數字是四個“HTimings”參數 ( hdisp hsyncstart hsyncend htotal),第 6 到第 9 個數字 ( 900 903 908 926) 是四個“VTimings”參數 ( vdisp vsyncstart vsyncend vtotal)。

最後,您需要再次編譯韌體,以便在最後一行設置正確的 CRC 值(詳情請參閱HOWTO.txt)。

引用自:https://unix.stackexchange.com/questions/97023