当 EDID 不可用时,如何让 Linux 表现得更好?

当 EDID 不可用时,如何让 Linux 表现得更好?

我在使用 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)。

解决方法:幸运的是,我找到了一种巧妙的方法来解决这个问题:用你的分辨率文件更改分辨率文件名。

  1. 安装 get-edid 命令:

    sudo apt-get install read-edid
    
  2. 创建包含edid信息的bin文件:

    sudo get-edid  > 1600x1050.bin
    
  3. 创建一个文件夹来存储此文件:

     sudo mkdir /lib/firmware/edid
    
  4. 复制文件:

     sudo cp 1600x1050.bin /lib/firmware/edid
    
  5. 编辑 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
    
  6. 重新启动并测试。

出于某种原因,它对我来说效果很好。我有这个卡和驱动程序:
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 接口上的某些物理接触损坏了。甚至在您的显示器内部。

相关内容