RaspberryPi-LOGO

RaspberryPi KMS HDMI Uitset Grafiese Bestuurder

RaspberryPi-KMS-HDMI-Uitvoer-Graphics-Driver-PRODACT-IMG

Kolofon

2020-2023 Raspberry Pi Ltd (voorheen Raspberry Pi (Trading) Ltd.) Hierdie dokumentasie is gelisensieer onder 'n Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) lisensie. bou-datum: 2023-02-10 bou-weergawe: githash: c65fe9c-skoon

Wettige vrywaringskennisgewing

TEGNIESE EN BETROUBAARHEIDSDATA VIR RASPBERRY PI-PRODUKTE (INSLUITEND DATABLADE) SOOS VAN TYD TOT TYD GEWYSIG ("HULPBRONNE") WORD VERSKAF DEUR RASPBERRY PI BPK ("RPL") "SOOS IS" EN ENIGE UITDRUKKELIJKE OF INGESULDE, INGESULDE, INGESLUIT, NIE geïmpliseer nie. TOT, WORD DIE GEÏSPLISEERDE WAARBORGE VAN VERHANDELBAARHEID EN GESKIKTHEID VIR 'N SPESIFIEKE DOEL AFGEWYS. SAL RPL IN GEEN GEVAL AANSPREEKLIK WEES VIR ENIGE DIREKTE, INDIREKTE, TOEVALLE, SPESIALE, VOORBEELDE OF GEVOLLIKE SKADE (INSLUITEND, MAAR NIE BEPERK TOT, VERKRYWERS VAN GOEDE, VERKRYWER) IN DIE MAKSIMUM MAAT WAT DEUR TOEPASSELIJKE WET TOEGESTAAN WORD NIE; , DATA , Of winste; of onderbreking van sakeonderbrekings) egter veroorsaak en op enige teorie van aanspreeklikheid, hetsy in kontrak, streng aanspreeklikheid, of skadelike (insluitend nalatigheid of andersins) wat voortspruit uit die gebruik van die hulpbronne, selfs al is dit van die moontlikheid in kennis gestel. VAN SULKE SKADE. RPL behou die reg voor om enige verbeterings, verbeterings, regstellings of enige ander wysigings aan die HULPBRONNE of enige produkte wat daarin beskryf word, te eniger tyd en sonder verdere kennisgewing aan te bring. Die HULPBRONNE is bedoel vir geskoolde gebruikers met geskikte vlakke van ontwerpkennis. Gebruikers is alleen verantwoordelik vir hul keuse en gebruik van die HULPBRONNE en enige toepassing van die produkte wat daarin beskryf word. Gebruiker stem in om RPL te vrywaar en skadeloos te hou teen alle aanspreeklikhede, koste, skade of ander verliese wat voortspruit uit hul gebruik van die HULPBRONNE. RPL gee gebruikers toestemming om die HULPBRONNE te gebruik uitsluitlik in samewerking met die Raspberry Pi-produkte. Alle ander gebruik van die HULPBRONNE is verbode. Geen lisensie word aan enige ander EVL of ander derdeparty intellektuele eiendomsreg toegestaan ​​nie. HOË RISIKO AKTIWITEITE. Raspberry Pi-produkte is nie ontwerp, vervaardig of bedoel vir gebruik in gevaarlike omgewings wat faalveilige werkverrigting vereis nie, soos in die bedryf van kernfasiliteite, vliegtuignavigasie- of kommunikasiestelsels, lugverkeerbeheer, wapenstelsels of veiligheidskritieke toepassings (insluitend lewensondersteuning) stelsels en ander mediese toestelle), waarin die mislukking van die produkte direk tot die dood, persoonlike besering of ernstige fisiese of omgewingskade kan lei (“Hoërisiko-aktiwiteite”). RPL ontken spesifiek enige uitdruklike of geïmpliseerde waarborg van geskiktheid vir hoërisiko-aktiwiteite en aanvaar geen aanspreeklikheid vir die gebruik of insluiting van Raspberry Pi-produkte in hoërisiko-aktiwiteite nie. Raspberry Pi-produkte word verskaf onderhewig aan RPL se Standaardbepalings. RPL se voorsiening van die HULPBRONNE brei nie RPL se Standaardbepalings uit of wysig andersins nie, insluitend maar nie beperk tot die vrywarings en waarborge wat daarin uitgedruk word nie.

