RaspberryPi-ЛОГОТИП

Драйвер графического вывода RaspberryPi KMS HDMI

RaspberryPi-KMS-HDMI-выход-графика-драйвер-PRODACT-IMG

Колофон

2020–2023 Raspberry Pi Ltd (ранее Raspberry Pi (Trading) Ltd.). Данная документация распространяется по лицензии Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). Дата сборки: 2023 февраля 02 г. Версия сборки: githash: c10fe65c-clean

Уведомление об отказе от ответственности

ТЕХНИЧЕСКИЕ ДАННЫЕ И НАДЕЖНОСТЬ ПРОДУКЦИИ RASPBERRY PI (ВКЛЮЧАЯ ТЕХНИЧЕСКИЕ ТАБЛИЦЫ), ИЗМЕНЯЕМЫЕ ВРЕМЯ ОТ ВРЕМЕНИ («РЕСУРСЫ») ПРЕДОСТАВЛЯЮТСЯ RASPBERRY PI LTD («RPL») «КАК ЕСТЬ», И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТАК, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ТОВАРНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ ОТКАЗЫВАЮТСЯ. В МАКСИМАЛЬНОЙ СТЕПЕНИ, РАЗРЕШЕННОЙ ДЕЙСТВУЮЩИМ ЗАКОНОДАТЕЛЬСТВОМ, НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ RPL НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ПРИМЕРНЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ЗАКУПКУ ЗАМЕНЯЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; ПОТЕРЮ ИСПОЛЬЗОВАНИЯ, ДАННЫХ) ИЛИ ПРИБЫЛЬ; ИЛИ ПЕРЕРЫВ БИЗНЕСА), КАКОЙ-ЛИБО ВЫЗВАННОЙ И НА ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, БУДЬ В ДОГОВОРЕ, СТРОГО ОТВЕТСТВЕННОСТИ ИЛИ ПРАВИЛЬНЫХ ПРАВИЛ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГОЕ), ВОЗНИКАЮЩИХ ЛЮБЫМ СПОСОБОМ ИСПОЛЬЗОВАНИЯ РЕСУРСОВ, ДАЖЕ ЕСЛИ УВЕДОМЛЕНЫ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА. RPL оставляет за собой право вносить любые улучшения, улучшения, исправления или любые другие модификации РЕСУРСОВ или любых продуктов, описанных в них, в любое время и без дополнительного уведомления. РЕСУРСЫ предназначены для опытных пользователей с подходящим уровнем знаний в области проектирования. Пользователи несут единоличную ответственность за выбор и использование РЕСУРСОВ, а также за любое применение описанных в них продуктов. Пользователь соглашается возместить ущерб и оградить RPL от всех обязательств, затрат, ущерба или других убытков, возникающих в результате использования РЕСУРСОВ. RPL предоставляет пользователям разрешение на использование РЕСУРСОВ исключительно в сочетании с продуктами Raspberry Pi. Любое другое использование РЕСУРСОВ запрещено. Никакая лицензия не предоставляется на какие-либо другие права интеллектуальной собственности RPL или других третьих лиц. ДЕЯТЕЛЬНОСТЬ ВЫСОКОГО РИСКА. Продукты Raspberry Pi не разрабатываются, не производятся и не предназначены для использования в опасных средах, требующих отказоустойчивости, например, при эксплуатации ядерных объектов, систем авиационной навигации или связи, управления воздушным движением, систем вооружения или критически важных с точки зрения безопасности приложений (включая жизнеобеспечение). систем и других медицинских устройств), в которых выход из строя изделий может привести непосредственно к смерти, телесным повреждениям или серьезному физическому или экологическому ущербу («Деятельность с высоким риском»). RPL отказывается от каких-либо явных или подразумеваемых гарантий пригодности для деятельности с высоким риском и не принимает на себя никакой ответственности за использование или включение продуктов Raspberry Pi в деятельность с высоким риском. Продукты Raspberry Pi предоставляются в соответствии со Стандартными условиями RPL. Предоставление RPL РЕСУРСОВ не расширяет и не изменяет иным образом Стандартные условия RPL, включая, помимо прочего, отказ от ответственности и гарантии, выраженные в них.

