ЛОГОТИП RaspberryPi

Вихідний графічний драйвер RaspberryPi KMS HDMI

RaspberryPi-KMS-HDMI-Output-Graphics-Driver-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-10 версія збірки: githash: c65fe9c-clean

Юридичне повідомлення про відмову від відповідальності

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

Історія версій документа

RaspberryPi-KMS-HDMI-Вихідний-Графічний Драйвер-FIG-1

Обсяг документа

Цей документ стосується наступних продуктів Raspberry Pi

RaspberryPi-KMS-HDMI-Вихідний-Графічний Драйвер-FIG-2

вступ

З появою графічного драйвера KMS (Kernel Mode Setting) компанія Raspberry Pi Ltd відходить від застарілої мікропрограми керування системою відеовиводу до більш відкритої графічної системи. Однак це пов’язано зі своїми проблемами. Цей документ допоможе вирішити будь-які проблеми, які можуть виникнути під час переходу на нову систему. У цій технічній документації передбачається, що Raspberry Pi працює під керуванням ОС Raspberry Pi і повністю оновлено з найновішою прошивкою та ядрами.

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

DRM: Direct Rendering Manager, підсистема ядра Linux, яка використовується для зв’язку з графічними процесорами (GPU). Використовується в партнерстві з FKMS і KMS.
DVI: Попередник HDMI, але без аудіоможливостей. Кабелі та адаптери HDMI-DVI доступні для підключення пристрою Raspberry Pi до дисплея з DVI.
EDID: Розширені ідентифікаційні дані дисплея. Формат метаданих для пристроїв відображення для опису їхніх можливостей щодо джерела відео. Структура даних EDID включає назву виробника та серійний номер, тип продукту, фізичний розмір дисплея та синхронізацію, яку підтримує дисплей, а також деякі менш корисні дані. Деякі дисплеї можуть мати дефектні блоки EDID, що може спричинити проблеми, якщо ці дефекти не обробляються системою дисплея.
FKMS (vc4-fkms-v3d): Фальшиве налаштування режиму ядра. Хоча прошивка все ще контролює апаратне забезпечення низького рівня (наприклад,ample, порти мультимедійного інтерфейсу високої чіткості (HDMI), послідовний інтерфейс дисплея (DSI) тощо), стандартні бібліотеки Linux використовуються в самому ядрі. FKMS використовується за замовчуванням у Buster, але тепер не підтримується на користь KMS у Bullseye.
HDMI: Мультимедійний інтерфейс високої чіткості — це власний аудіо/відеоінтерфейс для передачі нестиснених відеоданих, а також стиснених або нестиснених цифрових аудіоданих.
HPD: Виявлення гарячого підключення. Фізичний дріт, який підтверджується підключеним пристроєм відображення, щоб показати його наявність.
KMS: Налаштування режиму ядра; побачити https://www.kernel.org/doc/html/latest/gpu/drm-kms.html для більш детальної інформації. На Raspberry Pi vc4-kms-v3d — це драйвер, який реалізує KMS, і його часто називають «драйвером KMS». Застарілий графічний стек: графічний стек, повністю реалізований у мікропрограмному об’єкті 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. Застарілі стеки та стеки FKMS використовують вбудоване програмне забезпечення графічного процесора VideoCore для перевірки наявності та властивостей HDMI. Навпаки, KMS використовує реалізацію з повністю відкритим кодом на стороні ARM. Це означає, що кодові основи для двох систем абсолютно різні, і за деяких обставин це може призвести до різної поведінки двох підходів. Пристрої HDMI і DVI ідентифікують себе для пристрою-джерела за допомогою фрагмента метаданих, який називається блоком EDID. Це зчитується вихідним пристроєм із пристрою відображення через з’єднання I2C, і це абсолютно прозоро для кінцевого користувача, оскільки це робиться графічним стеком. Блок EDID містить багато інформації, але в основному він використовується для визначення роздільної здатності, яку підтримує дисплей, тому Raspberry Pi можна налаштувати на виведення відповідної роздільної здатності.

Як обробляється HDMI під час завантаження

Після першого ввімкнення Raspberry Pi проходить кілька секундtages, відомий як boot stages:

  1. Перший-сtage, завантажувач на основі ПЗУ запускає графічний процесор VideoCore.
  2. Другі-сtagелектронний завантажувач (це bootcode.bin на SD-карті на пристроях до Raspberry Pi 4 і в SPI EEPROM на Raspberry Pi 4):
    1. На Raspberry Pi 4 другий-stagЗавантажувач запустить систему HDMI, запитає дисплей щодо можливих режимів, а потім налаштує дисплей належним чином. У цей момент дисплей використовується для надання основних діагностичних даних.
    2. Дисплей діагностики завантажувача (від 07 грудня 2022 р.) відображатиме статус будь-яких підключених дисплеїв (чи присутній Hotplug Detect (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=ок #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 за допомогою параметрів Advanced Settings. Увімкнути SSH на SD-карті, образ якої вже створено, трохи складніше: вам знадобиться використовувати інший комп’ютер, щоб додати file під назвою ssh до завантажувального розділу. Замініть SD-карту в оригінальному Raspberry Pi та увімкніть його. Це має ввімкнути SSH з IP-адресою, призначеною DHCP. Увійшовши в систему, введіть наступне у підказці терміналу, щоб відобразити вміст будь-якого виявленого EDID (може знадобитися змінити HDMI-A-1 на HDMI-A-2 залежно від того, до якого порту HDMI на Raspberry Pi підключено пристрій відображення до): cat /sys/class/drm/card?-HDMI-A-1/edid Якщо немає папок з іменем card?-HDMI-A-1 або подібним, то, ймовірно, EDID не можна прочитати з дисплея пристрій.

ПРИМІТКА
У випадку, коли EDID прочитано успішно, є корисний віртуальний file у тій самій папці під назвою modes, яка під час відображення показує всі можливі режими, які, як стверджує EDID, підтримує пристрій.

Пом'якшення

Помилка виявлення гарячого підключення Якщо ні вбудоване програмне забезпечення, ні KMS не можуть знайти підключений монітор, це може бути помилка виявлення гарячого підключення, тобто Raspberry Pi не знає, що пристрій підключено, тому він не перевіряє наявність EDID. Це може бути викликано поганим кабелем або дисплеєм, який неправильно активує гаряче підключення. Ви можете примусово виявити гаряче підключення, змінивши командний рядок ядра file (cmdline.txt), який зберігається в завантажувальному розділі SD-карти Raspberry Pi OS. Ви можете редагувати це 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 до a file
Створення a file містити метадані EDID з нуля, як правило, неможливо, а використовувати існуючі набагато легше. Зазвичай можна отримати EDID із пристрою відображення та зберегти його на SD-карті Raspberry Pi, щоб KMS міг використовувати його замість отримання EDID із пристрою відображення. Найпростішим варіантом тут є переконатися, що пристрій відображення запущено та працює та має правильний AV-вхід, і що Raspberry Pi правильно запустив систему HDMI. З терміналу тепер ви можете скопіювати EDID в a 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 із під’єднаного пристрою відображення на a file за допомогою такої команди:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Використовуючи a 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. Перезавантаження.

ПРИМІТКА
Якщо ви використовуєте a fileна основі EDID, але все ще є проблеми з гарячим підключенням, ви можете примусово виявити гаряче підключення, додавши наступне до командного рядка ядра: video=HDMI-A-1:D.

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

Вихідний графічний драйвер RaspberryPi KMS HDMI [pdfПосібник користувача
KMS, HDMI Output Graphics Driver, KMS HDMI Output, Graphics Driver, KMS HDMI Output Graphics Driver, Драйвер

Список літератури

Залиште коментар

Ваша електронна адреса не буде опублікована. Обов'язкові поля позначені *