Dokument weergawe geskiedenis

RaspberryPi-KMS-HDMI-Uitvoer-Graphics-Driver-FIG-1

Omvang van dokument

Hierdie dokument is van toepassing op die volgende Raspberry Pi-produkte

RaspberryPi-KMS-HDMI-Uitvoer-Graphics-Driver-FIG-2

Inleiding

Met die bekendstelling van die KMS (Kernel Mode Setting) grafiese drywer, beweeg Raspberry Pi Bpk weg van verouderde firmwarebeheer van die video-uitsetstelsel en na 'n meer oopbron grafiese stelsel. Dit kom egter met sy eie stel uitdagings. Hierdie dokument is bedoel om te help met enige kwessies wat mag ontstaan ​​wanneer na die nuwe stelsel oorgeskakel word. Hierdie witskrif neem aan dat Raspberry Pi Raspberry Pi OS bedryf, en is ten volle op datum met die nuutste firmware en pitte.

Terminologie

DRM: Direct Rendering Manager, 'n substelsel van die Linux-kern wat gebruik word om met grafiese verwerkingseenhede (GPU's) te kommunikeer. Gebruik in vennootskap met FKMS en KMS.
DVI: 'N Voorganger van HDMI, maar sonder die klank vermoëns. HDMI-na-DVI-kabels en -adapters is beskikbaar om 'n Raspberry Pi-toestel aan 'n DVI-toegeruste skerm te koppel.
EDID: Uitgebreide vertoning-identifikasiedata. 'n Metadataformaat vir vertoontoestelle om hul vermoëns aan 'n videobron te beskryf. Die EDID-datastruktuur bevat vervaardigernaam en reeksnommer, produktipe, fisiese vertoongrootte en die tydsberekeninge wat deur die skerm ondersteun word, tesame met 'n paar minder bruikbare data. Sommige skerms kan defekte EDID-blokke hê, wat probleme kan veroorsaak as daardie defekte nie deur die vertoonstelsel hanteer word nie.
FKMS (vc4-fkms-v3d): Valse kernmodus-instelling. Terwyl die firmware steeds die laevlak hardeware beheer (bvample, die High-Definition Multimedia Interface (HDMI) poorte, die Display Serial Interface (DSI), ens.), word standaard Linux biblioteke in die kern self gebruik. FKMS word by verstek in Buster gebruik, maar word nou afgekeur ten gunste van KMS in Bullseye.
HDMI: Hoë-definisie multimedia-koppelvlak is 'n eie klank/video-koppelvlak vir die oordrag van ongecomprimeerde videodata, en saamgeperste of ongecomprimeerde digitale oudiodata.
HPD: Warmprop bespeur. 'n Fisiese draad wat deur 'n gekoppelde vertoontoestel beweer word om te wys dat dit teenwoordig is.
KMS: Kernel Mode-instelling; sien https://www.kernel.org/doc/html/latest/gpu/drm-kms.html vir meer besonderhede. Op Raspberry Pi is vc4-kms-v3d 'n bestuurder wat KMS implementeer, en word dikwels na verwys as "die KMS-bestuurder". Verouderde grafiese stapel: 'n Grafiese stapel wat heeltemal geïmplementeer is in die VideoCore-firmware-blob wat deur 'n Linux-raambuffer-bestuurder blootgestel is. Die verouderde grafiese stapel is tot onlangs in die meerderheid Raspberry Pi Bpk-toestelle gebruik; dit word nou geleidelik deur (F)KMS/DRM vervang.

