RaspberryPi-LOGO

RaspberryPi KMS HDMI-utgang grafikkdriver

RaspberryPi-KMS-HDMI-utgang-grafikk-driver-PRODACT-IMG

Kolofon

2020-2023 Raspberry Pi Ltd (tidligere Raspberry Pi (Trading) Ltd.) Denne dokumentasjonen er lisensiert under en Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)-lisens. byggedato: 2023-02-10 byggeversjon: githash: c65fe9c-clean

Juridisk ansvarsfraskrivelse

TEKNISKE DATA OG PÅLITELIGHETSDATA FOR RASPBERRY PI-PRODUKTER (INKLUDERT DATABLAD) SOM ENDRET FRA TIDEN TIL TIDEN (“RESURSER”) LEVERES AV RASPBERRY PI LTD (“RPL”) “SOM DE ER” OG EVENTUELLE UTTRYKKELIGE ELLER UNDERFORSTÅTTE, UNDERFORSTÅET TIL FRASVISES DE UNDERFORSTÅTE GARANTIER OM SALGBARHET OG EGNETHET FOR ET BESTEMT FORMÅL. I DEN MAKSIMALE UTREDNING SOM TILLATES AV GJELDENDE LOV, SKAL RPL IKKE UNDER OMSTENDIGHETER VÆRE ANSVARLIG FOR EVENTUELLE DIREKTE, INDIREKTE, TILFELDIGE, SPESIELLE, EKSEMPELISKE ELLER FØLGESKADER (INKLUDERT, MEN IKKE BEGRENSET TIL GOD, LEVERANDØR AV OSS; , ELLER FORTJENESTE; ELLER FORRETNINGSAVBRUTT) HVORDAN FORÅRSAKET OG PÅ ENHVER MÅTE OM ANSVAR, ENTEN I KONTRAKT, STRIKT ANSVAR, ELLER TORT (INKLUDERT UAKTIVITET ELLER ANNET) SOM OPPSTÅR PÅ NOEN MÅTE UT AV DETTE SOM ER VED BRUKEN. AV SLIK SKADE. RPL forbeholder seg retten til å foreta eventuelle forbedringer, forbedringer, rettelser eller andre modifikasjoner av RESSURSENE eller produkter beskrevet i dem når som helst og uten ytterligere varsel. RESSURSENE er ment for dyktige brukere med passende nivåer av designkunnskap. Brukere er alene ansvarlige for deres valg og bruk av RESSURSENE og enhver bruk av produktene beskrevet i dem. Brukeren godtar å holde RPL skadesløs mot alt ansvar, kostnader, skader eller andre tap som oppstår som følge av deres bruk av RESSURSENE. RPL gir brukere tillatelse til å bruke RESSURSENE utelukkende i forbindelse med Raspberry Pi-produktene. All annen bruk av RESSURSENE er forbudt. Ingen lisens gis til noen annen RPL eller annen tredjeparts immaterielle rettigheter. AKTIVITETER MED HØY RISIKO. Raspberry Pi-produkter er ikke designet, produsert eller beregnet for bruk i farlige miljøer som krever feilsikker ytelse, for eksempel ved drift av kjernefysiske anlegg, flynavigasjons- eller kommunikasjonssystemer, lufttrafikkkontroll, våpensystemer eller sikkerhetskritiske applikasjoner (inkludert livsoppretting). systemer og annet medisinsk utstyr), der svikt i produktene kan føre direkte til død, personskade eller alvorlig fysisk skade eller miljøskade («Høyrisikoaktiviteter»). RPL fraskriver seg spesifikt enhver uttrykt eller underforstått garanti om egnethet for høyrisikoaktiviteter og påtar seg intet ansvar for bruk eller inkludering av Raspberry Pi-produkter i høyrisikoaktiviteter. Raspberry Pi-produkter leveres underlagt RPLs standardvilkår. RPLs levering av RESSURSENE utvider eller endrer ikke RPLs standardvilkår inkludert, men ikke begrenset til, ansvarsfraskrivelsene og garantiene som er uttrykt i dem.

Dokumentversjonshistorikk

RaspberryPi-KMS-HDMI-utgang-grafikk-driver-FIG-1

Dokumentets omfang

