Como posso fazer o Linux se comportar melhor quando o EDID não está disponível?

6

Estou usando o Mythbuntu 12.04 com uma TV que fornece apenas informações EDID quando ele está ativado. Como o computador será usado para gravar vídeos via MythTV, não quero que a TV esteja sempre ligada enquanto o computador estiver em execução.

Salvei o EDID em um arquivo, coloquei em / lib / firmware e adicionei drm_kms_helper.edid_firmware=DVI-I-1:LT26-A.VGA.EDID.bin à linha de comando do kernel. O kernel carrega o EDID desse arquivo e o X inicia com a resolução apropriada. No entanto, o kernel ainda tenta ler EDID a partir do dispositivo e spams meus logs com mensagens como esta:

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

Adicionar a opção drm_kms_helper.edid_firmware também causa um longo atraso ao desligar ou reinicializar. Acontece mesmo quando o monitor está ligado. Parte disso é devido a todas as invocações de plymouth penduradas por um tempo, provavelmente devido a plymouthd pendurado. Isso faz com que os scripts executados no desligamento travem por um tempo. Não executar plymouthd no desligamento ajuda, mas ainda há um atraso.

Após o atraso, vejo:

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

Isso pisca rapidamente e é seguido pela tela inicial ou pela reinicialização. Eu só podia gravar usando uma câmera. Não faz sentido para mim, porque durante o atraso o computador era totalmente utilizável via SSH. O kernel deveria ter sido capaz de ler o arquivo.

Eu não acho que isso seja um problema de Plymouth. Provavelmente está pendurado porque algumas mudanças no modo de vídeo estão pendentes. No entanto, eu adoraria poder dizer ao Plymouth para ficar sempre no modo de texto VGA normal.

Eu também tentei as opções do kernel drm_kms_helper.poll=0 e drm_kms_helper.poll=N . Eles podem definir a opção de acordo com / sys, mas não vejo nenhuma alteração disso.

Adicionar o parâmetro do kernel nomodeset elimina esses problemas. No entanto, a versão atual do driver radeon no servidor X não funciona corretamente e as versões mais recentes se recusam a ser executadas.

Atualização: Adicionar --tty=/dev/console à invocação de plymouthd no desligamento em /etc/init/plymouth.conf corrigiu o desligamento, mesmo quando a TV está desligada.

    
por dreamlayers 14.10.2012 / 21:03

2 respostas

2

Eu não tenho exatamente o mesmo problema, mas eu encontrei alguns problemas com o xorg quando alterno o usuário entre sessões abertas:

PROBLEMA: tenho sessão com 1600x1050 e mudo para a sessão de outro usuário que foi previamente definida com a mesma resolução de 1600x1050. Mas quando eu mudo para esta sessão, a tela recebe 1280x1024 e por alguma razão o tamanho da sessão está muito errado (é maior que a resolução da tela e não consigo mover ou clicar na maioria das coisas, então tenho que reiniciar todo o Xorg).

SOLUÇÃO ALTERNATIVA: Felizmente, encontrei uma maneira de resolvê-lo de uma maneira complicada: Altere o nome do arquivo de resolução com o seu arquivo de resolução.

  1. Instalar o comando get-edid:

    sudo apt-get install read-edid
    
  2. Crie um arquivo bin com informações edid:

    sudo get-edid  > 1600x1050.bin
    
  3. Crie uma pasta para armazenar este arquivo:

     sudo mkdir /lib/firmware/edid
    
  4. Copie o arquivo:

     sudo cp 1600x1050.bin /lib/firmware/edid
    
  5. Edite o grub para editar o comando linux para carregar este arquivo em kms:

     sudoedit /etc/default/grub
    

    Editar linha:

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

    Altere seu arquivo name.bin e execute

     sudo update-grub
    
  6. Reinicie e teste.

Por alguma razão, funcionou muito bem para mim. Eu tenho este cartão e motorista:
fglrxinfo
visor:: 0 visor: 0
Cadeia de fornecedores do OpenGL: Advanced Micro Devices, Inc.
String de renderizador OpenGL: AMD Radeon HD 6450
Sequência de versão do OpenGL: 4.2.12002 Contexto do perfil de compatibilidade 9.012

As minhas informações de edid abaixo, mostradas depois de executar o comando # 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

Eu estava procurando outros relatórios de bugs semelhantes no launchpad, mas ainda procurando o correto. Eu acho que esse problema afeta muitas coisas no KMS (switch de modo Kernel), não apenas alternando entre as sessões do usuário, também jogos em tela cheia com resolução diferente e outras coisas.

É muito difícil encontrar a maneira correta de reportar este problema, eu gostaria de ter alguma ajuda com alguma equipe Xorg / Kernel.

Acho que isso poderia ser corrigido em algum nível baixo, mas também poderia ser corrigido com esse tipo de solução de maneira mais fácil para os usuários: por exemplo, adicionando algum script para testar se EDID foi detectado ou não e perguntando ao usuário se eles querem deixar o script obter as informações edid e passá-las para o comando kernel, então perguntar se elas estão funcionando bem e se o usuário quer manter essas configurações.

Eu encontrei a maioria dessas informações em A página de configuração do modo de kernel do wiki do Arch

Estou postando em:

link

link

    
por pablodav 25.04.2017 / 13:46
1

Edid deve começar com

00 FF FF FF FF FF FF 00

mas não deve ser 128 vezes FF.

Você não tem EDID talvez por causa disso é apagar quebrado não é chip com EDID ou o que é muito provável, é quebrado algum contato físico na interface EDID entre monitor ou placa de vídeo. Ou até mesmo dentro do seu monitor.

    
por Analysis 07.09.2013 / 00:00