Die HDMI-stelsel en die grafiese drywers

Raspberry Pi-toestelle gebruik die HDMI-standaard, wat baie algemeen is op moderne LCD-monitors en televisies, vir video-uitvoer. Raspberry Pi 3 (insluitend Raspberry Pi 3B+) en vroeër toestelle het 'n enkele HDMI-poort, wat in staat is om 1920 × 1200 @60Hz uitset met 'n volgrootte HDMI-aansluiting. Raspberry Pi 4 het twee mikro HDMI-poorte en is in staat om 4K-uitvoer op albei poorte te kry. Afhangende van die opstelling, is die HDMI 0-poort op Raspberry Pi 4 in staat tot 4kp60, maar wanneer jy twee 4K-uitvoertoestelle gebruik, word jy beperk tot p30 op albei toestelle. Die grafiese sagteware-stapel, ongeag die weergawe, is verantwoordelik vir die ondervraging van aangehegte HDMI-toestelle vir hul eienskappe, en die opstel van die HDMI-stelsel toepaslik. Legacy- en FKMS-stapels gebruik albei firmware in die VideoCore-grafiese verwerker om te kyk vir HDMI-teenwoordigheid en -eienskappe. Daarenteen gebruik KMS 'n heeltemal oopbron, ARM-kant-implementering. Dit beteken dat die kodebasisse vir die twee stelsels heeltemal verskil, en in sommige omstandighede kan dit lei tot verskillende gedrag tussen die twee benaderings. HDMI- en DVI-toestelle identifiseer hulself aan die brontoestel deur 'n stuk metadata wat 'n EDID-blok genoem word. Dit word deur die brontoestel vanaf die vertoontoestel gelees via 'n I2C-verbinding, en dit is heeltemal deursigtig vir die eindgebruiker aangesien dit deur die grafiese stapel gedoen word. Die EDID-blok bevat baie inligting, maar dit word hoofsaaklik gebruik om te spesifiseer watter resolusies die skerm ondersteun, dus kan Raspberry Pi opgestel word om 'n toepaslike resolusie uit te voer.

Hoe HDMI tydens selflaai hanteer word

Wanneer dit die eerste keer aangeskakel word, gaan Raspberry Pi deur 'n aantal stages, bekend as boot stages:

  1. Die eerste-stage, ROM-gebaseerde selflaaiprogram begin die VideoCore GPU.
  2. Tweede-stage selflaaiprogram (dit is bootcode.bin op die SD-kaart op toestelle voor Raspberry Pi 4, en in SPI EEPROM op Raspberry Pi 4):
    1. Op Raspberry Pi 4, die tweede-stagDie selflaaiprogram sal die HDMI-stelsel begin, die skerm ondersoek vir moontlike modusse, en dan die skerm gepas opstel. Op hierdie punt word die skerm gebruik om basiese diagnostiese data te verskaf.
    2. Die selflaaiprogram-diagnostiese skerm (07 Des 2022 en verder) sal die status van enige aangehegte skerms vertoon (of Hotplug Detect (HPD) teenwoordig is, en of 'n EDID-blok van die skerm af herwin is).
  3. Die VideoCore-firmware (start.elf) word gelaai en uitgevoer. Dit sal beheer van die HDMI-stelsel oorneem, die EDID-blok van enige aangehegte skerms lees en die reënboogskerm op daardie skerms wys.
  4. Die Linux-kern laai op
    1. Tydens kernselflaai sal KMS beheer van die HDMI-stelsel vanaf die firmware oorneem. Weereens word die EDID-blok vanaf enige aangehegte skerms gelees, en hierdie inligting word gebruik om die Linux-konsole en lessenaar op te stel.

Moontlike probleme en simptome

Die mees algemene mislukkingsimptoom wat ervaar word wanneer jy na KMS beweeg, is 'n aanvanklike goeie selflaai, met die selflaaiskerm en dan die reënboogskerm wat verskyn, gevolg na 'n paar sekondes deur die skerm wat swart word en nie weer aangaan nie. Die punt waarop die skerm swart word, is in werklikheid die punt tydens die kernselflaaiproses wanneer die KMS-bestuurder die skerm vanaf die firmware bestuur. Die Raspberry Pi werk tans in alle opsigte, behalwe vir die HDMI-uitset, so as SSH geaktiveer is, moet jy met daardie roete by die toestel kan aanmeld. Die groen SD-kaarttoegangs-LED sal gewoonlik af en toe flikker. Dit is ook moontlik dat jy glad geen HDMI-uitset sal sien nie; geen selflaaiprogramvertoning en geen reënboogskerm nie. Dit kan gewoonlik aan 'n hardewarefout toegeskryf word.

Diagnose van die fout

Geen HDMI-uitset nie
Dit is moontlik dat die toestel glad nie begin het nie, maar dit is buite die bevoegdheid van hierdie witskrif. As aanvaar word dat die waargenome gedrag 'n vertoonprobleem is, is die gebrek aan HDMI-uitset tydens enige deel van die selflaaiproses gewoonlik as gevolg van 'n hardewarefout. Daar is 'n aantal moontlike opsies:

  • Defekte HDMI-kabel
  • Probeer 'n nuwe kabel. Sommige kabels, veral baie goedkoop kabels, bevat dalk nie al die vereiste kommunikasielyne (bv. hotplug) vir Raspberry Pi om die skerm suksesvol op te spoor nie.
  • Defekte HDMI-poort op Raspberry Pi
  • As jy 'n Raspberry Pi 4 gebruik, probeer die ander HDMI-poort.
  • Defekte HDMI-poort op die monitor
  • Soms kan die HDMI-poort op 'n monitor of TV verslyt. Probeer 'n ander poort as die toestel een het.
  • Selde kan 'n vertoontoestel slegs EDID-data verskaf wanneer dit aangeskakel is, of wanneer die korrekte poort gekies is. Om seker te maak, maak seker dat die toestel aan is en dat die korrekte invoerpoort gekies is.
  • Vertoontoestel wat nie die hotplug-bespeurlyn bevestig nie

Aanvanklike uitvoer, dan word die skerm swart
As die skerm opkom, maar dan afgaan tydens Linux-kernlaai, is daar 'n aantal moontlike oorsake, en dit hou gewoonlik verband met 'n probleem wat die EDID vanaf die vertoontoestel lees. Soos gesien kan word uit die afdeling hierbo wat oor die opstartvolgorde handel, word die EDID op 'n aantal verskillende punte tydens die opstartproses gelees, en elkeen van hierdie leeswerk word deur 'n ander stuk sagteware gedoen. Die finale lees, wanneer KMS oorneem, word uitgevoer deur onveranderde stroomop Linux-kernkode, en dit hanteer nie gebrekkige EDID-formate sowel as die vroeëre firmware-sagteware nie. Dit is hoekom die skerm kan ophou om korrek te werk sodra KMS oorneem. Daar is 'n aantal maniere om te bevestig of KMS versuim om die EDID te lees, en twee hiervan is soos volg.
Gaan die selflaaiprogram-diagnostiese skerm na (slegs Raspberry Pi 4)

LET WEL
Selflaailaaier-diagnostiek vereis 'n onlangse selflaailaaier. Jy kan opgradeer na die nuutste weergawe deur hierdie instruksies te gebruik: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Verwyder die SD-kaart en herlaai die Raspberry Pi. Druk ESC op die Installeer OS-skerm, en die diagnostiese skerm moet op die vertoontoestel verskyn. Daar moet 'n reël op die skerm wees wat met vertoning begin: — bvample:

  • vertoon: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=geen #0

Hierdie uitset van 'n Raspberry Pi 4 wys dat die stelsel 'n HDMI-skerm op HDMI-poort 0 opgespoor het, die hotplug-detectie word beweer, en die EDID is OK gelees. Niks is op HDMI-poort 1 gevind nie.

Kontroleer of die KMS-stelsel 'n EDID opgespoor het
Om dit na te gaan, moet u vanaf 'n ander rekenaar by die Raspberry Pi-toestel aanmeld oor SSH. SSH kan geaktiveer word wanneer 'n SD-kaartbeeld met Raspberry Pi Imager geskep word, deur die Gevorderde instellingsopsies te gebruik. Om SSH te aktiveer op 'n SD-kaart wat reeds afgebeeld is, is 'n bietjie meer ingewikkeld: jy sal 'n ander rekenaar moet gebruik om 'n file genaamd ssh na die selflaaipartisie. Vervang die SD-kaart in die oorspronklike Raspberry Pi en skakel dit aan. Dit behoort SSH te aktiveer, met 'n IP-adres wat deur DHCP toegeken is. Sodra jy aangemeld is, tik die volgende by die terminaal-prompt in om die inhoud van enige EDID wat bespeur is te vertoon (jy sal dalk HDMI-A-1 na HDMI-A-2 moet verander, afhangende van watter HDMI-poort op die Raspberry Pi die vertoontoestel gekoppel is na): kat /sys/class/drm/card?-HDMI-A-1/edid As daar geen vouers met die naam card?-HDMI-A-1 of soortgelyk is nie, is dit waarskynlik dat geen EDID vanaf die skerm gelees kan word nie toestel.

LET WEL
In die geval waar die EDID suksesvol gelees word, is daar 'n nuttige virtuele file in dieselfde vouer, genoem modes, wat wanneer dit vertoon word al die moontlike modusse wys wat die EDID beweer die toestel ondersteun.

Versagtings

Warmprop-bespeurfout As beide die firmware en KMS nie 'n aangehegte monitor vind nie, kan dit 'n hotplug-opsporingsfout wees - maw die Raspberry Pi weet nie dat 'n toestel ingeprop is nie, so dit kyk nie vir 'n EDID nie. Dit kan veroorsaak word deur 'n slegte kabel, of 'n vertoontoestel wat nie die hotplug korrek bevestig nie. U kan 'n hotplug-detectie dwing deur die kernopdragreël te verander file (cmdline.txt) wat in die selflaaipartisie van 'n Raspberry Pi OS SD-kaart gestoor word. Jy kan dit wysig file op 'n ander stelsel, met enige redigeerder wat jy verkies. Voeg die volgende by die einde van die cmdline.txt file: video=HDMI-A-1:1280×720@60D As jy die tweede HDMI-poort gebruik, vervang HDMI-A-1 met HDMI-A-2. Jy kan ook 'n ander resolusie en raamtempo spesifiseer, maar maak seker dat jy een kies wat die skermtoestel ondersteun.

LET WEL
Dokumentasie oor die kernopdragreëlinstellings vir video kan hier gevind word: https://www.kernel.org/doc/Documentation/fb/modedb.txt

WAARSKUWING
Ouer grafiese stapels het die gebruik van 'n config.txt-inskrywing ondersteun om hotplug-detectie in te stel, maar op die oomblik van skryf werk dit nie met KMS nie. Dit kan dalk in toekomstige firmware-vrystellings ondersteun word. Die config.txt-inskrywing is hdmi_force_hotplug, en jy kan die spesifieke HDMI-poort spesifiseer waarop die hotplug van toepassing is met óf hdmi_force_hotplug:0=1 óf hdmi_force_hotplug:1=1. Let daarop dat die nomenklatuur vir KMS na die HDMI-poorte verwys as 1 en 2, terwyl Raspberry Pi 0 en 1 gebruik.

EDID probleme
'n Minderheid vertoontoestelle is nie in staat om 'n EDID terug te stuur as hulle afgeskakel is, of wanneer die verkeerde AV-invoer gekies is nie. Dit kan 'n probleem wees wanneer die Raspberry Pi en die vertoontoestelle op dieselfde kragstrook is, en die Raspberry Pi-toestel vinniger as die skerm begin. Met toestelle soos hierdie moet jy dalk 'n EDID handmatig verskaf. Selfs meer ongewoon, sommige vertoontoestelle het EDID-blokke wat sleg geformateer is en nie deur die KMS EDID-stelsel ontleed kan word nie. In hierdie omstandighede kan dit moontlik wees om 'n EDID vanaf 'n toestel met soortgelyke resolusie te lees en dit te gebruik. In beide gevalle, die volgende instruksies uiteensit hoe om 'n EDID vanaf 'n vertoontoestel te lees en KMS te konfigureer om dit te gebruik, in plaas daarvan dat KMS die toestel direk probeer ondervra.

Kopieer 'n EDID na 'n file
Die skep van 'n file om EDID-metadata van nuuts af te bevat, is gewoonlik nie haalbaar nie, en die gebruik van 'n bestaande een is baie makliker. Dit is oor die algemeen moontlik om 'n EDID vanaf 'n vertoontoestel te verkry en dit op die Raspberry Pi se SD-kaart te stoor sodat dit deur KMS gebruik kan word in plaas daarvan om 'n EDID van die vertoontoestel af te kry. Die maklikste opsie hier is om te verseker dat die vertoontoestel aan die gang is en op die regte AV-invoer is, en dat die Raspberry Pi die HDMI-stelsel korrek begin het. Vanaf die terminale kan jy nou die EDID kopieer na 'n file met die volgende opdrag: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat As die EDID om een ​​of ander rede nie teenwoordig is nie, kan jy die toestel selflaai in 'n nie -KMS-modus wat wel daarin slaag om na die lessenaar of konsole te begin, kopieer dan die EDID wat die firmware (hopelik) suksesvol sal lees na 'n file.

  1. Selflaai na verouderde grafiese modus.
    1. Wysig config.txt in die selflaaipartisie, maak seker dat jy jou redigeerder met sudo laat loop, en verander die reël wat sê dtoverlay=vc4-kms-v3d na #dtoverlay=vc4-kms-v3d.
    2. Herlaai.
  2. Die lessenaar of aanmeldkonsole moet nou verskyn.
    1. Gebruik die terminale en kopieer die EDID vanaf die aangehegte vertoontoestel na 'n file met die volgende opdrag:
  • tvservice -d myedid.dat sudo mv myeid.dat /lib/firmware/

Die gebruik van a file-gebaseerde EDID in plaas daarvan om die vertoontoestel te ondervra Edit /boot/cmdline.txt, maak seker dat jy jou redigeerder met sudo laat loop, en voeg die volgende by die kern-opdragreël: drm.edid_firmware=myedid.dat Jy kan die EDID toepas op 'n spesifieke HDMI-poort soos volg: drm.edid_firmware=HDMI-A-1:myedid.dat Indien nodig, selflaai terug na KMS-modus deur die volgende te doen:

  1. Wysig config.txt in selflaaipartisie, maak seker dat jy jou redigeerder met sudo laat loop, en verander die reël wat sê #dtoverlay=vc4-kms-v3d na dtoverlay=vc4-kms-v3d.
  2. Herlaai.

LET WEL
As jy a file-gebaseerde EDID, maar het steeds probleme met hotplug, jy kan hotplug-opsporing dwing deur die volgende by die kernopdragreël by te voeg: video=HDMI-A-1:D.

Dokumente / Hulpbronne

RaspberryPi KMS HDMI Uitset Grafiese Bestuurder [pdfGebruikershandleiding
KMS, HDMI-uitset grafiese drywer, KMS HDMI-uitset, grafiese drywer, KMS HDMI-uitset grafiese drywer, drywer

Verwysings

Los 'n opmerking

Jou e-posadres sal nie gepubliseer word nie. Vereiste velde is gemerk *