RaspberryPi KMS HDMI-udgang grafikdriver

Kolofon
2020-2023 Raspberry Pi Ltd (tidligere Raspberry Pi (Trading) Ltd.) Denne dokumentation er licenseret under en Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)-licens. build-dato: 2023-02-10 build-version: githash: c65fe9c-clean
Juridisk ansvarsfraskrivelse
TEKNISKE DATA OG PÅLIDELIGHED FOR RASPBERRY PI-PRODUKTER (INKLUSIVE DATABLAD) SOM ÆNDRET FRA TID TIL ANDEN (“RESOURCER”) LEVERES AF RASPBERRY PI LTD (“RPL”) “SOM DE ER” OG EVENTUELLE UDTRYKKELIGE ELLER UNDERFORSTÅET, UNDERFORSTÅET, UNDERFORSTÅET TIL ER DE UNDERFORSTÅEDE GARANTIER FOR SALGBARHED OG EGNETHED TIL ET BESTEMT FORMÅL FRASKRIFTLIG. I DET MAKSIMALTE OMFANG, DER ER TILLADET AF GÆLDENDE LOV, KAN RPL UNDER INGEN OMSTÆNDIGHEDER VÆRE ANSVARLIG FOR NOGEN DIREKTE, INDIREKTE, TILFÆLDELIGE, SÆRLIGE, EKSEMPEL- ELLER FØLGESKADER (INKLUSIVE, MEN IKKE BEGRÆNSET TIL, UDBYGNINGER, UDBYGNINGER, UDBYGNINGER, DATA ELLER FORTJENESTE ELLER VIRKSOMHEDSAFBRYDELSE) HVORDAN FORÅRSAGET OG PÅ ENHVER ANSVARSTEORI, HVIS I KONTRAKTER, STRIKT ANSVAR, ELLER ORGANISATION (HERunder Uagtsomhed ELLER ANDEN MÅDE), SOM ER OPSTÅET PÅ ENHVER MÅDE UD AF DET ANVENDELSE, AF SÅDAN SKADE. RPL forbeholder sig retten til at foretage eventuelle forbedringer, forbedringer, rettelser eller andre ændringer af RESSOURCERNE eller produkter beskrevet i dem til enhver tid og uden yderligere varsel. RESSOURCERNE er beregnet til dygtige brugere med passende niveauer af designviden. Brugerne er eneansvarlige for deres valg og brug af RESSOURCERNE og enhver anvendelse af produkterne beskrevet i dem. Brugeren indvilliger i at holde RPL skadesløs over for alle forpligtelser, omkostninger, skader eller andre tab, der opstår som følge af deres brug af RESSOURCER. RPL giver brugere tilladelse til at bruge RESSOURCER udelukkende i forbindelse med Raspberry Pi-produkterne. Al anden brug af RESSOURCERNE er forbudt. Der gives ingen licens til nogen anden RPL eller anden intellektuel ejendomsret fra tredjepart. AKTIVITETER MED HØJ RISIKO. Raspberry Pi-produkter er ikke designet, fremstillet eller beregnet til brug i farlige miljøer, der kræver fejlsikker ydeevne, såsom i driften af nukleare anlæg, flynavigations- eller kommunikationssystemer, lufttrafikkontrol, våbensystemer eller sikkerhedskritiske applikationer (inklusive livsstøtte). systemer og andet medicinsk udstyr), hvor svigt af produkterne kan føre direkte til død, personskade eller alvorlig fysisk eller miljømæssig skade ("Højrisikoaktiviteter"). RPL fraskriver sig specifikt enhver udtrykkelig eller underforstået garanti for egnethed til højrisikoaktiviteter og påtager sig intet ansvar for brug eller inklusion af Raspberry Pi-produkter i højrisikoaktiviteter. Raspberry Pi-produkter leveres underlagt RPLs standardvilkår. RPL's levering af RESSOURCERNE udvider eller på anden måde ændrer ikke RPL's standardvilkår, herunder men ikke begrænset til de ansvarsfraskrivelser og garantier, der er udtrykt i dem.
Dokumentversionshistorik

Dokumentets omfang
Dette dokument gælder for følgende Raspberry Pi-produkter

Indledning
Med introduktionen af KMS (Kernel Mode Setting) grafikdriveren bevæger Raspberry Pi Ltd sig væk fra ældre firmwarekontrol af videooutputsystemet og hen imod et mere open source-grafiksystem. Dette er dog kommet med sit eget sæt af udfordringer. Dette dokument er beregnet til at hjælpe med eventuelle problemer, der måtte opstå, når du flytter til det nye system. Dette hvidbog antager, at Raspberry Pi kører Raspberry Pi OS og er fuldt opdateret med den nyeste firmware og kerner.
Terminologi
DRM'er: Direct Rendering Manager, et undersystem af Linux-kernen, der bruges til at kommunikere med grafikprocessorenheder (GPU'er). Anvendes i samarbejde med FKMS og KMS.
DVI: En forgænger til HDMI, men uden lydmulighederne. HDMI til DVI-kabler og adaptere er tilgængelige til at forbinde en Raspberry Pi-enhed til en DVI-udstyret skærm.
EDID: Udvidet display-identifikationsdata. Et metadataformat til displayenheder til at beskrive deres muligheder til en videokilde. EDID-datastrukturen inkluderer producentens navn og serienummer, produkttype, fysisk skærmstørrelse og de timings, der understøttes af skærmen, sammen med nogle mindre nyttige data. Nogle skærme kan have defekte EDID-blokke, hvilket kan forårsage problemer, hvis disse defekter ikke håndteres af skærmsystemet.
FKMS (vc4-fkms-v3d): Indstilling af falsk kernetilstand. Mens firmwaren stadig styrer hardwaren på lavt niveau (f.eksample, High-Definition Multimedia Interface (HDMI)-portene, Display Serial Interface (DSI), osv.), bruges standard Linux-biblioteker i selve kernen. FKMS bruges som standard i Buster, men er nu forældet til fordel for KMS i Bullseye.
HDMI: High-Definition Multimedia Interface er en proprietær audio/video-grænseflade til transmission af ukomprimerede videodata og komprimerede eller ukomprimerede digitale lyddata.
HPD: Hotplug-registrering. En fysisk ledning, der påstås af en tilsluttet displayenhed for at vise, at den er til stede.
KMS: Kernel Mode Indstilling; se https://www.kernel.org/doc/html/latest/gpu/drm-kms.html for flere detaljer. På Raspberry Pi er vc4-kms-v3d en driver, der implementerer KMS, og omtales ofte som "KMS-driveren". Ældre grafikstak: En grafikstak, der er fuldt implementeret i VideoCore-firmware-blobben, som er eksponeret af en Linux-framebuffer-driver. Den ældre grafikstak er blevet brugt i de fleste Raspberry Pi Ltd-enheder indtil for nylig; den bliver nu gradvist erstattet af (F)KMS/DRM.
HDMI-systemet og grafikdriverne
Raspberry Pi-enheder bruger HDMI-standarden, som er meget almindelig på moderne LCD-skærme og fjernsyn, til videooutput. Raspberry Pi 3 (inklusive Raspberry Pi 3B+) og tidligere enheder har en enkelt HDMI-port, som er i stand til 1920 × 1200 @60Hz output ved hjælp af et HDMI-stik i fuld størrelse. Raspberry Pi 4 har to mikro HDMI-porte og er i stand til 4K-output på begge porte. Afhængigt af opsætningen er HDMI 0-porten på Raspberry Pi 4 i stand til op til 4kp60, men når du bruger to 4K-outputenheder, er du begrænset til p30 på begge enheder. Grafiksoftwarestakken er, uanset version, ansvarlig for at undersøge tilsluttede HDMI-enheder for deres egenskaber og opsætte HDMI-systemet korrekt. Legacy- og FKMS-stabler bruger begge firmware i VideoCore-grafikprocessoren til at tjekke for HDMI-tilstedeværelse og egenskaber. I modsætning hertil bruger KMS en fuldstændig open source, ARM-side implementering. Det betyder, at kodebaserne for de to systemer er helt forskellige, og i nogle tilfælde kan dette resultere i forskellig adfærd mellem de to tilgange. HDMI- og DVI-enheder identificerer sig selv over for kildeenheden ved hjælp af et stykke metadata kaldet en EDID-blok. Dette læses af kildeenheden fra displayenheden via en I2C-forbindelse, og dette er helt gennemsigtigt for slutbrugeren, da det gøres af grafikstakken. EDID-blokken indeholder en hel del information, men den bruges primært til at angive, hvilke opløsninger skærmen understøtter, så Raspberry Pi kan sættes op til at udsende en passende opløsning.
Sådan håndteres HDMI under opstart
Når den først tændes, gennemgår Raspberry Pi en række stages, kendt som boot stages:
- De første-stage, ROM-baseret bootloader starter VideoCore GPU'en.
- Anden-stage bootloader (dette er bootcode.bin på SD-kortet på enheder før Raspberry Pi 4 og i SPI EEPROM på Raspberry Pi 4):
- På Raspberry Pi 4, den anden-stagOpstartsindlæseren vil starte HDMI-systemet, undersøge skærmen for mulige tilstande og derefter indstille skærmen korrekt. På dette tidspunkt bruges displayet til at levere grundlæggende diagnostiske data.
- Bootloaderens diagnostiske display (07. december 2022 og frem) vil vise status for eventuelle tilsluttede skærme (om Hotplug Detect (HPD) er til stede, og om en EDID-blok blev gendannet fra skærmen).
- VideoCore-firmwaren (start.elf) indlæses og køres. Dette vil overtage kontrollen over HDMI-systemet, læse EDID-blokken fra eventuelle tilsluttede skærme og vise regnbueskærmen på disse skærme.
- Linux-kernen starter
- Under kernestart vil KMS overtage kontrollen over HDMI-systemet fra firmwaren. Endnu en gang læses EDID-blokken fra eventuelle vedhæftede skærme, og denne information bruges til at opsætte Linux-konsollen og skrivebordet.
Mulige problemer og symptomer
Det mest almindelige fejlsymptom, der opleves, når man flytter til KMS, er en indledningsvis god opstart, hvor bootloader-skærmen og derefter regnbueskærmen vises, efterfulgt efter et par sekunder af, at skærmen bliver sort og ikke tændes igen. Det punkt, hvor skærmen bliver sort, er faktisk det punkt under kerneopstartsprocessen, hvor KMS-driveren overtager kørsel af skærmen fra firmwaren. Raspberry Pi kører i øjeblikket i alle henseender bortset fra HDMI-udgangen, så hvis SSH er aktiveret, bør du være i stand til at logge ind på enheden ad den vej. Den grønne SD-kortadgangs-LED vil normalt flimre lejlighedsvis. Det er også muligt, at du slet ikke vil se noget HDMI-output; ingen bootloader-skærm og ingen regnbueskærm. Dette kan normalt tilskrives en hardwarefejl.
Diagnosticering af fejlen
Ingen HDMI-udgang overhovedet
Det er muligt, at enheden slet ikke er startet, men dette er uden for dette hvidbogs kompetenceområde. Hvis man antager, at den observerede adfærd er et skærmproblem, skyldes manglen på HDMI-output under enhver del af opstartsprocessen normalt en hardwarefejl. Der er en række mulige muligheder:
- Defekt HDMI kabel
- Prøv et nyt kabel. Nogle kabler, især meget billige, indeholder muligvis ikke alle de nødvendige kommunikationslinjer (f.eks. hotplug) for at Raspberry Pi kan registrere skærmen.
- Defekt HDMI-port på Raspberry Pi
- Hvis du bruger en Raspberry Pi 4, så prøv den anden HDMI-port.
- Defekt HDMI-port på skærmen
- Nogle gange kan HDMI-porten på en skærm eller et tv blive slidt. Prøv en anden port, hvis enheden har en.
- Sjældent kan en displayenhed kun levere EDID-data, når den er tændt, eller når den korrekte port er valgt. Kontroller, at enheden er tændt, og at den korrekte inputport er valgt.
- Displayenhed hævder ikke hotplug-detektionslinjen
Indledende output, derefter bliver skærmen sort
Hvis skærmen kommer op, men derefter slukker under Linux-kernestart, er der en række mulige årsager, og disse er normalt relateret til et problem med at læse EDID'en fra skærmenheden. Som det kan ses af afsnittet ovenfor, der omhandler opstartssekvensen, læses EDID på en række forskellige punkter under opstartsprocessen, og hver af disse læsninger udføres af et andet stykke software. Den sidste læsning, når KMS tager over, udføres af uændret opstrøms Linux-kernekode, og denne håndterer ikke defekte EDID-formater såvel som den tidligere firmwaresoftware. Dette er grunden til, at skærmen kan stoppe med at fungere korrekt, når KMS tager over. Der er flere måder at bekræfte, om KMS ikke kan læse EDID, og to af disse er som følger.
Tjek bootloader-diagnoseskærmen (kun Raspberry Pi 4)
NOTE
Bootloader-diagnostik kræver en nylig bootloader. Du kan opgradere til den nyeste version ved at følge disse instruktioner: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Fjern SD-kortet og genstart Raspberry Pi. Tryk på ESC på Install OS-skærmen, og diagnosticeringsskærmen skulle vises på displayenheden. Der skal være en linje på displayet, der starter med display: — f.eksampdet:
- vise: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=ingen #0
Dette output fra en Raspberry Pi 4 viser, at systemet har registreret en HDMI-skærm på HDMI-port 0, hotplug-detektionen hævdes, og EDID blev læst OK. Der blev ikke fundet noget på HDMI-port 1.
Kontroller, om KMS-systemet har registreret en EDID
For at kontrollere dette skal du logge ind på Raspberry Pi-enheden over SSH fra en anden computer. SSH kan aktiveres, når du opretter et SD-kortbillede med Raspberry Pi Imager, ved at bruge indstillingerne for Avancerede indstillinger. Aktivering af SSH på et SD-kort, der allerede er blevet afbildet, er lidt mere kompliceret: du skal bruge en anden computer for at tilføje en file navngivet ssh til boot-partitionen. Udskift SD-kortet i den originale Raspberry Pi og tænd for det. Dette skulle aktivere SSH med en IP-adresse tildelt af DHCP. Når du er logget ind, skal du indtaste følgende ved terminalprompten for at få vist indholdet af ethvert EDID, der er fundet (du skal muligvis ændre HDMI-A-1 til HDMI-A-2 afhængigt af hvilken HDMI-port på Raspberry Pi skærmenheden er tilsluttet til): kat /sys/class/drm/card?-HDMI-A-1/edid Hvis der ikke er nogen mapper med navnet card?-HDMI-A-1 eller lignende, er det sandsynligt, at ingen EDID kunne læses fra skærmen enhed.
NOTE
I det tilfælde, hvor EDID'et læses med succes, er der en nyttig virtuel file i samme mappe, kaldet tilstande, som når de vises viser alle de mulige tilstande, som EDID hævder, at enheden understøtter.
Afbødninger
Hotplug-detekteringsfejl Hvis både firmwaren og KMS ikke kan finde en tilsluttet skærm, kan det være en hotplug-detekteringsfejl - dvs. Raspberry Pi ved ikke, at en enhed er blevet tilsluttet, så den søger ikke efter en EDID. Dette kan være forårsaget af et dårligt kabel eller en skærmenhed, der ikke hævder hotpluggen korrekt. Du kan tvinge en hotplug-detektion ved at ændre kernens kommandolinje file (cmdline.txt), der er gemt i opstartspartitionen på et Raspberry Pi OS SD-kort. Du kan redigere dette file på et andet system, ved at bruge den editor, du foretrækker. Tilføj følgende til slutningen af cmdline.txt file: video=HDMI-A-1:1280×720@60D Hvis du bruger den anden HDMI-port, skal du udskifte HDMI-A-1 med HDMI-A-2. Du kan også angive en anden opløsning og billedhastighed, men sørg for at vælge dem, som skærmenheden understøtter.
NOTE
Dokumentation om kernens kommandolinjeindstillinger for video kan findes her: https://www.kernel.org/doc/Documentation/fb/modedb.txt
ADVARSEL
Ældre grafikstakke understøttede brugen af en config.txt-indgang til at indstille hotplug-detektion, men i skrivende stund virker dette ikke med KMS. Det kan blive understøttet i fremtidige firmwareudgivelser. Config.txt-indgangen er hdmi_force_hotplug, og du kan angive den specifikke HDMI-port, som hotpluggen gælder for, ved at bruge enten hdmi_force_hotplug:0=1 eller hdmi_force_hotplug:1=1. Bemærk, at nomenklaturen for KMS refererer til HDMI-portene som 1 og 2, mens Raspberry Pi bruger 0 og 1.
EDID problemer
Et mindretal af displayenheder er ude af stand til at returnere en EDID, hvis de er slukket, eller når den forkerte AV-indgang er valgt. Dette kan være et problem, når Raspberry Pi og skærmenhederne er på den samme strømskinne, og Raspberry Pi-enheden starter hurtigere end skærmen. Med enheder som denne skal du muligvis angive et EDID manuelt. Endnu mere usædvanligt har nogle displayenheder EDID-blokke, der er dårligt formaterede og ikke kan parses af KMS EDID-systemet. Under disse omstændigheder kan det være muligt at læse en EDID fra en enhed med lignende opløsning og bruge den. I begge tilfælde beskriver følgende instruktioner, hvordan man læser et EDID fra en skærmenhed og konfigurerer KMS til at bruge det, i stedet for at KMS forsøger at udspørge enheden direkte.
Kopiering af en EDID til en file
Oprettelse af en file at indeholde EDID-metadata fra bunden er normalt ikke muligt, og det er meget nemmere at bruge en eksisterende. Det er generelt muligt at få et EDID fra en displayenhed og gemme det på Raspberry Pi's SD-kort, så det kan bruges af KMS i stedet for at få et EDID fra displayenheden. Den nemmeste mulighed her er at sikre, at skærmenheden er oppe og køre og på den korrekte AV-indgang, og at Raspberry Pi har startet HDMI-systemet korrekt op. Fra terminalen kan du nu kopiere EDID til en file med følgende kommando: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Hvis EDID'et af en eller anden grund ikke er til stede, kan du starte enheden i en ikke -KMS-tilstand, der lykkes med at starte op til skrivebordet eller konsollen, og kopier derefter den EDID, som firmwaren (forhåbentlig) med succes vil læse til en file.
- Start til ældre grafiktilstand.
- Rediger config.txt i boot-partitionen, sørg for at køre din editor ved hjælp af sudo, og skift linjen, der siger dtoverlay=vc4-kms-v3d til #dtoverlay=vc4-kms-v3d.
- Genstart.
- Skrivebordet eller login-konsollen skulle nu vises.
- Brug terminalen til at kopiere EDID'et fra den tilsluttede displayenhed til en file med følgende kommando:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
Ved hjælp af en file-baseret EDID i stedet for at forespørge visningsenheden Rediger /boot/cmdline.txt, sørg for at køre din editor ved hjælp af sudo, og tilføj følgende til kernens kommandolinje: drm.edid_firmware=myedid.dat Du kan anvende EDID'et til en specifik HDMI-port som følger: drm.edid_firmware=HDMI-A-1:myedid.dat Hvis det er nødvendigt, start tilbage til KMS-tilstand ved at gøre følgende:
- Rediger config.txt i boot-partitionen, sørg for at køre din editor ved hjælp af sudo, og skift linjen, der siger #dtoverlay=vc4-kms-v3d til dtoverlay=vc4-kms-v3d.
- Genstart.
NOTE
Hvis du bruger en file-baseret EDID, men stadig har problemer med hotplug, kan du tvinge hotplug-detektion ved at tilføje følgende til kernens kommandolinje: video=HDMI-A-1:D.
Dokumenter/ressourcer
![]() |
RaspberryPi KMS HDMI-udgang grafikdriver [pdfBrugermanual KMS, HDMI Output Grafik Driver, KMS HDMI Output, Grafik Driver, KMS HDMI Output Grafik Driver, Driver |