История версий документа

RaspberryPi-KMS-HDMI-выход-графика-драйвер-РИС-1

Объем документа

Этот документ относится к следующим продуктам Raspberry Pi.

RaspberryPi-KMS-HDMI-выход-графика-драйвер-РИС-2

Введение

С выпуском графического драйвера KMS (Kernel Mode Setting) компания Raspberry Pi Ltd отходит от устаревшего встроенного управления системой видеовыхода и переходит к графической системе с более открытым исходным кодом. Однако это сопряжено со своими собственными проблемами. Целью этого документа является помощь в решении любых проблем, которые могут возникнуть при переходе на новую систему. В этом техническом документе предполагается, что Raspberry Pi работает под управлением ОС Raspberry Pi и на нем установлены последние версии прошивки и ядер.

Терминология

УПРАВЛЕНИЕ ДРМ: Direct Rendering Manager — подсистема ядра Linux, используемая для связи с графическими процессорами (GPU). Используется в партнерстве с FKMS и KMS.
DVI-выход: Предшественник HDMI, но без аудиовозможностей. Доступны кабели и адаптеры HDMI-DVI для подключения устройства Raspberry Pi к дисплею, оснащенному DVI.
ЭДИД: Расширенные идентификационные данные дисплея. Формат метаданных для устройств отображения, описывающий их возможности видеоисточнику. Структура данных EDID включает название производителя и серийный номер, тип продукта, физический размер дисплея и время, поддерживаемое дисплеем, а также некоторые менее полезные данные. Некоторые дисплеи могут иметь дефектные блоки EDID, что может вызвать проблемы, если эти дефекты не устраняются системой отображения.
ФКМС (vc4-fkms-v3d): Поддельная настройка режима ядра. Хотя прошивка по-прежнему управляет аппаратным обеспечением низкого уровня (например,ample, порты мультимедийного интерфейса высокой четкости (HDMI), последовательный интерфейс дисплея (DSI) и т. д.), в самом ядре используются стандартные библиотеки Linux. FKMS используется по умолчанию в Buster, но теперь в Bullseye он устарел в пользу KMS.
HDMI: Мультимедийный интерфейс высокой четкости — это собственный аудио/видеоинтерфейс для передачи несжатых видеоданных, а также сжатых или несжатых цифровых аудиоданных.
HPD: Обнаружение горячего подключения. Физический провод, который подтверждается подключенным устройством отображения, чтобы показать его наличие.
КМС: Настройка режима ядра; видеть https://www.kernel.org/doc/html/latest/gpu/drm-kms.html Больше подробностей. В Raspberry Pi vc4-kms-v3d — это драйвер, реализующий KMS, и его часто называют «драйвером KMS». Устаревший графический стек: графический стек, полностью реализованный в BLOB-объекте прошивки VideoCore, предоставляемом драйвером кадрового буфера Linux. Устаревший графический стек до недавнего времени использовался в большинстве устройств Raspberry Pi Ltd; сейчас он постепенно заменяется на (F)KMS/DRM.

Система HDMI и графические драйверы

