Как я могу заставить Linux вести себя лучше, когда EDID недоступен?

Я использую Mythbuntu 12.04 с ТВ, которое только предоставляет информацию EDID, когда это включено. Так как компьютер будет использоваться для записи видео через 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. Ядро должно было смочь считать файл.

Я не думаю, что это - Плимутская проблема. Это, вероятно, зависает, потому что некоторое изменение режима видео, которое это запрашивает, зависает. Однако я хотел бы смочь сказать Плимуту всегда оставаться в обычном текстовом режиме VGA.

Я также попробовал drm_kms_helper.poll=0 и drm_kms_helper.poll=N опции ядра. Они могут установить опцию согласно/sys, но я не вижу изменения от этого.

Добавление nomodeset параметр ядра избавляется от этих проблем. Однако затем текущая версия драйвера Radeon в X-сервере не работает правильно, и более новые версии отказываются работать.

Обновление: добавление --tty=/dev/console к вызову plymouthd на завершении работы в /etc/init/plymouth.conf зафиксировал завершение работы, зависают, даже когда ТВ выключено.

7
задан 15 October 2012 в 21:51

2 ответа

Эдид должен начинаться с

00 FF FF FF FF FF FF 00

, но не в 128 раз FF.

У вас нет EDID, возможно, из-за того, что он поврежден, это не чип с EDID или, что очень вероятно, он поврежден физическим контактом на интерфейсе EDID между монитором или видеокартой. Или даже внутри вашего монитора.

0
ответ дан 15 October 2012 в 21:51

У меня нет точно такой же проблемы, но я обнаружил некоторые проблемы с xorg, когда я переключаю пользователя между открытыми сессиями:

ПРОБЛЕМА: У меня есть сеанс с 1600x1050 и я переключаюсь на другой сеанс пользователя, который был ранее установлен с тем же разрешением 1600x1050. Но когда я переключаюсь на эту сессию, экран становится 1280x1024, и по какой-то причине размер сессии очень и очень неправильный (он больше, чем разрешение экрана, и я не могу переместиться или щелкнуть большинство элементов, поэтому мне приходится перезапускать все Xorg).

ВОЗМОЖНОЕ РЕШЕНИЕ: К счастью, я нашел способ решить проблему хитрым способом: измените имя файла разрешения с помощью файла разрешения.

  1. Установить команду get-edid:

    sudo apt-get install read-edid
    
  2. Создать файл bin с информацией edid:

    sudo get-edid  > 1600x1050.bin
    
  3. Создать папку для хранения этого файла:

     sudo mkdir /lib/firmware/edid
    
  4. Скопировать файл:

     sudo cp 1600x1050.bin /lib/firmware/edid
    
  5. Редактировать Grub Чтобы отредактировать команду linux для загрузки этого файла в кмс:

     sudoedit /etc/default/grub
    

    Редактировать строку:

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

    Изменить файл name.bin и запустить

     sudo update-grub
    
  6. [ 1124] Перезагрузитесь и проверьте.

По некоторым причинам это сработало для меня очень хорошо. У меня есть эта карта и драйвер:
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

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

Я искал другие сообщения об ошибках, похожие на панели запуска, но все еще искал правильный. Я думаю, что эта проблема влияет на многие вещи в KMS (переключение режима ядра), не только на переключение между пользовательскими сессиями, но и на игры в полноэкранном режиме с другим разрешением и другие вещи.

Очень трудно найти правильный способ сообщить об этой проблеме, я хотел бы получить некоторую помощь с какой-нибудь командой Xorg / Kernel.

Я думаю, что это может быть исправлено на некотором низком уровне, но также может быть исправлено с помощью такого рода обходного пути некоторым более простым способом для пользователей: например, добавление некоторого сценария для проверки того, обнаружен ли edid или нет, и запрос пользователь, если он хочет, чтобы скрипт получил информацию о edid и передал ее команде ядра, затем спросит, работает ли он нормально и хочет ли пользователь сохранить эти настройки.

Большую часть этой информации я нашел на Странице настройки режима ядра Arch wiki

Я публикую ее на:

https : //askubuntu.com/posts/352978

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

0
ответ дан 15 October 2012 в 21:51

Другие вопросы по тегам:

Похожие вопросы: