我读帖子在这里我尝试根据帖子中的内容进行理解,但仍存在一些问题:
/lib/firmware
例如位于哪里/usr/src/linux/lib/firmware
或/usr/lib/firmware
其他地方?我可以在帖子给出的地址中使用预构建的 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
文件?或者我应该从头开始构建一个 EDID 文件;如果是的话我该如何制作 EDID 文件?
答案1
/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))
输出最后一行中的第 2 - 5 个数字cvt
( 1600 1648 1680 1760
) 是四个“HTimings”参数 ( hdisp hsyncstart hsyncend htotal
),第 6 - 9 个数字 ( 900 903 908 926
) 是四个“VTimings”参数 ( vdisp vsyncstart vsyncend vtotal
)。
最后,您需要再次编译固件,以便在最后一行中设置正确的 CRC 值(有关HOWTO.txt
详细信息,请参阅 参考资料)。
答案2
我编写了一个帮助程序,可以轻松地从 Xorg modeline 格式生成 EDID 二进制文件,并具有正确的校验和:
https://github.com/akatrevorjay/edid-generator
您可以使用它轻松地为自己生成一些新鲜的垃圾箱。我用它来使我的显示器达到 60hz,并解决 Apple 的 Thunderbolt 显示器的 EDID 问题。
该链接上有使用说明!