Dette dokumentet gjelder for følgende Raspberry Pi-produkter

RaspberryPi-KMS-HDMI-utgang-grafikk-driver-FIG-2

Introduksjon

Med introduksjonen av KMS (Kernel Mode Setting) grafikkdriver, beveger Raspberry Pi Ltd seg bort fra eldre fastvarekontroll av videoutgangssystemet og mot et mer åpen kildekode-grafikksystem. Dette har imidlertid kommet med sine egne utfordringer. Dette dokumentet er ment å hjelpe med eventuelle problemer som kan oppstå ved overgang til det nye systemet. Denne whitepaperen antar at Raspberry Pi kjører Raspberry Pi OS, og er fullt oppdatert med den nyeste fastvaren og kjernene.

Terminologi

DRM: Direct Rendering Manager, et undersystem av Linux-kjernen som brukes til å kommunisere med grafikkbehandlingsenheter (GPUer). Brukes i samarbeid med FKMS og KMS.
DVI: En forgjenger til HDMI, men uten lydmulighetene. HDMI til DVI-kabler og adaptere er tilgjengelige for å koble en Raspberry Pi-enhet til en DVI-utstyrt skjerm.
EDID: Utvidet skjermidentifikasjonsdata. Et metadataformat for skjermenheter for å beskrive deres evner til en videokilde. EDID-datastrukturen inkluderer produsentens navn og serienummer, produkttype, fysisk skjermstørrelse og tidspunktene som støttes av skjermen, sammen med noen mindre nyttige data. Noen skjermer kan ha defekte EDID-blokker, noe som kan forårsake problemer hvis disse defektene ikke håndteres av skjermsystemet.
FKMS (vc4-fkms-v3d): Innstilling for falsk kjernemodus. Mens fastvaren fortsatt kontrollerer lavnivå-maskinvaren (f.eksample, High-Definition Multimedia Interface (HDMI)-portene, Display Serial Interface (DSI), etc.), brukes standard Linux-biblioteker i selve kjernen. FKMS brukes som standard i Buster, men er nå avviklet til fordel for KMS i Bullseye.
HDMI: High-Definition Multimedia Interface er et proprietært audio/video-grensesnitt for overføring av ukomprimerte videodata og komprimerte eller ukomprimerte digitale lyddata.
HPD: Hotplugg oppdager. En fysisk ledning som hevdes av en tilkoblet skjermenhet for å vise at den er til stede.
KMS: Innstilling for kjernemodus; se https://www.kernel.org/doc/html/latest/gpu/drm-kms.html for flere detaljer. På Raspberry Pi er vc4-kms-v3d en driver som implementerer KMS, og blir ofte referert til som "KMS-driveren". Eldre grafikkstabel: En grafikkstabel som er fullstendig implementert i VideoCore-fastvareblokken eksponert av en Linux-rammebufferdriver. Den eldre grafikkstakken har blitt brukt i de fleste Raspberry Pi Ltd-enheter inntil nylig; den erstattes nå gradvis av (F)KMS/DRM.

HDMI-systemet og grafikkdriverne

Raspberry Pi-enheter bruker HDMI-standarden, som er veldig vanlig på moderne LCD-skjermer og TV-er, for videoutgang. Raspberry Pi 3 (inkludert Raspberry Pi 3B+) og tidligere enheter har én enkelt HDMI-port, som er i stand til 1920 × 1200 @60Hz utgang ved hjelp av en full-størrelse HDMI-kontakt. Raspberry Pi 4 har to mikro HDMI-porter, og er i stand til 4K-utgang på begge portene. Avhengig av oppsett er HDMI 0-porten på Raspberry Pi 4 i stand til opptil 4kp60, men når du bruker to 4K-utgangsenheter er du begrenset til p30 på begge enhetene. Grafikkprogramvarestabelen, uavhengig av versjon, er ansvarlig for å spørre tilkoblede HDMI-enheter for deres egenskaper, og sette opp HDMI-systemet på riktig måte. Legacy- og FKMS-stabler bruker begge fastvare i VideoCore-grafikkprosessoren for å se etter HDMI-tilstedeværelse og egenskaper. Derimot bruker KMS en helt åpen kildekode, ARM-sideimplementering. Dette betyr at kodebasene for de to systemene er helt forskjellige, og i noen tilfeller kan dette resultere i ulik oppførsel mellom de to tilnærmingene. HDMI- og DVI-enheter identifiserer seg for kildeenheten ved hjelp av et stykke metadata som kalles en EDID-blokk. Dette leses av kildeenheten fra skjermenheten via en I2C-tilkobling, og dette er helt gjennomsiktig for sluttbrukeren ettersom det gjøres av grafikkstakken. EDID-blokken inneholder mye informasjon, men den brukes først og fremst til å spesifisere hvilke oppløsninger skjermen støtter, så Raspberry Pi kan settes opp til å gi en passende oppløsning.

