RaspberryPi-LOGO

RaspberryPi KMS HDMI-uitvoer grafische driver

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

Colofon

2020-2023 Raspberry Pi Ltd (voorheen Raspberry Pi (Trading) Ltd.) Deze documentatie valt onder een Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)-licentie. build-datum: 2023-02-10 build-versie: githash: c65fe9c-clean

Wettelijke disclaimer

TECHNISCHE EN BETROUWBAARHEIDSGEGEVENS VOOR RASPBERRY PI-PRODUCTEN (INCLUSIEF DATASHEETS) ZOALS VAN TIJD TOT TIJD WORDEN GEWIJZIGD (“BRONNEN”) WORDEN GELEVERD DOOR RASPBERRY PI LTD (“RPL”) “AS IS” EN ELKE EXPLICIETE OF IMPLICIETE GARANTIE, INCLUSIEF MAAR NIET BEPERKT WORDEN DE IMPLICIETE GARANTIES VAN VERKOOPBAARHEID EN GESCHIKTHEID VOOR EEN BEPAALD DOEL AFGEWEZEN. VOOR ZOVER MAXIMAAL TOEGESTAAN DOOR DE TOEPASSELIJKE WETGEVING IS RPL IN GEEN GEVAL AANSPRAKELIJK VOOR ENIGE DIRECTE, INDIRECTE, INCIDENTELE, SPECIALE, VOORBEELDSCHADE OF GEVOLGSCHADE (INCLUSIEF MAAR NIET BEPERKT TOT DE AANSCHAF VAN VERVANGENDE GOEDEREN OF DIENSTEN; VERLIES VAN GEBRUIK, GEGEVENSVERLIES) , OF WINST; OF BEDRIJFSONDERBREKING) WELKE OORZAAK OOK OORZAAK IS EN OP ELKE THEORIE VAN AANSPRAKELIJKHEID, HETZIJ IN CONTRACT, STRIKTE AANSPRAKELIJKHEID OF ONRECHTMATIGE DAAD (INCLUSIEF NALATIGHEID OF ANDERSZINS) DIE OP ENIGE WIJZE VOORTVLOEIT UIT HET GEBRUIK VAN DE MIDDELEN, ZELFS INDIEN OP DE HOOGTE GESTELD VAN DE MOGELIJKHEID VAN DERGELIJKE SCHADE. RPL behoudt zich het recht voor om op elk moment en zonder verdere kennisgeving verbeteringen, verbeteringen, correcties of andere wijzigingen aan te brengen aan de BRONNEN of producten die erin worden beschreven. De RESOURCES zijn bedoeld voor bekwame gebruikers met een geschikt niveau van ontwerpkennis. Gebruikers zijn als enige verantwoordelijk voor hun selectie en gebruik van de BRONNEN en elke toepassing van de daarin beschreven producten. Gebruiker stemt ermee in RPL schadeloos te stellen en te vrijwaren van alle aansprakelijkheden, kosten, schade of andere verliezen die voortvloeien uit het gebruik van de MIDDELEN. RPL verleent gebruikers toestemming om de MIDDELEN uitsluitend in combinatie met de Raspberry Pi-producten te gebruiken. Elk ander gebruik van de RESOURCES is verboden. Er wordt geen licentie verleend voor enige andere RPL of ander intellectueel eigendomsrecht van derden. ACTIVITEITEN MET EEN HOOG RISICO. Raspberry Pi-producten zijn niet ontworpen, vervaardigd of bedoeld voor gebruik in gevaarlijke omgevingen die storingsveilige prestaties vereisen, zoals bij de werking van nucleaire faciliteiten, vliegtuignavigatie- of communicatiesystemen, luchtverkeersleiding, wapensystemen of veiligheidskritische toepassingen (inclusief levensondersteunende systemen en andere medische apparaten), waarbij het falen van de producten direct kan leiden tot de dood, persoonlijk letsel of ernstige fysieke of milieuschade (“Activiteiten met een hoog risico”). RPL wijst uitdrukkelijk elke expliciete of impliciete garantie van geschiktheid voor activiteiten met een hoog risico af en aanvaardt geen aansprakelijkheid voor het gebruik of de opname van Raspberry Pi-producten in activiteiten met een hoog risico. Raspberry Pi-producten worden geleverd onder de standaardvoorwaarden van RPL. De terbeschikkingstelling door RPL van de HULPMIDDELEN vormt geen uitbreiding of wijziging van de standaardvoorwaarden van RPL, met inbegrip van maar niet beperkt tot de disclaimers en garanties die erin worden uitgedrukt.

Documentversiegeschiedenis

RaspberryPi-KMS-HDMI-uitgang-grafische kaart-driver-FIG-1

Omvang van document

Dit document is van toepassing op de volgende Raspberry Pi-producten

RaspberryPi-KMS-HDMI-uitgang-grafische kaart-driver-FIG-2

Invoering

Met de introductie van de KMS (Kernel Mode Setting) grafische driver, stapt Raspberry Pi Ltd over van legacy firmware-besturing van het video-uitvoersysteem naar een meer open source grafisch systeem. Dit heeft echter zijn eigen uitdagingen met zich meegebracht. Dit document is bedoeld om te helpen bij eventuele problemen die zich kunnen voordoen bij de overgang naar het nieuwe systeem. Deze whitepaper gaat ervan uit dat Raspberry Pi Raspberry Pi OS draait en volledig up-to-date is met de nieuwste firmware en kernels.

Terminologie

DRM's: Direct Rendering Manager, een subsysteem van de Linux-kernel dat wordt gebruikt om te communiceren met grafische verwerkingseenheden (GPU's). Gebruikt in samenwerking met FKMS en KMS.
DVI-signaal: Een voorloper van HDMI, maar zonder de audiomogelijkheden. Er zijn HDMI-naar-DVI-kabels en -adapters beschikbaar om een ​​Raspberry Pi-apparaat aan te sluiten op een met DVI uitgerust beeldscherm.
BEWERKEN: Uitgebreide display-identificatiegegevens. Een metadata-indeling voor weergaveapparaten om hun mogelijkheden aan een videobron te beschrijven. De EDID-gegevensstructuur omvat de naam en het serienummer van de fabrikant, het producttype, de fysieke schermgrootte en de timings die door het scherm worden ondersteund, samen met enkele minder bruikbare gegevens. Sommige beeldschermen kunnen defecte EDID-blokken hebben, wat problemen kan veroorzaken als deze defecten niet door het weergavesysteem worden afgehandeld.
FKMS (vc4-fkms-v3d): Fake Kernel Mode-instelling. Hoewel de firmware nog steeds de low-level hardware bestuurt (bijvample, de High-Definition Multimedia Interface (HDMI)-poorten, de Display Serial Interface (DSI), enz.) worden standaard Linux-bibliotheken gebruikt in de kernel zelf. FKMS wordt standaard gebruikt in Buster, maar is nu verouderd ten gunste van KMS in Bullseye.
HDMI: High-Definition Multimedia Interface is een gepatenteerde audio/video-interface voor het verzenden van ongecomprimeerde videogegevens en gecomprimeerde of ongecomprimeerde digitale audiogegevens.
HPD: Hotplug-detectie. Een fysieke draad die wordt bevestigd door een aangesloten weergaveapparaat om aan te geven dat deze aanwezig is.
KMS: Kernelmodus instellen; zien https://www.kernel.org/doc/html/latest/gpu/drm-kms.html voor meer details. Op Raspberry Pi is vc4-kms-v3d een stuurprogramma dat KMS implementeert en wordt vaak "het KMS-stuurprogramma" genoemd. Verouderde grafische stapel: een grafische stapel die volledig is geïmplementeerd in de VideoCore-firmware-blob die wordt weergegeven door een Linux framebuffer-stuurprogramma. De oude grafische stapel werd tot voor kort gebruikt in de meeste Raspberry Pi Ltd-apparaten; het wordt nu geleidelijk vervangen door (F)KMS/DRM.

Het HDMI-systeem en de grafische stuurprogramma's

Raspberry Pi-apparaten gebruiken de HDMI-standaard, die heel gebruikelijk is op moderne LCD-monitoren en televisies, voor video-uitvoer. Raspberry Pi 3 (inclusief Raspberry Pi 3B+) en eerdere apparaten hebben een enkele HDMI-poort, die in staat is tot 1920 × 1200 @60Hz output met behulp van een full-size HDMI-connector. Raspberry Pi 4 heeft twee micro-HDMI-poorten en is geschikt voor 4K-uitvoer op beide poorten. Afhankelijk van de configuratie is de HDMI 0-poort op de Raspberry Pi 4 geschikt voor maximaal 4kp60, maar als je twee 4K-uitvoerapparaten gebruikt, ben je beperkt tot p30 op beide apparaten. De grafische softwarestack, ongeacht de versie, is verantwoordelijk voor het ondervragen van aangesloten HDMI-apparaten op hun eigenschappen en het correct instellen van het HDMI-systeem. Legacy- en FKMS-stacks gebruiken beide firmware in de VideoCore grafische processor om te controleren op HDMI-aanwezigheid en -eigenschappen. KMS daarentegen gebruikt een volledig open source implementatie aan de ARM-zijde. Dit betekent dat de codebases voor de twee systemen totaal verschillend zijn, en in sommige omstandigheden kan dit resulteren in verschillend gedrag tussen de twee benaderingen. HDMI- en DVI-apparaten identificeren zichzelf bij het bronapparaat met behulp van een stuk metadata dat een EDID-blok wordt genoemd. Dit wordt door het bronapparaat uitgelezen van het weergaveapparaat via een I2C-verbinding, en dit is volledig transparant voor de eindgebruiker, net als de grafische stapel. Het EDID-blok bevat veel informatie, maar wordt voornamelijk gebruikt om aan te geven welke resoluties het beeldscherm ondersteunt, zodat Raspberry Pi kan worden ingesteld om een ​​geschikte resolutie uit te voeren.

Hoe HDMI wordt behandeld tijdens het opstarten

Wanneer Raspberry Pi voor het eerst wordt ingeschakeld, doorloopt hij een aantal secondentages, bekend als boot stagzijn:

  1. De eerste-stage, ROM-gebaseerde bootloader start de VideoCore GPU op.
  2. Tweede-stage bootloader (dit is bootcode.bin op de SD-kaart op apparaten ouder dan Raspberry Pi 4, en in SPI EEPROM op Raspberry Pi 4):
    1. Op Raspberry Pi 4, de seconde-stagDe bootloader start het HDMI-systeem op, onderzoekt het scherm naar mogelijke modi en stelt het scherm vervolgens op de juiste manier in. Op dit punt wordt het display gebruikt om diagnostische basisgegevens te verstrekken.
    2. Het diagnostische display van de bootloader (vanaf 07 december 2022) geeft de status weer van alle aangesloten displays (of Hotplug Detect (HPD) aanwezig is en of er een EDID-blok van het display is hersteld).
  3. De VideoCore-firmware (start.elf) wordt geladen en uitgevoerd. Dit neemt de besturing van het HDMI-systeem over, leest het EDID-blok van alle aangesloten beeldschermen en toont het regenboogscherm op die beeldschermen.
  4. De Linux-kernel wordt opgestart
    1. Tijdens het opstarten van de kernel neemt KMS de besturing van het HDMI-systeem over van de firmware. Wederom wordt het EDID-blok gelezen van alle aangesloten beeldschermen, en deze informatie wordt gebruikt om de Linux-console en desktop in te stellen.