Устройства Raspberry Pi используют для вывода видео стандарт HDMI, который очень распространен на современных ЖК-мониторах и телевизорах. Raspberry Pi 3 (включая Raspberry Pi 3B+) и более ранние устройства имеют один порт HDMI, который обеспечивает выходной сигнал 1920 × 1200 при 60 Гц с использованием полноразмерного разъема HDMI. Raspberry Pi 4 имеет два порта micro HDMI и поддерживает вывод 4K на оба порта. В зависимости от настройки порт HDMI 0 на Raspberry Pi 4 поддерживает скорость до 4kp60, но при использовании двух устройств вывода 4K вы ограничены p30 на обоих устройствах. Стек графического программного обеспечения, независимо от версии, отвечает за опрос подключенных устройств HDMI на предмет их свойств и соответствующую настройку системы HDMI. Стеки Legacy и FKMS используют встроенное ПО графического процессора VideoCore для проверки наличия и свойств HDMI. Напротив, KMS использует реализацию на стороне ARM с полностью открытым исходным кодом. Это означает, что базы кода для двух систем совершенно различны, и в некоторых случаях это может привести к разному поведению этих двух подходов. Устройства HDMI и DVI идентифицируют себя с устройством-источником с помощью части метаданных, называемой блоком EDID. Оно считывается исходным устройством с устройства отображения через соединение I2C, и это полностью прозрачно для конечного пользователя, поскольку это делается графическим стеком. Блок EDID содержит много информации, но в основном он используется для указания того, какие разрешения поддерживает дисплей, поэтому Raspberry Pi можно настроить для вывода соответствующего разрешения.

Как работает HDMI во время загрузки

При первом включении Raspberry Pi проходит несколько секунд.tages, известный как boot stagэс:

  1. Первый-сtage, загрузчик на основе ПЗУ запускает графический процессор VideoCore.
  2. СекундыtagЗагрузчик (это bootcode.bin на SD-карте на устройствах до Raspberry Pi 4 и в SPI EEPROM на Raspberry Pi 4):
    1. На Raspberry Pi 4 второй-сtagЗагрузчик запустит систему HDMI, запросит у дисплея возможные режимы, а затем настроит дисплей соответствующим образом. На этом этапе дисплей используется для предоставления основных диагностических данных.
    2. На диагностическом дисплее загрузчика (начиная с 07 декабря 2022 г.) будет отображаться состояние всех подключенных дисплеев (присутствует ли функция обнаружения горячего подключения (HPD) и был ли восстановлен блок EDID с дисплея).
  3. Прошивка VideoCore (start.elf) загружается и запускается. Это возьмет на себя управление системой HDMI, прочитает блок EDID со всех подключенных дисплеев и отобразит на этих дисплеях радужный экран.
  4. Ядро Linux загружается
    1. Во время загрузки ядра KMS возьмет на себя управление системой HDMI из встроенного ПО. Еще раз блок EDID считывается со всех подключенных дисплеев, и эта информация используется для настройки консоли и рабочего стола Linux.

Возможные проблемы и симптомы

Наиболее частым симптомом сбоя, возникающим при переходе на KMS, является первоначально хорошая загрузка: появляется экран загрузчика, а затем появляется радужный экран, а через несколько секунд дисплей становится черным и больше не включается. Момент, когда дисплей становится черным, на самом деле является моментом процесса загрузки ядра, когда драйвер KMS берет на себя управление дисплеем из прошивки. Raspberry Pi в настоящее время работает во всех отношениях, за исключением выхода HDMI, поэтому, если SSH включен, вы сможете войти на устройство по этому маршруту. Зеленый индикатор доступа к SD-карте обычно время от времени мигает. Также возможно, что вы вообще не увидите выхода HDMI; нет дисплея загрузчика и нет радужного экрана. Обычно это может быть связано с аппаратной неисправностью.

Диагностика неисправности

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

  • Неисправный кабель HDMI
  • Попробуйте новый кабель. Некоторые кабели, особенно очень дешевые, могут не содержать всех необходимых линий связи (например, горячего подключения), чтобы Raspberry Pi мог успешно обнаружить дисплей.
  • Неисправный порт HDMI на Raspberry Pi
  • Если вы используете Raspberry Pi 4, попробуйте другой порт HDMI.
  • Неисправен порт HDMI на мониторе
  • Иногда порт HDMI на мониторе или телевизоре может изнашиваться. Попробуйте другой порт, если он есть на устройстве.
  • В редких случаях устройство отображения может предоставлять данные EDID только при включении или выборе правильного порта. Для проверки убедитесь, что устройство включено и выбран правильный входной порт.
  • Устройство отображения не подтверждает линию обнаружения горячего подключения

Первоначальный вывод, затем экран становится черным
Если дисплей появляется, но затем гаснет во время загрузки ядра Linux, существует ряд возможных причин, и они обычно связаны с проблемой чтения EDID с устройства отображения. Как видно из приведенного выше раздела, посвященного последовательности загрузки, EDID считывается в различных точках процесса загрузки, и каждое из этих считываний выполняется отдельной частью программного обеспечения. Окончательное чтение, когда KMS вступает во владение, выполняется неизмененным исходным кодом ядра Linux, и оно не обрабатывает дефектные форматы EDID, а также более раннее программное обеспечение прошивки. Вот почему дисплей может перестать работать правильно, как только KMS вступит во владение. Существует несколько способов подтвердить, что KMS не может прочитать EDID, и два из них заключаются в следующем.
Проверьте экран диагностики загрузчика (только Raspberry Pi 4)

ПРИМЕЧАНИЕ
Для диагностики загрузчика требуется последняя версия загрузчика. Вы можете обновиться до последней версии, используя следующие инструкции: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Извлеките SD-карту и перезагрузите Raspberry Pi. Нажмите ESC на экране установки ОС, и на устройстве отображения должен появиться диагностический экран. На дисплее должна быть строка, начинающаяся с display: — напримерampль:

  • отображать: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=нет #0

Эти выходные данные Raspberry Pi 4 показывают, что система обнаружила дисплей HDMI на порту HDMI 0, было подтверждено обнаружение горячего подключения и EDID был прочитан нормально. На порту HDMI 1 ничего не обнаружено.

Проверьте, обнаружила ли система KMS EDID
Чтобы проверить это, вам нужно будет войти на устройство Raspberry Pi через SSH с другого компьютера. SSH можно включить при создании образа SD-карты с помощью Raspberry Pi Imager, используя параметры дополнительных настроек. Включить SSH на уже созданном образе SD-карты немного сложнее: вам нужно будет использовать другой компьютер, чтобы добавить file по имени ssh в загрузочный раздел. Замените SD-карту в оригинальном Raspberry Pi и включите его. Это должно включить SSH с IP-адресом, назначенным DHCP. После входа в систему введите следующую команду в командной строке терминала, чтобы отобразить содержимое любого обнаруженного EDID (возможно, вам придется изменить HDMI-A-1 на HDMI-A-2 в зависимости от того, к какому порту HDMI на Raspberry Pi подключено устройство отображения). to): cat /sys/class/drm/card?-HDMI-A-1/edid Если нет папок с именем card?-HDMI-A-1 или подобных, то, скорее всего, EDID не может быть прочитан с дисплея устройство.

ПРИМЕЧАНИЕ
В случае успешного считывания EDID имеется полезный виртуальный file в той же папке, называемой режимами, которая при отображении показывает все возможные режимы, которые, по утверждениям EDID, поддерживает устройство.

Смягчение последствий

Сбой обнаружения горячего подключения. Если и встроенное ПО, и KMS не могут найти подключенный монитор, это может быть сбой обнаружения горячего подключения — т. е. Raspberry Pi не знает, что устройство подключено, поэтому не проверяет EDID. Это может быть вызвано неисправным кабелем или устройством отображения, которое неправильно поддерживает горячее подключение. Вы можете принудительно обнаружить горячее подключение, изменив командную строку ядра. file (cmdline.txt), который хранится в загрузочном разделе SD-карты ОС Raspberry Pi. Вы можете редактировать это file в другой системе, используя любой редактор, который вы предпочитаете. Добавьте следующее в конец cmdline.txt file: video=HDMI-A-1:1280×720@60D Если вы используете второй порт HDMI, замените HDMI-A-1 на HDMI-A-2. Вы также можете указать другое разрешение и частоту кадров, но убедитесь, что вы выбираете те, которые поддерживаются устройством отображения.

ПРИМЕЧАНИЕ
Документацию по настройкам командной строки ядра для видео можно найти здесь: https://www.kernel.org/doc/Documentation/fb/modedb.txt

ПРЕДУПРЕЖДЕНИЕ
Старые графические стеки поддерживали использование записи config.txt для настройки обнаружения горячего подключения, но на момент написания это не работало с KMS. Возможно, это будет поддерживаться в будущих версиях прошивки. Запись в файле config.txt — hdmi_force_hotplug, и вы можете указать конкретный порт HDMI, к которому применяется горячее подключение, используя hdmi_force_hotplug:0=1 или hdmi_force_hotplug:1=1. Обратите внимание, что в номенклатуре KMS порты HDMI обозначены как 1 и 2, а Raspberry Pi использует 0 и 1.

проблемы с EDID
Меньшая часть устройств отображения не способна возвращать EDID, если они выключены или когда выбран неправильный AV-вход. Это может быть проблемой, если Raspberry Pi и устройства отображения подключены к одному и тому же удлинителю, и устройство Raspberry Pi загружается быстрее, чем дисплей. Для таких устройств вам может потребоваться указать EDID вручную. Еще более необычно то, что некоторые устройства отображения имеют блоки EDID, которые плохо отформатированы и не могут быть проанализированы системой KMS EDID. В этих обстоятельствах возможно прочитать EDID с устройства с аналогичным разрешением и использовать его. В любом случае в следующих инструкциях описано, как считать EDID с устройства отображения и настроить KMS для его использования вместо того, чтобы KMS пытался опрашивать устройство напрямую.

Копирование EDID в file
Создание file содержать метаданные EDID с нуля обычно невозможно, а использовать уже существующие гораздо проще. Как правило, можно получить EDID с устройства отображения и сохранить его на SD-карте Raspberry Pi, чтобы его можно было использовать KMS вместо получения EDID с устройства отображения. Самый простой вариант здесь — убедиться, что устройство отображения работает и подключено к правильному AV-входу, а также что Raspberry Pi правильно запустил систему HDMI. Теперь из терминала вы можете скопировать EDID в file с помощью следующей команды: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Если по какой-либо причине EDID отсутствует, вы можете загрузить устройство в другом -KMS-режим, в котором успешно загружается рабочий стол или консоль, затем скопируйте EDID, который прошивка (надеюсь) успешно прочитает, в file.

  1. Загрузитесь в устаревшем графическом режиме.
    1. Отредактируйте файл config.txt в загрузочном разделе, обязательно запустив редактор с помощью sudo, и измените строку dtoverlay=vc4-kms-v3d на #dtoverlay=vc4-kms-v3d.
    2. Перезагрузить.
  2. Теперь должен появиться рабочий стол или консоль входа.
    1. С помощью терминала скопируйте EDID с подключенного устройства отображения на file с помощью следующей команды:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Используя fileEDID на основе EDID вместо опроса устройства отображения. Отредактируйте файл /boot/cmdline.txt, обязательно запустив редактор с помощью sudo, и добавьте в командную строку ядра следующее: drm.edid_firmware=myedid.dat. Вы можете применить EDID к конкретный порт HDMI следующим образом: drm.edid_firmware=HDMI-A-1:myedid.dat При необходимости загрузитесь обратно в режим KMS, выполнив следующие действия:

  1. Отредактируйте config.txt в загрузочном разделе, обязательно запустив редактор с помощью sudo, и измените строку #dtoverlay=vc4-kms-v3d на dtoverlay=vc4-kms-v3d.
  2. Перезагрузить.

ПРИМЕЧАНИЕ
Если вы используете file-на основе EDID, но по-прежнему возникают проблемы с горячим подключением, вы можете принудительно обнаружить горячее подключение, добавив в командную строку ядра следующее: video=HDMI-A-1:D.

Документы/Ресурсы

Драйвер графического вывода RaspberryPi KMS HDMI [pdf] Руководство пользователя
KMS, графический драйвер вывода HDMI, выход KMS HDMI, графический драйвер, графический драйвер вывода KMS HDMI, драйвер

Ссылки

Оставьте комментарий

Ваш адрес электронной почты не будет опубликован. Обязательные поля отмечены *