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“) „КАКТО Е“ И ВСЯКАКВИ ИЗРИЧНИ ИЛИ КОСВЕНИ ГАРАНЦИИ, ВКЛЮЧИТЕЛНО, НО НЕ ОГРАНИЧЕНО КЪМ, ПОДРАЗБИРАЩИТЕ СЕ ГАРАНЦИИ ЗА ПРОДАВАЕМОСТ И ПРИГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ СЕ ОТХВЪРЛЯТ. ДО МАКСИМАЛНАТА СТЕПЕН, ПОЗВОЛЕНА ОТ ПРИЛОЖИМОТО ЗАКОНОДАТЕЛСТВО, В НИКАКЪВ СЛУЧАЙ 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 OS и е напълно актуален с най-новия фърмуер и ядра.

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

DRM: Direct Rendering Manager, подсистема на ядрото на Linux, използвана за комуникация с графични процесори (GPU). Използва се в партньорство с FKMS и KMS.
DVI: Предшественик на HDMI, но без аудио възможности. Налични са HDMI към DVI кабели и адаптери за свързване на Raspberry Pi устройство към оборудван с DVI дисплей.
EDID: Разширени данни за идентификация на дисплея. Формат на метаданни за устройства за показване, за да се опишат техните възможности към видео източник. Структурата на данните EDID включва име на производителя и сериен номер, тип продукт, физически размер на дисплея и времената, поддържани от дисплея, заедно с някои по-малко полезни данни. Някои дисплеи могат да имат дефектни EDID блокове, което може да причини проблеми, ако тези дефекти не се обработват от дисплейната система.
FKMS (vc4-fkms-v3d): Фалшива настройка на режима на ядрото. Докато фърмуерът все още контролира хардуера на ниско ниво (напрample, High-Definition Multimedia Interface (HDMI) портове, Display Serial Interface (DSI) и т.н., стандартните Linux библиотеки се използват в самото ядро. FKMS се използва по подразбиране в Buster, но вече е отхвърлен в полза на KMS в Bullseye.
HDMI: High-Definition Multimedia Interface е патентован аудио/видео интерфейс за предаване на некомпресирани видео данни и компресирани или некомпресирани цифрови аудио данни.
HPD: Откриване на Hotplug. Физически проводник, който се потвърждава от свързано дисплейно устройство, за да покаже, че е налице.
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, който е много разпространен в съвременните LCD монитори и телевизори, за видео изход. Raspberry Pi 3 (включително Raspberry Pi 3B+) и по-ранните устройства имат единичен HDMI порт, който е способен на 1920 × 1200 при 60Hz изход с помощта на 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 преминава през редица stages, известен като boot stages:

  1. Първият-stage, базиран на ROM буутлоудър стартира VideoCore GPU.
  2. Втори-сtage bootloader (това е 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 кабел
  • Пробвай с нов кабел. Някои кабели, особено много евтини, може да не съдържат всички необходими комуникационни линии (напр. hotplug) за Raspberry Pi за успешно откриване на дисплея.
  • Дефектен HDMI порт на Raspberry Pi
  • Ако използвате Raspberry Pi 4, опитайте другия HDMI порт.
  • Дефектен HDMI порт на монитора
  • Понякога HDMI портът на монитор или телевизор може да се износи. Опитайте с друг порт, ако устройството има такъв.
  • Рядко дисплейното устройство може да предоставя EDID данни само когато е включено или когато е избран правилният порт. За да проверите, уверете се, че устройството е включено и че е избран правилният входен порт.
  • Устройството за показване не потвърждава линията за откриване на hotplug

Първоначален изход, след това екранът става черен
Ако дисплеят се появи, но след това изгасне по време на зареждане на ядрото на 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, откриването на hotplug е заявено и EDID е прочетен OK. Нищо не беше намерено на 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 е свързано устройството за показване до): cat /sys/class/drm/card?-HDMI-A-1/edid Ако няма папки с име card?-HDMI-A-1 или подобно, тогава е вероятно EDID да не може да бъде прочетен от дисплея устройство.

ЗАБЕЛЕЖКА
В случай, че EDID се чете успешно, има полезна виртуална file в същата папка, наречена режими, която, когато се покаже, показва всички възможни режими, които EDID твърди, че устройството поддържа.

Смекчаване

Грешка при откриване на Hotplug Ако и фърмуерът, и KMS не успеят да намерят прикачен монитор, това може да е грешка при откриване на Hotplug — т.е. Raspberry Pi не знае, че дадено устройство е включено, така че не проверява за EDID. Това може да е причинено от лош кабел или устройство за показване, което не заявява правилно бърза връзка. Можете да принудите откриване на hotplug, като промените командния ред на ядрото file (cmdline.txt), който се съхранява в дяла за зареждане на Raspberry Pi OS SD карта. Можете да редактирате това 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 за задаване на откриване на hotplug, но към момента на писане това не работи с KMS. Може да се поддържа в бъдещи версии на фърмуера. Записът в config.txt е hdmi_force_hotplug и можете да посочите конкретния HDMI порт, към който се прилага hotplug, като използвате 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 file-базиран 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, но все още имате проблеми с hotplug, можете да принудите откриването на hotplug, като добавите следното към командния ред на ядрото: video=HDMI-A-1:D.

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

RaspberryPi KMS HDMI изходен графичен драйвер [pdf] Ръководство за потребителя
KMS, HDMI изходен графичен драйвер, KMS HDMI изход, графичен драйвер, KMS HDMI изходен графичен драйвер, драйвер

Референции

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са маркирани *