如何制作EDID

r00*_*004 4 compiling kernel-modules edid linux-kernel

在这里阅读了这篇文章,我试着用我从这篇文章中理解的东西来凑合,但这里有一些问题:

  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
    Run Code Online (Sandbox Code Playgroud)

    如果是,我在哪里可以得到edid.bin文件?

  3. 或者我应该从头开始构建一个 EDID 文件;如果是,我怎么能制作一个 EDID 文件?

drs*_*drs 6

/lib/firmware 在哪里?

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
Run Code Online (Sandbox Code Playgroud)

您可以将此输出的最后一行与中的说明进行匹配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))
Run Code Online (Sandbox Code Playgroud)

cvt输出的最后一行中的第 2 - 5 个数字( 1600 1648 1680 1760) 是四个“HTimings”参数 ( hdisp hsyncstart hsyncend htotal),第 6 - 9 个数字 ( 900 903 908 926) 是四个“VTimings”参数 ( vdisp vsyncstart vsyncend vtotal)。

最后,您需要再次编译固件,以便在最后一行设置正确的 CRC 值(HOWTO.txt有关详细信息,请参阅参考资料)。


tre*_*jay 5

我编写了一个帮助程序来轻松地从 Xorg 模式行格式生成带有正确校验和的 EDID 二进制文件:

https://github.com/akatrevorjay/edid-generator

您可以使用它轻松地为自己生成一些新的垃圾箱。我用它在我的显示器上获得 60hz 以及处理 Apple 的 Thunderbolt 显示器的 EDID 问题。

该链接上有使用说明!