Hvordan HDMI håndteres under oppstart

Når den først slås på, går Raspberry Pi gjennom en rekke stages, kjent som boot stages:

  1. De første-stage, ROM-basert bootloader starter opp VideoCore GPU.
  2. Andre-stage bootloader (dette er bootcode.bin på SD-kortet på enheter før Raspberry Pi 4, og i SPI EEPROM på Raspberry Pi 4):
    1. På Raspberry Pi 4, andre-stagBootloaderen vil starte opp HDMI-systemet, spørre skjermen for mulige moduser, og deretter sette opp skjermen på riktig måte. På dette tidspunktet brukes displayet til å gi grunnleggende diagnostiske data.
    2. Oppstartslasterens diagnostiske skjerm (07. desember 2022 og utover) vil vise statusen til eventuelle tilkoblede skjermer (om Hotplug Detect (HPD) er til stede, og om en EDID-blokk ble gjenopprettet fra skjermen).
  3. VideoCore-fastvaren (start.elf) lastes inn og kjøres. Dette vil ta over kontrollen over HDMI-systemet, lese EDID-blokken fra eventuelle tilkoblede skjermer og vise regnbueskjermen på disse skjermene.
  4. Linux-kjernen starter opp
    1. Under kjerneoppstart vil KMS ta over kontrollen over HDMI-systemet fra fastvaren. Nok en gang leses EDID-blokken fra eventuelle vedlagte skjermer, og denne informasjonen brukes til å sette opp Linux-konsollen og skrivebordet.

Mulige problemer og symptomer

Det vanligste feilsymptomet som oppleves når du flytter til KMS er en i utgangspunktet god oppstart, med oppstartslasterskjermen og deretter regnbueskjermen som vises, etterfulgt etter noen sekunder av at skjermen blir svart og ikke kommer på igjen. Punktet der skjermen blir svart er faktisk punktet under kjerneoppstartsprosessen når KMS-driveren overtar å kjøre skjermen fra fastvaren. Raspberry Pi kjører for øyeblikket på alle måter bortsett fra HDMI-utgangen, så hvis SSH er aktivert, bør du kunne logge på enheten via den ruten. Den grønne LED-lampen for SD-kort vil vanligvis flimre av og til. Det er også mulig at du ikke ser noen HDMI-utgang i det hele tatt; ingen bootloader-skjerm, og ingen regnbueskjerm. Dette kan vanligvis tilskrives en maskinvarefeil.

Diagnostisere feilen

Ingen HDMI-utgang i det hele tatt
Det er mulig at enheten ikke har startet opp i det hele tatt, men dette er utenfor oppgaven til denne hvitboken. Forutsatt at den observerte oppførselen er et skjermproblem, skyldes mangelen på HDMI-utgang under noen del av oppstartsprosessen vanligvis en maskinvarefeil. Det er en rekke mulige alternativer:

  • Defekt HDMI-kabel
  • Prøv en ny kabel. Noen kabler, spesielt veldig billige, inneholder kanskje ikke alle nødvendige kommunikasjonslinjer (f.eks. hotplug) for at Raspberry Pi skal kunne gjenkjenne skjermen.
  • Defekt HDMI-port på Raspberry Pi
  • Hvis du bruker en Raspberry Pi 4, prøv den andre HDMI-porten.
  • Defekt HDMI-port på skjermen
  • Noen ganger kan HDMI-porten på en skjerm eller TV slites ut. Prøv en annen port hvis enheten har en.
  • Sjelden kan en skjermenhet bare gi EDID-data når den er slått på, eller når riktig port er valgt. For å sjekke, sørg for at enheten er på og at riktig inngangsport er valgt.
  • Visningsenhet som ikke bekrefter hotplugg-deteksjonslinjen

