Wie kann ich dafür sorgen, dass sich Linux besser verhält, wenn EDID nicht verfügbar ist?

7

Ich verwende Mythbuntu 12.04 mit einem Fernseher, der nur EDID- Informationen liefert, wenn er eingeschaltet ist. Da der Computer für die Videoaufnahme über MythTV verwendet wird, möchte ich nicht immer den Fernseher eingeschaltet haben, während der Computer läuft.

Ich habe die EDID in einer Datei gespeichert, in / lib / firmware abgelegt und drm_kms_helper.edid_firmware=DVI-I-1:LT26-A.VGA.EDID.binder Kernel-Befehlszeile hinzugefügt . Der Kernel lädt die EDID aus dieser Datei und X beginnt mit der richtigen Auflösung. Der Kernel versucht jedoch weiterhin, die EDID vom Gerät zu lesen, und spammt meine Protokolle mit folgenden Nachrichten:

[   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.

Das Hinzufügen der Option drm_kms_helper.edid_firmware führt auch zu einer langen Verzögerung beim Herunterfahren oder Neustarten. Dies geschieht auch bei eingeschaltetem Monitor. Ein Teil davon ist auf alle Aufrufe des plymouthHängens für eine Weile zurückzuführen, wahrscheinlich auf das plymouthdHängen. Dadurch bleiben beim Herunterfahren ausgeführte Skripte eine Weile hängen. Nicht plymouthdbeim Herunterfahren zu laufen hilft, aber es gibt immer noch eine Verzögerung.

Nach der Verzögerung sehe ich:

[drm:edid_load] *ERROR* Requesting EDID firmware "LT26-A.VGA.EDID.bin" failed (err=-2)

Dies blinkt sehr schnell und wird vom Begrüßungsbildschirm oder Neustart gefolgt. Ich konnte es nur mit einer Kamera aufnehmen. Das macht für mich keinen Sinn, da der Computer während der Verzögerung über SSH voll nutzbar war. Der Kernel sollte die Datei lesen können.

Ich denke nicht, dass dies ein Plymouth-Problem ist. Es hängt wahrscheinlich, weil einige von ihm angeforderte Änderungen des Videomodus hängen bleiben. Ich würde Plymouth jedoch gerne anweisen können, immer im normalen VGA-Textmodus zu bleiben.

Ich habe auch versucht , drm_kms_helper.poll=0und drm_kms_helper.poll=NKernel - Optionen. Sie können die Option gemäß / sys festlegen, aber ich sehe keine Änderung daran.

Durch Hinzufügen des nomodesetKernel-Parameters werden diese Probleme behoben. Die aktuelle Version des Radeon-Treibers auf dem X-Server funktioniert jedoch nicht ordnungsgemäß und neuere Versionen können nicht ausgeführt werden.

Update: Durch Hinzufügen --tty=/dev/consolezum Aufruf von plymouthd beim Herunterfahren in /etc/init/plymouth.confwurde das Herunterfahren behoben, auch wenn das Fernsehgerät ausgeschaltet ist.

Träumer
quelle

Antworten:

2

Ich habe nicht genau das gleiche Problem, aber ich habe einige Probleme mit xorg festgestellt, als ich den Benutzer zwischen geöffneten Sitzungen gewechselt habe:

PROBLEM: Ich habe eine Sitzung mit 1600 x 1050 und wechsle zu einer Sitzung eines anderen Benutzers, die zuvor mit derselben Auflösung von 1600 x 1050 eingestellt wurde. Wenn ich jedoch zu dieser Sitzung wechsle, wird der Bildschirm 1280 x 1024 und aus irgendeinem Grund ist die Größe der Sitzung sehr, sehr falsch (sie ist größer als die Bildschirmauflösung und ich kann die meisten Dinge nicht verschieben oder anklicken, sodass ich neu starten muss alle Xorg).

Problemumgehung: Glücklicherweise habe ich einen Weg gefunden, dies auf knifflige Weise zu beheben: Ändern Sie den Namen der Auflösungsdatei mit Ihrer Auflösungsdatei.

  1. Installieren Sie den Befehl get-edid:

    sudo apt-get install read-edid
    
  2. Erstellen Sie eine bin-Datei mit edid-Informationen:

    sudo get-edid  > 1600x1050.bin
    
  3. Erstellen Sie einen Ordner zum Speichern dieser Datei:

     sudo mkdir /lib/firmware/edid
    
  4. Kopieren Sie die Datei:

     sudo cp 1600x1050.bin /lib/firmware/edid
    
  5. Bearbeiten Sie grub, um den Linux-Befehl zum Laden dieser Datei in km zu bearbeiten:

     sudoedit /etc/default/grub
    

    Zeile bearbeiten:

     GRUB_CMDLINE_LINUX_DEFAULT="drm_kms_helper.edid_firmware=edid/1600x1050.bin quiet" 
    

    Ändern Sie Ihre Datei name.bin und führen Sie sie aus

     sudo update-grub
    
  6. Neustart und Test.

Aus irgendeinem Grund hat es bei mir sehr gut funktioniert. Ich habe diese Karte und diesen Treiber:
fglrxinfo
Anzeige :: 0 Bildschirm: 0
OpenGL-Herstellerzeichenfolge: Advanced Micro Devices, Inc.
OpenGL-Rendererzeichenfolge: AMD Radeon HD 6450
OpenGL-Versionszeichenfolge: 4.2.12002 Kompatibilitätsprofil Kontext 9.012

Meine Edid-Informationen unten, die nach dem Ausführen des Befehls angezeigt werden
# 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

kernel.log:

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

Ich habe nach anderen ähnlichen Fehlerberichten im Launchpad gesucht, aber immer noch nach dem richtigen. Ich denke, dieses Problem betrifft viele Dinge in KMS (Kernel-Modus-Schalter), nicht nur das Wechseln zwischen Benutzersitzungen, sondern auch Spiele im Vollbildmodus mit unterschiedlicher Auflösung und andere Dinge.

Es ist sehr schwierig, den richtigen Weg zu finden, um dieses Problem zu melden. Ich hätte gerne Hilfe bei einem Xorg / Kernel-Team.

Ich denke, dies könnte auf einer niedrigen Ebene behoben werden, könnte aber auch mit dieser Art von Problemumgehung auf eine für Benutzer einfachere Weise behoben werden: Fügen Sie beispielsweise ein Skript hinzu, um zu testen, ob edid erkannt wird oder nicht, und fragen Sie den Benutzer, ob er dies möchte Lassen Sie das Skript die edid-Informationen abrufen und an den Kernel-Befehl übergeben. Fragen Sie dann, ob es ordnungsgemäß funktioniert hat und ob der Benutzer diese Einstellungen beibehalten möchte.

Ich habe die meisten dieser Informationen auf der Einstellungsseite des Arch Wiki-Kernelmodus gefunden

Ich poste es auf:

https://askubuntu.com/posts/352978

https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/579292

pablodav
quelle
1

Edid muss mit beginnen

00 FF FF FF FF FF FF 00

aber nicht 128 mal FF sein.

Sie haben keine EDID, vielleicht weil sie gelöscht ist, es ist kein Chip mit EDID oder was sehr wahrscheinlich ist, es ist ein physischer Kontakt auf der EDID-Schnittstelle zwischen Monitor oder Grafikkarte unterbrochen. Oder sogar in Ihrem Monitor.

Analyse
quelle