Mogelijke problemen en symptomen

Het meest voorkomende storingssymptoom dat wordt ervaren bij het overstappen naar KMS is een aanvankelijk goede start, met het bootloader-scherm en vervolgens het regenboogscherm, gevolgd door een paar seconden gevolgd door het scherm dat zwart wordt en niet meer aangaat. Het punt waarop het scherm zwart wordt, is in feite het punt tijdens het opstartproces van de kernel wanneer het KMS-stuurprogramma het besturen van het scherm overneemt van de firmware. De Raspberry Pi werkt momenteel in alle opzichten behalve de HDMI-uitgang, dus als SSH is ingeschakeld, zou je via die route op het apparaat moeten kunnen inloggen. De groene toegangs-LED voor de SD-kaart zal meestal af en toe knipperen. Het is ook mogelijk dat je helemaal geen HDMI-uitvoer ziet; geen bootloader-weergave en geen regenboogscherm. Dit kan meestal worden toegeschreven aan een hardwarefout.

Diagnose van de fout

Helemaal geen HDMI-uitgang
Het is mogelijk dat het apparaat helemaal niet is opgestart, maar dit valt buiten het bestek van deze white paper. Ervan uitgaande dat het waargenomen gedrag een weergaveprobleem is, is het ontbreken van HDMI-uitvoer tijdens een deel van het opstartproces meestal te wijten aan een hardwarefout. Er zijn een aantal mogelijke opties:

  • Defecte HDMI-kabel
  • Probeer een nieuwe kabel. Sommige kabels, vooral zeer goedkope, bevatten mogelijk niet alle vereiste communicatielijnen (bijv. Hotplug) voor Raspberry Pi om het scherm met succes te detecteren.
  • Defecte HDMI-poort op Raspberry Pi
  • Als je een Raspberry Pi 4 gebruikt, probeer dan de andere HDMI-poort.
  • Defecte HDMI-poort op de monitor
  • Soms kan de HDMI-poort op een monitor of tv verslijten. Probeer een andere poort als het apparaat er een heeft.
  • In zeldzame gevallen levert een weergaveapparaat alleen EDID-gegevens wanneer het is ingeschakeld of wanneer de juiste poort is geselecteerd. Zorg ervoor dat het apparaat is ingeschakeld en dat de juiste ingangspoort is geselecteerd om dit te controleren.
  • Weergaveapparaat bevestigt de hotplug-detectieregel niet

Eerste uitvoer, daarna wordt het scherm zwart
Als het scherm verschijnt maar vervolgens uitgaat tijdens het opstarten van de Linux-kernel, zijn er een aantal mogelijke oorzaken, en deze hebben meestal te maken met een probleem met het lezen van de EDID vanaf het weergaveapparaat. Zoals te zien is in het bovenstaande gedeelte over de opstartvolgorde, wordt de EDID op een aantal verschillende punten gelezen tijdens het opstartproces, en elk van deze uitlezingen wordt gedaan door een ander stuk software. De laatste uitlezing, wanneer KMS het overneemt, wordt uitgevoerd door ongewijzigde upstream Linux-kernelcode, en deze kan defecte EDID-formaten niet zo goed verwerken als de eerdere firmwaresoftware. Dit is de reden waarom het display mogelijk niet meer correct werkt zodra KMS het overneemt. Er zijn een aantal manieren om te bevestigen of KMS de EDID niet kan lezen, en twee daarvan zijn als volgt.
Controleer het diagnostische scherm van de bootloader (alleen Raspberry Pi 4)

OPMERKING
Bootloader-diagnose vereist een recente bootloader. U kunt upgraden naar de nieuwste versie met behulp van deze instructies: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Verwijder de SD-kaart en start de Raspberry Pi opnieuw op. Druk op ESC op het scherm Install OS en het diagnostische scherm zou op het weergaveapparaat moeten verschijnen. Er zou een regel op het display moeten staan ​​die begint met display: — bijvoorbeeldampon:

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

Deze uitvoer van een Raspberry Pi 4 laat zien dat het systeem een ​​HDMI-scherm op HDMI-poort 0 heeft gedetecteerd, de hotplug-detectie is bevestigd en de EDID is OK gelezen. Er is niets gevonden op HDMI-poort 1.

Controleer of het KMS-systeem een ​​EDID heeft gedetecteerd
Om dit te controleren, moet u vanaf een andere computer inloggen op het Raspberry Pi-apparaat via SSH. SSH kan worden ingeschakeld bij het maken van een SD-kaartafbeelding met Raspberry Pi Imager, met behulp van de geavanceerde instellingenopties. SSH inschakelen op een SD-kaart waarop al een image is gemaakt, is iets ingewikkelder: u moet een andere computer gebruiken om een file met de naam ssh naar de opstartpartitie. Plaats de SD-kaart terug in de originele Raspberry Pi en schakel hem in. Dit zou SSH moeten inschakelen, met een IP-adres toegewezen door DHCP. Nadat u bent ingelogd, typt u het volgende bij de terminalprompt om de inhoud van elke gedetecteerde EDID weer te geven (mogelijk moet u HDMI-A-1 wijzigen in HDMI-A-2, afhankelijk van op welke HDMI-poort op de Raspberry Pi het weergaveapparaat is aangesloten to): cat /sys/class/drm/card?-HDMI-A-1/edid Als er geen mappen zijn met de naam card?-HDMI-A-1 of vergelijkbaar, dan is het waarschijnlijk dat er geen EDID kan worden gelezen van het scherm apparaat.

OPMERKING
In het geval dat de EDID met succes wordt gelezen, is er een nuttige virtuele file in dezelfde map, modi genoemd, die bij weergave alle mogelijke modi toont die de EDID beweert te ondersteunen door het apparaat.

Verzachtende maatregelen

Hotplug-detectiefout Als zowel de firmware als KMS een aangesloten monitor niet kunnen vinden, kan dit een hotplug-detectiefout zijn — dwz de Raspberry Pi weet niet dat er een apparaat is aangesloten en controleert dus niet op een EDID. Dit kan worden veroorzaakt door een slechte kabel of een weergaveapparaat dat hotplug niet correct bevestigt. U kunt een hotplug-detectie forceren door de opdrachtregel van de kernel te wijzigen file (cmdline.txt) die is opgeslagen in de opstartpartitie van een Raspberry Pi OS SD-kaart. U kunt dit bewerken file op een ander systeem, met de gewenste editor. Voeg het volgende toe aan het einde van cmdline.txt file: video=HDMI-A-1:1280×720@60D Als u de tweede HDMI-poort gebruikt, vervangt u HDMI-A-1 door HDMI-A-2. U kunt ook een andere resolutie en framesnelheid opgeven, maar zorg ervoor dat u degene kiest die het weergaveapparaat ondersteunt.

OPMERKING
Documentatie over de kernel-opdrachtregelinstellingen voor video is hier te vinden: https://www.kernel.org/doc/Documentation/fb/modedb.txt

WAARSCHUWING
Oudere grafische stapels ondersteunden het gebruik van een config.txt-item om hotplug-detectie in te stellen, maar op het moment van schrijven werkt dit niet met KMS. Het wordt mogelijk ondersteund in toekomstige firmwareversies. Het item config.txt is hdmi_force_hotplug en u kunt de specifieke HDMI-poort specificeren waarop de hotplug van toepassing is met behulp van hdmi_force_hotplug:0=1 of hdmi_force_hotplug:1=1. Merk op dat de nomenclatuur voor KMS verwijst naar de HDMI-poorten als 1 en 2, terwijl Raspberry Pi 0 en 1 gebruikt.

EDID-problemen
Een minderheid van weergaveapparaten kan geen EDID terugsturen als ze zijn uitgeschakeld of als de verkeerde AV-ingang is geselecteerd. Dit kan een probleem zijn wanneer de Raspberry Pi en de weergaveapparaten zich op dezelfde stekkerdoos bevinden en het Raspberry Pi-apparaat sneller opstart dan het scherm. Bij dergelijke apparaten moet u mogelijk handmatig een EDID opgeven. Nog ongebruikelijker is dat sommige weergaveapparaten EDID-blokken hebben die slecht zijn opgemaakt en niet kunnen worden geparseerd door het KMS EDID-systeem. Onder deze omstandigheden kan het mogelijk zijn om een ​​EDID van een apparaat met een vergelijkbare resolutie te lezen en dat te gebruiken. In beide gevallen wordt in de volgende instructies beschreven hoe een EDID van een weergaveapparaat moet worden gelezen en hoe KMS moet worden geconfigureerd om het te gebruiken, in plaats van dat KMS het apparaat rechtstreeks probeert te ondervragen.

Een EDID kopiëren naar een file
Een maken file het is meestal niet haalbaar om vanuit het niets EDID-metadata te bevatten, en het is veel gemakkelijker om een ​​bestaande te gebruiken. Het is over het algemeen mogelijk om een ​​EDID van een weergaveapparaat te verkrijgen en op de SD-kaart van de Raspberry Pi op te slaan, zodat het door KMS kan worden gebruikt in plaats van een EDID van het weergaveapparaat te krijgen. De eenvoudigste optie hier is om ervoor te zorgen dat het weergaveapparaat actief is en op de juiste AV-ingang staat, en dat de Raspberry Pi het HDMI-systeem correct heeft opgestart. Vanaf de terminal kunt u nu de EDID kopiëren naar een file met de volgende opdracht: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Als om de een of andere reden de EDID niet aanwezig is, kunt u het apparaat opstarten in een niet- -KMS-modus die erin slaagt op te starten naar de desktop of console, kopieer vervolgens de EDID die de firmware (hopelijk) met succes zal lezen naar een file.

  1. Opstarten naar verouderde grafische modus.
    1. Bewerk config.txt in de opstartpartitie, zorg ervoor dat u uw editor uitvoert met sudo, en verander de regel dtoverlay=vc4-kms-v3d in #dtoverlay=vc4-kms-v3d.
    2. Opnieuw opstarten.
  2. Het bureaublad of de inlogconsole zou nu moeten verschijnen.
    1. Kopieer met behulp van de terminal de EDID van het aangesloten weergaveapparaat naar een file met het volgende commando:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Met behulp van een file-gebaseerde EDID in plaats van het weergaveapparaat te ondervragen Bewerk /boot/cmdline.txt, zorg ervoor dat u uw editor uitvoert met sudo, en voeg het volgende toe aan de kernelopdrachtregel: drm.edid_firmware=myedid.dat U kunt de EDID toepassen op een specifieke HDMI-poort als volgt: drm.edid_firmware=HDMI-A-1:myedid.dat Start indien nodig opnieuw op in de KMS-modus door het volgende te doen:

  1. Bewerk config.txt in de opstartpartitie, zorg ervoor dat u uw editor uitvoert met sudo, en verander de regel die zegt #dtoverlay=vc4-kms-v3d in dtoverlay=vc4-kms-v3d.
  2. Opnieuw opstarten.

OPMERKING
Als u een file-gebaseerde EDID, maar nog steeds problemen hebt met hotplug, kunt u hotplug-detectie forceren door het volgende toe te voegen aan de kernelopdrachtregel: video=HDMI-A-1:D.

Documenten / Bronnen

RaspberryPi KMS HDMI-uitvoer grafische driver [pdf] Gebruikershandleiding
KMS, HDMI-uitvoer grafische driver, KMS HDMI-uitvoer, grafische driver, KMS HDMI-uitvoer grafische driver, stuurprogramma

Referenties

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *