我在使用 Mythbuntu 12.04 和电视,电视只提供扩展显示识别码开机时的信息。由于计算机将用于通过 MythTV 录制视频,因此我不想在计算机运行时一直打开电视。
我将 EDID 保存到一个文件中,将其放在 /lib/firmware 中,并添加drm_kms_helper.edid_firmware=DVI-I-1:LT26-A.VGA.EDID.bin
到内核命令行。内核从此文件加载 EDID,X 以正确的分辨率启动。但是,内核仍尝试从设备读取 EDID,并向我的日志发送如下消息:
[ 31.926373] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 128
[ 31.927144] Raw EDID:
[ 31.927352] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.927882] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.928454] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.928984] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.929513] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.930042] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.930569] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.931097] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[ 31.931630] radeon 0000:01:00.0: DVI-I-1: Ignoring invalid EDID block 1.
[ 31.990143] i2c i2c-3: sendbytes: NAK bailout.
[ 31.993215] [drm:radeon_dvi_detect] *ERROR* DVI-I-1: probed a monitor but no|invalid EDID
[ 32.023802] [drm] Got external EDID base block and 0 extensions from "LT26-A.VGA.EDID.bin" for connector "DVI-I-1"
[ 32.774355] i2c i2c-3: sendbytes: NAK bailout.
添加 drm_kms_helper.edid_firmware 选项还会导致关机或重启时出现长时间延迟。即使显示器处于打开状态,也会发生这种情况。部分原因是所有调用都会plymouth
挂起一段时间,可能是由于plymouthd
挂起。这会使关机时执行的脚本挂起一段时间。plymouthd
关机时不运行会有所帮助,但仍然会有延迟。
延迟之后,我看到:
[drm:edid_load] *ERROR* Requesting EDID firmware "LT26-A.VGA.EDID.bin" failed (err=-2)
这段代码闪过得非常快,然后是启动画面或重新启动。我只能用相机记录下来。这对我来说毫无意义,因为在延迟期间,计算机可以通过 SSH 完全使用。内核应该能够读取该文件。
我不认为这是 Plymouth 的问题。它挂起可能是因为它请求的某些视频模式更改挂起。不过,我希望能够告诉 Plymouth 始终保持在普通 VGA 文本模式。
我也尝试了drm_kms_helper.poll=0
内核drm_kms_helper.poll=N
选项。他们可以根据 /sys 设置选项,但我没有看到任何变化。
添加nomodeset
内核参数可以解决这些问题。但是,X 服务器中当前版本的 Radeon 驱动程序无法正常工作,而较新版本则无法运行。
更新:--tty=/dev/console
在关机时添加 plymouthd 的调用/etc/init/plymouth.conf
已经修复了关机挂起问题,即使电视已关闭。
答案1
我没有完全相同的问题,但是当我在打开的会话之间切换用户时,我发现 xorg 存在一些问题:
问题:我有一个分辨率为 1600x1050 的会话,现在切换到另一个用户的会话,该会话之前也设置了同样的分辨率 1600x1050。但是当我切换到这个会话时,屏幕分辨率变为 1280x1024,出于某种原因,会话的大小非常非常不对(它比屏幕分辨率大,我无法移动或点击大多数东西,所以我必须重新启动所有 Xorg)。
解决方法:幸运的是,我找到了一种巧妙的方法来解决这个问题:用你的分辨率文件更改分辨率文件名。
安装 get-edid 命令:
sudo apt-get install read-edid
创建包含edid信息的bin文件:
sudo get-edid > 1600x1050.bin
创建一个文件夹来存储此文件:
sudo mkdir /lib/firmware/edid
复制文件:
sudo cp 1600x1050.bin /lib/firmware/edid
编辑 grub 以编辑 linux 命令以在 kms 中加载此文件:
sudoedit /etc/default/grub
編輯行:
GRUB_CMDLINE_LINUX_DEFAULT="drm_kms_helper.edid_firmware=edid/1600x1050.bin quiet"
更改 name.bin 文件并运行
sudo update-grub
- 重新启动并测试。
出于某种原因,它对我来说效果很好。我有这个卡和驱动程序:
fglrxinfo
显示::0 屏幕:0
OpenGL 供应商字符串:Advanced Micro Devices,Inc.
OpenGL 渲染器字符串:AMD Radeon HD 6450
OpenGL 版本字符串:4.2.12002 兼容性配置文件上下文 9.012
以下是运行命令后显示的我的 edid 信息
# parse-edid < 1600x1050.bin
:
parse-edid: parse-edid version 2.0.0
parse-edid: EDID checksum passed.
# EDID version 1 revision 3
Section "Monitor"
# Block type: 2:0 3:fc
Identifier "22T41-H-AN"
VendorName "KTC"
ModelName "22T41-H-AN"
# Block type: 2:0 3:fc
# Block type: 2:0 3:fd
HorizSync 15-68
VertRefresh 49-61
# Max dot clock (video bandwidth) 150 MHz
# DPMS capabilities: Active off:no Suspend:no Standby:no
Mode "1280x720" # vfreq 60.000Hz, hfreq 45.000kHz
DotClock 74.250000
HTimings 1280 1390 1430 1650
VTimings 720 725 730 750
Flags "+HSync" "+VSync"
EndMode
Mode "1680x1050" # vfreq 59.883Hz, hfreq 64.674kHz
DotClock 119.000000
HTimings 1680 1728 1760 1840
VTimings 1050 1053 1059 1080
Flags "-HSync" "+VSync"
EndMode
# Block type: 2:0 3:fc
# Block type: 2:0 3:fd
EndSection
内核日志:
2139 Oct 2 21:45:06 dans679-computer kernel: [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.8.0-30-generic root=UUID=939b3111-4906-46ae-9ad7-7faa783d490d ro drm_kms_helper.edid_firmware=edid/1600x1050.bin quiet
我正在寻找启动板中类似的其他错误报告,但仍在寻找正确的错误报告。我认为这个问题影响 KMS(内核模式切换)中的许多方面,不仅仅是在用户会话之间切换,还影响全屏游戏和不同分辨率等其他方面。
很难找到正确的方式来报告此问题,我希望得到一些 Xorg/Kernel 团队的帮助。
我认为这可以在一些低层次上得到修复,但也可以通过这种解决方法以更简单的方式为用户修复:例如,添加一些脚本来测试是否检测到 edid,并询问用户是否要让脚本获取 edid 信息并将其传递给内核命令,然后询问它是否运行正常以及用户是否要保留这些设置。
我发现大部分信息Arch wiki 内核模式设置页面
我将其发布在:
https://askubuntu.com/posts/352978
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/579292
答案2
Edid 必须以
00 FF FF FF FF FF FF 00
但不是 128 乘以 FF。
您没有 EDID 可能是因为它被擦除损坏了,没有带 EDID 的芯片,或者很可能是显示器或视频卡之间的 EDID 接口上的某些物理接触损坏了。甚至在您的显示器内部。