Første utgang, deretter blir skjermen svart
Hvis skjermen kommer opp, men deretter slukkes under oppstart av Linux-kjernen, er det en rekke mulige årsaker, og disse er vanligvis relatert til et problem med å lese EDID fra skjermenheten. Som man kan se fra avsnittet ovenfor som omhandler oppstartssekvensen, leses EDID på en rekke forskjellige punkter under oppstartsprosessen, og hver av disse lesingene gjøres av et annet stykke programvare. Den siste lesingen, når KMS tar over, utføres av uendret oppstrøms Linux-kjernekode, og denne håndterer ikke defekte EDID-formater så vel som den tidligere fastvareprogramvaren. Dette er grunnen til at skjermen kan slutte å fungere som den skal når KMS tar over. Det er flere måter å bekrefte om KMS ikke klarer å lese EDID, og ​​to av disse er som følger.
Sjekk bootloader-diagnoseskjermen (bare Raspberry Pi 4)

NOTE
Oppstartslasterdiagnostikk krever en nylig oppstartslaster. Du kan oppgradere til den nyeste versjonen ved å bruke disse instruksjonene: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Ta ut SD-kortet og start Raspberry Pi på nytt. Trykk på ESC på Install OS-skjermen, og diagnoseskjermen skal vises på skjermenheten. Det skal være en linje på displayet som begynner med display: — f.eksampde:

  • utstilling: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=ingen #0

Denne utgangen fra en Raspberry Pi 4 viser at systemet oppdaget en HDMI-skjerm på HDMI-port 0, hotplugg-deteksjonen er hevdet, og EDID-en ble lest OK. Ingenting ble funnet på HDMI-port 1.

Sjekk om KMS-systemet har oppdaget en EDID
For å sjekke dette må du logge på Raspberry Pi-enheten over SSH fra en annen datamaskin. SSH kan aktiveres når du oppretter et SD-kortbilde med Raspberry Pi Imager, ved å bruke alternativene for avanserte innstillinger. Å aktivere SSH på et SD-kort som allerede er avbildet er litt mer komplisert: du må bruke en annen datamaskin for å legge til en file kalt ssh til oppstartspartisjonen. Bytt SD-kortet i den originale Raspberry Pi og slå det på. Dette skal aktivere SSH, med en IP-adresse tildelt av DHCP. Når du er logget på, skriv inn følgende ved ledeteksten for å vise innholdet i EDID som er oppdaget (det kan hende du må endre HDMI-A-1 til HDMI-A-2 avhengig av hvilken HDMI-port på Raspberry Pi skjermenheten er tilkoblet til): cat /sys/class/drm/card?-HDMI-A-1/edid Hvis det ikke er noen mapper som heter card?-HDMI-A-1 eller lignende, er det sannsynlig at ingen EDID kunne leses fra skjermen enhet.

NOTE
I tilfellet hvor EDID er lest vellykket, er det en nyttig virtuell file i samme mappe, kalt moduser, som når den vises viser alle mulige moduser EDID hevder enheten støtter.

Begrensninger

Hotplug-deteksjonsfeil Hvis både fastvaren og KMS ikke finner en tilkoblet skjerm, kan det være en hotplug-deteksjonsfeil – dvs. Raspberry Pi vet ikke at en enhet er koblet til, så den ser ikke etter en EDID. Dette kan være forårsaket av en dårlig kabel, eller en skjermenhet som ikke hevder hotpluggen riktig. Du kan tvinge en hotplug-deteksjon ved å endre kjernekommandolinjen file (cmdline.txt) som er lagret i oppstartspartisjonen til et Raspberry Pi OS SD-kort. Du kan redigere dette file på et annet system, bruk hvilken editor du foretrekker. Legg til følgende på slutten av cmdline.txt file: video=HDMI-A-1:1280×720@60D Hvis du bruker den andre HDMI-porten, bytt ut HDMI-A-1 med HDMI-A-2. Du kan også angi en annen oppløsning og bildefrekvens, men sørg for at du velger de som skjermenheten støtter.

NOTE
Dokumentasjon om kjernens kommandolinjeinnstillinger for video finner du her: https://www.kernel.org/doc/Documentation/fb/modedb.txt

ADVARSEL
Eldre grafikkstabler støttet bruken av en config.txt-oppføring for å angi hotplug-deteksjon, men i skrivende stund fungerer ikke dette med KMS. Det kan støttes i fremtidige fastvareutgivelser. Config.txt-oppføringen er hdmi_force_hotplug, og du kan spesifisere den spesifikke HDMI-porten som hotpluggen gjelder ved å bruke enten hdmi_force_hotplug:0=1 eller hdmi_force_hotplug:1=1. Merk at nomenklaturen for KMS refererer til HDMI-portene som 1 og 2, mens Raspberry Pi bruker 0 og 1.

EDID problemer
Et mindretall av skjermenheter er ikke i stand til å returnere en EDID hvis de er slått av, eller når feil AV-inngang er valgt. Dette kan være et problem når Raspberry Pi og skjermenhetene er på samme strømskinne, og Raspberry Pi-enheten starter opp raskere enn skjermen. Med enheter som dette kan det hende du må oppgi en EDID manuelt. Enda mer uvanlig har noen skjermenheter EDID-blokker som er dårlig formatert og ikke kan analyseres av KMS EDID-systemet. Under disse omstendighetene kan det være mulig å lese en EDID fra en enhet med lignende oppløsning og bruke den. I begge tilfeller viser de følgende instruksjonene hvordan du leser en EDID fra en skjermenhet og konfigurerer KMS til å bruke den, i stedet for at KMS prøver å spørre enheten direkte.

Kopiere en EDID til en file
Opprette en file å inneholde EDID-metadata fra bunnen av er vanligvis ikke gjennomførbart, og å bruke en eksisterende er mye enklere. Det er generelt mulig å få tak i en EDID fra en skjermenhet og lagre den på Raspberry Pis SD-kort slik at den kan brukes av KMS i stedet for å få en EDID fra skjermenheten. Det enkleste alternativet her er å sikre at skjermenheten er oppe og går og på riktig AV-inngang, og at Raspberry Pi har startet opp HDMI-systemet riktig. Fra terminalen kan du nå 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 av en eller annen grunn ikke er til stede, kan du starte opp enheten i en ikke -KMS-modus som lykkes med å starte opp til skrivebordet eller konsollen, og kopier deretter EDID-en som fastvaren (forhåpentligvis) vil lese til en file.

  1. Start opp til eldre grafikkmodus.
    1. Rediger config.txt i oppstartspartisjonen, pass på at du kjører editoren med sudo, og endre linjen som sier dtoverlay=vc4-kms-v3d til #dtoverlay=vc4-kms-v3d.
    2. Start på nytt.
  2. Skrivebordet eller påloggingskonsollen skal nå vises.
    1. Bruk terminalen til å kopiere EDID fra den vedlagte skjermenheten til en file med følgende kommando:
  • tvservice -d myedid.dat sudo mv myeid.dat /lib/firmware/

Ved å bruke en file-basert EDID i stedet for å spørre skjermenheten Rediger /boot/cmdline.txt, sørg for å kjøre editoren med sudo, og legg til følgende til kjernekommandolinjen: drm.edid_firmware=myedid.dat Du kan bruke EDID til en spesifikk HDMI-port som følger: drm.edid_firmware=HDMI-A-1:myedid.dat Om nødvendig, start opp igjen til KMS-modus ved å gjøre følgende:

  1. Rediger config.txt i oppstartspartisjonen, pass på at du kjører editoren med sudo, og endre linjen som sier #dtoverlay=vc4-kms-v3d til dtoverlay=vc4-kms-v3d.
  2. Start på nytt.

NOTE
Hvis du bruker en file-basert EDID, men fortsatt har problemer med hotplug, kan du tvinge hotplug-deteksjon ved å legge til følgende til kjernekommandolinjen: video=HDMI-A-1:D.

Dokumenter / Ressurser

RaspberryPi KMS HDMI-utgang grafikkdriver [pdfBrukerhåndbok
KMS, HDMI Output Graphics Driver, KMS HDMI Output, Graphics Driver, KMS HDMI Output Graphics Driver, Driver

Referanser

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket *