Графички драјвер за излез за HDMI на RaspberryPi KMS
Колофон
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 LTD („RPL“) „ANYMPLIED, IEX НЕ ОГРАНИЧЕНО ДО, ИМПЛИЦИРАНИТЕ ГАРАНЦИИ ЗА КОРИСТЕЊЕ И СООДВЕТНОСТ ЗА ПОСЕБНИ ЦЕЛИ СЕ ОТРЕЧУВААТ. ВО МАКСИМАЛНИОТ СТЕМЕН ДОЗВОЛЕН СО ВАЖЕЛНИОТ ЗАКОН ВО НИКОЈ СЛУЧАЈ НЕМА ОДГОВОРЕН ЗА НИКАКВА ДИРЕКТНА, ИНДИРЕКТНА, ИНЦИДЕНТАЛНА, ПОСЕБНА, ПРИМЕРНА ИЛИ ПОСЛЕДНИЧКИ ШТЕТИ ВКЛУЧУВАЈЌИ, ИЛИ УСЛУГИ ГУБЕЊЕ НА КОРИСТЕЊЕ, ПОДАТОЦИ ИЛИ ДОБИВКИ ИЛИ ДЕЛОВЕН ПРЕКИН) СЕКОГАШ ПРЕДИЗВИКУВАЊЕ И ЗА КОЈА ТЕОРИЈА НА ОДГОВОРНОСТ, БИЛО БИЛО ДОГОВОР, СТРОГА ОДГОВОРНОСТ ИЛИ ДЕЛОВЕН ПРЕКИН (ВКЛУЧУВАЈТЕ ГО НЕМОРУВАЊЕ ИЛИ ПОИНАКУ КОИ СЕ ПРЕТСТАВУВА) СОВЕТЕН ЗА МОЖНОСТА ОД ТАКВА ШТЕТА. RPL го задржува правото да направи какви било подобрувања, подобрувања, корекции или какви било други модификации на РЕСУРСИТЕ или на производите опишани во нив во секое време и без дополнително известување. РЕСУРСИТЕ се наменети за квалификувани корисници со соодветно ниво на знаење за дизајн. Корисниците се единствено одговорни за нивниот избор и користење на РЕСУРСИТЕ и секоја примена на производите опишани во нив. Корисникот се согласува да го обештети и да го држи RPL безопасен за сите обврски, трошоци, штети или други загуби кои произлегуваат од нивната употреба на RESOURCES.RPL им дава дозвола на корисниците да ги користат РЕСУРСИТЕ исклучиво во врска со производите на Raspberry Pi. Секаква друга употреба на РЕСУРСИТЕ е забранета. Ниту една лиценца не е дадена на кое било друго RPL или право на интелектуална сопственост на трета страна. АКТИВНОСТИ ВИСОКОРИЗИЧНИ. Производите на Raspberry Pi не се дизајнирани, произведени или наменети за употреба во опасни средини кои бараат неуспешни безбедни перформанси, како на пример во работењето на нуклеарни постројки, системи за навигација или комуникација на авиони, контрола на летање, системи за оружје или безбедносни критични апликации (вклучувајќи животна поддршка системи и други медицински помагала), во кои дефектот на производите може директно да доведе до смрт, лична повреда или тешка физичка или еколошка штета („Активности со висок ризик“). RPL конкретно отфрла каква било изречна или имплицитна гаранција за соодветност за високоризични активности и не прифаќа никаква одговорност за употреба или вклучување на производите на Raspberry Pi во активности со висок ризик. Производите на Raspberry Pi се обезбедуваат под стандардните услови на RPL. Обезбедувањето на РЕСУРСИТЕ од RPL не ги проширува или на друг начин ги менува Стандардните Услови на RPL, вклучувајќи, но не ограничувајќи се на одрекувањата и гаранциите изразени во нив.
Историја на верзии на документ
Опсег на документот
Овој документ се однесува на следните производи на Raspberry Pi
Вовед
Со воведувањето на графичкиот двигател KMS (Kernel Mode Setting), Raspberry Pi Ltd се оддалечува од наследната контрола на фирмверот на системот за видео излез и кон графички систем со поотворен код. Сепак, ова дојде со свој сет на предизвици. Овој документ има за цел да помогне со какви било проблеми што може да се појават при преместување на новиот систем. Оваа бела книга претпоставува дека Raspberry Pi работи со Raspberry Pi OS и е целосно ажуриран со најновиот фирмвер и кернели.
Терминологија
ДРМ: Direct Rendering Manager, потсистем на кернелот Linux што се користи за комуникација со графички процесорски единици (GPU). Се користи во партнерство со FKMS и KMS.
DVI: Претходник на HDMI, но без аудио способности. Достапни се каблите и адаптерите за HDMI во DVI за поврзување на Raspberry Pi уред со дисплеј опремен со DVI.
ЕДИД: Проширени податоци за идентификација на приказ. Формат на метаподатоци за уредите за прикажување за да ги опишат нивните способности на видео извор. Структурата на податоци EDID ги вклучува името на производителот и серискиот број, типот на производот, големината на физичкиот приказ и тајмингот поддржани од екранот, заедно со некои помалку корисни податоци. Некои дисплеи може да имаат неисправни блокови EDID, што може да предизвика проблеми ако системот за прикажување не ги решава тие дефекти.
FKMS (vc4-fkms-v3d): Поставување на режим на лажен кернел. Додека фирмверот сè уште го контролира хардверот на ниско ниво (на прampле, портите за мултимедијален интерфејс со висока дефиниција (HDMI), серискиот интерфејс за прикажување (DSI), итн.), стандардните библиотеки на Линукс се користат во самиот кернел. FKMS стандардно се користи во Buster, но сега е застарен во корист на KMS во Bullseye.
HDMI: Мултимедијалниот интерфејс со висока дефиниција е сопствен аудио/видео интерфејс за пренос на некомпресирани видео податоци и компресирани или некомпресирани дигитални аудио податоци.
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 има две микро 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 поминува низ голем број stages, познат како boot stages:
- Првитеtage, подигнувачот базиран на ROM го стартува графичкиот процесор VideoCore.
- Втори-сtagе подигнувач (ова е bootcode.bin на SD-картичката на уредите пред Raspberry Pi 4 и во SPI EEPROM на Raspberry Pi 4):
- На Raspberry Pi 4, вториот-stagПодигнувачот ќе го вклучи HDMI системот, ќе го испита екранот за можни режими, а потоа ќе го постави соодветно екранот. Во овој момент екранот се користи за обезбедување на основни дијагностички податоци.
- Дијагностичкиот екран на подигнувачот (07 декември 2022 година наваму) ќе го прикаже статусот на сите прикачени екрани (дали е присутен Hotplug Detect (HPD) и дали е обновен блок EDID од екранот).
- Фирмверот VideoCore (start.elf) е вчитан и стартуван. Ова ќе ја преземе контролата врз системот HDMI, ќе го прочита блокот EDID од сите приложени дисплеи и ќе го прикаже екранот со виножито на тие екрани.
- Се подига кернелот на Линукс
- За време на подигнувањето на јадрото, 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 само кога е вклучен или кога е избрана точната порта. За да проверите, проверете дали уредот е вклучен и дали е избрана точната влезна порта.
- Прикажи уред кој не ја потврдува линијата за откривање топла приклучок
Почетен излез, а потоа екранот станува црн
Ако екранот се појави, но потоа се исклучи за време на подигнувањето на кернелот на Линукс, постојат голем број можни причини, а тие обично се поврзани со проблем со читање на EDID од уредот за прикажување. Како што може да се види од делот погоре кој се занимава со низата на подигање, EDID се чита на повеќе различни точки за време на процесот на подигање, и секое од овие читања се врши од различен софтвер. Конечното читање, кога ќе го преземе KMS, се врши со непроменет код на кернелот на Линукс и тоа не се справува со неисправни формати EDID како и со претходниот софтвер на фирмверот. Ова е причината зошто екранот може да престане да работи правилно штом ќе го преземе KMS. Постојат неколку начини да се потврди дали KMS не го чита EDID, а два од нив се како што следува.
Проверете го дијагностичкиот екран на подигнувачот (само Raspberry Pi 4)
ЗАБЕЛЕШКА
Дијагностиката на подигнувачот бара неодамнешен подигнувач. Можете да ја надградите до најновата верзија користејќи ги овие упатства: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Отстранете ја SD-картичката и рестартирајте го Raspberry Pi. Притиснете ESC на екранот Install OS и дијагностичкиот екран треба да се појави на уредот за прикажување. На екранот треба да има линија која започнува со приказ: — на пр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 е поврзан уредот за прикажување до): cat /sys/class/drm/card?-HDMI-A-1/edid Ако нема папки со име картичка?-HDMI-A-1 или слично, тогаш веројатно нема да може да се прочита EDID од екранот уред.
ЗАБЕЛЕШКА
Во случај кога EDID се чита успешно, постои корисен виртуелен file во истата папка, наречена режими, која кога ќе се прикаже ги прикажува сите можни режими за кои EDID тврди дека ги поддржува уредот.
Ублажување
Неуспех во откривање на Hotplug Ако и фирмверот и KMS не успеат да најдат приклучен монитор, тоа може да биде дефект во откривањето на hotplug - т.е. Raspberry Pi не знае дека некој уред е вклучен, па затоа не проверува дали има EDID. Ова може да биде предизвикано од лош кабел или уред за прикажување што не го вметнува правилното приклучок. Може да присилите да открие hotplug со менување на командната линија на кернелот 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 за поставување откривање на 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
Создавање на а 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 не е присутен, можете да го подигнете уредот во не -КМС режим кој успева да се подигне на работната површина или конзолата, а потоа копирајте го EDID што фирмверот (се надеваме) успешно ќе го прочита на file.
- Подигнете се во застарен графички режим.
- Уредете го config.txt во партицијата за подигање, погрижете се да го извршите уредникот користејќи sudo и сменете ја линијата што вели dtoverlay=vc4-kms-v3d во #dtoverlay=vc4-kms-v3d.
- Рестартирај.
- Сега треба да се појави работната површина или конзолата за најавување.
- Користејќи го терминалот, копирајте го EDID од приложениот уред за прикажување на a file со следнава команда:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
Користење на а file-базиран EDID наместо да го испрашувате уредот за прикажување Уреди /boot/cmdline.txt, проверувајќи дали ќе го извршите уредникот користејќи sudo и додадете го следново во командната линија на кернелот: drm.edid_firmware=myedid.dat Можете да го примените EDID на специфична порта за HDMI како што следува: drm.edid_firmware=HDMI-A-1:myedid.dat Доколку е потребно, повторно подигнете се во режимот KMS, правејќи го следново:
- Уредете го config.txt во партицијата за подигање, погрижете се да го извршите уредникот користејќи sudo и сменете ја линијата што вели #dtoverlay=vc4-kms-v3d во dtoverlay=vc4-kms-v3d.
- Рестартирај.
ЗАБЕЛЕШКА
Ако користите а file-базиран EDID, но сепак имате проблеми со hotplug, можете да го присилите откривањето на hotplug со додавање на следново во командната линија на кернелот: video=HDMI-A-1:D.
Документи / ресурси
![]() |
Графички драјвер за излез за HDMI на RaspberryPi KMS [pdf] Упатство за користење KMS, Графички двигател за излез за HDMI, двигател за графички излез за HDMI, двигател за графички излез KMS, двигател за излез HDMI, двигател |