RaspberryPi-LOGO

RaspberryPi KMS HDMI Output Graphics Driver

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

Colofone

2020-2023 Raspberry Pi Ltd (ex Raspberry Pi (Trading) Ltd.) Sta documentazione hè licenziata sottu una licenza Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). data di creazione: 2023-02-10 versione di costruzione: githash: c65fe9c-clean

Avis Legal Disclaimer

I DATI TECNICI È DI AFFIDABILITÀ PER I PRODOTTI RASPBERRY PI (INCLUSI SCHEDE DI DATI) COME MODIFICATI DA TEMPU À TEMPU ("RESOURCES") SONU FORNITI DA RASPBERRY PI LTD ("RPL") "COME SO" È QUALSIASI GARANZIA ESPRESSA O IMPLICITA, INCLUDE, MA NON LIMITATA. À, E GARANTIE IMPLICITE DI MERCHANTABILITÀ E IDONEITÀ PER UN SUPPORTU PARTICULARI SONT DISCLIMATE. À LA MASSIMA MESSA PERMESSA DA A LEGGE APPLICABILE IN NESSUN CASU, RPL SERA RESPONSABILE PER QUALUNQUE DANNI DIRETTI, INDIRETTI, INCIDENTALI, SPECIALI, ESEMPLARI O CONSEGUENTI (INCLUSU, MA NON LIMITATI À, L'ACQUISSIONE DI BENE SOSTITUTI, PERDITA DI DORTI DI SERVIZI; , O PROFITTI ; O INTERRUPZIONE DI L'AFFARI) QUANTÀ CAUSATA E IN QUALSIASI TEORIA DI RESPONSABILITÀ, SIA IN CONTRATTU, RESPONSABILITÀ STRICTA, O TORT (INCLUSI A NEGGLIGENZA O ALTRE) SURGIENDA IN QUALSUNA MANERA DA L'USU DI A RESOURCES, ANCHE A PUBLICIDAD. DI TALI DANNI. RPL si riserva u dirittu di fà qualsiasi miglioramenti, migliurà, currezzione o qualsiasi altre mudificazione à e RESOURCES o à qualsiasi prudutti descritti in elli in ogni mumentu è senza avvisu. I RESOURCES sò destinati à l'utilizatori qualificati cù livelli adattati di cunniscenza di u disignu. L'utilizatori sò solu rispunsevuli di a so selezzione è l'usu di i RESOURCES è di qualsiasi applicazione di i prudutti descritti in elli. L'Usuariu accunsente à indemnizà è mantene a RPL innocu per tutte e responsabilità, i costi, i danni o altre perdite derivanti da u so usu di i RESOURCES. RPL concede à l'utilizatori u permessu di utilizà i RESOURCES solu in cunjunzione cù i prudutti Raspberry Pi. Ogni altru usu di i RESOURCES hè pruibitu. Nisuna licenza hè cuncessa à qualsiasi altru RPL o altru dirittu di pruprietà intellettuale di terzu. ATTIVITÀ RISCHI ALTI. I prudutti Raspberry Pi ùn sò micca pensati, fabbricati o destinati à l'usu in ambienti periculosi chì necessitanu un rendimentu sicuru, cum'è in l'operazione di installazioni nucleari, sistemi di navigazione o di cumunicazione di l'aeronautica, cuntrollu di u trafficu aereu, sistemi d'arme o applicazioni critiche per a sicurezza (cumpresu u sustegnu di vita). Sistemi è altri dispositi medichi), in quale u fallimentu di i prudutti puderia purtà direttamente à morte, ferite persunale o danni fisichi o ambientali severi ("Attività à Rischiu Altu"). RPL declina specificamente qualsiasi garanzia espressa o implicita di idoneità per l'Attività di Rischiu Altu è ùn accetta micca responsabilità per l'usu o l'inclusioni di i prudutti Raspberry Pi in Attività di Rischiu Altu. I prudutti Raspberry Pi sò furniti sottumessi à i Termini Standard di RPL. A prestazione di RPL di e RISORSE ùn espande o mudifica altrimenti i Termini Standard di RPL, cumprese, senza limitazione, i disclaims è e garanzie espresse in elli.

Storia di a versione di u documentu

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

Scopu di u documentu

Stu documentu si applica à i seguenti prudutti Raspberry Pi

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

Introduzione

Cù l'intruduzione di u driver graficu KMS (Kernel Mode Setting), Raspberry Pi Ltd si alluntanassi da u cuntrollu di firmware legacy di u sistema di output video è versu un sistema graficu più apertu. Tuttavia, questu hè ghjuntu cù u so propiu settore di sfide. Stu documentu hè distinatu à aiutà cù qualsiasi prublemi chì ponu accade quandu si move à u novu sistema. Stu whitepaper assume chì Raspberry Pi funziona Raspberry Pi OS, è hè cumplettamente aggiornatu cù l'ultimi firmware è kernels.

Terminulugia

DRM: Direct Rendering Manager, un sottosistema di u kernel Linux utilizatu per cumunicà cù unità di processazione grafica (GPU). Adupratu in partenariatu cù FKMS è KMS.
DVI: Un predecessore à HDMI, ma senza e capacità audio. I cavi è l'adattatori HDMI à DVI sò dispunibili per cunnette un dispositivu Raspberry Pi à un display equipatu di DVI.
EDID: Dati d'identificazione di visualizazione estesa. Un formatu di metadati per i dispositi di visualizazione per descriverà e so capacità à una fonte video. A struttura di dati EDID include u nome di u fabricatore è u numeru di serie, u tipu di produttu, a dimensione di a visualizazione fisica, è i tempi supportati da a visualizazione, inseme cù qualchi dati menu utili. Certi schermi ponu avè blocchi EDID difettu, chì ponu causà prublemi se quelli difetti ùn sò micca trattati da u sistema di visualizazione.
FKMS (vc4-fkms-v3d): Configurazione di u Modu Kernel Falsu. Mentre u firmware cuntrolla ancu u hardware di livellu bassu (per esample, i porti di High-Definition Multimedia Interface (HDMI), a Display Serial Interface (DSI), etc.), biblioteche standard Linux sò aduprate in u kernel stessu. FKMS hè utilizatu per difettu in Buster, ma hè avà deprecated in favore di KMS in Bullseye.
HDMI: L'interfaccia multimediale d'alta definizione hè una interfaccia audio / video proprietaria per a trasmissione di dati video senza compressione, è dati audio digitale compressi o micca compressi.
HPD: Hotplug detect. Un filu fisicu chì hè affirmatu da un dispositivu di visualizazione cunnessu per dimustrà chì hè presente.
KMS: Configurazione di u Modu Kernel; vede https://www.kernel.org/doc/html/latest/gpu/drm-kms.html per più dettagli. In Raspberry Pi, vc4-kms-v3d hè un driver chì implementa KMS, è hè spessu chjamatu "u driver KMS". Stack di grafica legacy: Una pila di grafica implementata cumplettamente in u blob di firmware VideoCore esposta da un driver di framebuffer Linux. A pila di grafica legata hè stata aduprata in a maiò parte di i dispositi Raspberry Pi Ltd finu à pocu tempu; avà hè gradualmente rimpiazzatu da (F)KMS/DRM.

U sistema HDMI è i drivers grafichi

I dispusitivi Raspberry Pi utilizanu u standard HDMI, chì hè assai cumuni in i monitors LCD è i televisori muderni, per a pruduzzioni video. Raspberry Pi 3 (cumpresu Raspberry Pi 3B+) è i dispositi precedenti anu un unicu portu HDMI, chì hè capaci di 1920 × 1200 @ 60Hz output usendu un connettore HDMI full-size. Raspberry Pi 4 hà dui porti micro HDMI, è hè capace di output 4K in i dui porti. Sicondu a cunfigurazione, u portu HDMI 0 nantu à Raspberry Pi 4 hè capace di finu à 4kp60, ma quandu si usa dui dispusitivi di output 4K hè limitatu à p30 in i dui dispositi. A pila di software gràficu, indipendentemente da a versione, hè rispunsevule per l'interrogazione di i dispositi HDMI attaccati per e so proprietà, è di stabilisce u sistema HDMI in modu adattatu. Legacy è FKMS stacks tramindui utilizanu firmware in u processatore gràficu VideoCore per verificà a presenza è e proprietà HDMI. À u cuntrastu, KMS usa una implementazione completamente aperta, ARM-side. Questu significa chì e basi di codice per i dui sistemi sò completamente diffirenti, è in certi circustanze questu pò esse risultatu in un cumpurtamentu diversu trà i dui approcci. L'apparecchi HDMI è DVI si identificanu à u dispositivu fonte utilizendu un pezzu di metadata chjamatu bloccu EDID. Questu hè lettu da u dispositivu fonte da u dispositivu di visualizazione per via di una cunnessione I2C, è questu hè sanu sanu trasparenti à l'utilizatori finali cum'è hè fattu da a pila gràfica. U bloccu EDID cuntene una grande quantità d'infurmazioni, ma hè principalmente utilizatu per specificà quale risoluzioni supporta a visualizazione, cusì Raspberry Pi pò esse stallatu per pruduce una risoluzione approprita.

Cume HDMI hè trattatu durante u booting

Quandu u primu accende, Raspberry Pi passa per un numeru di stages, canusciutu comu boot stages:

  1. U primu-stage, bootloader basatu ROM principia u VideoCore GPU.
  2. Second-stage bootloader (questu hè bootcode.bin nantu à a carta SD in i dispositi prima di Raspberry Pi 4, è in SPI EEPROM in Raspberry Pi 4):
    1. Nantu à Raspberry Pi 4, u second-stagU bootloader avvierà u sistema HDMI, interrogarà a visualizazione per i modi pussibuli, poi cunfigurà a visualizazione in modu adattatu. À questu puntu, a visualizazione hè aduprata per furnisce dati di diagnosticu di basa.
    2. A visualizazione di diagnostica di bootloader (07 dicembre 2022 in poi) mostrarà u statu di qualsiasi display attaccatu (se Hotplug Detect (HPD) hè presente, è se un bloccu EDID hè statu recuperatu da u display).
  3. U firmware VideoCore (start.elf) hè caricatu è eseguitu. Questu hà da piglià u cuntrollu di u sistema HDMI, leghjite u bloccu EDID da qualsiasi schermi attaccati, è mostra a pantalla di l'arcubalenu nantu à quelli display.
  4. I stivali di u kernel Linux
    1. Durante l'iniziu di u kernel, KMS pigliarà u cuntrollu di u sistema HDMI da u firmware. Una volta, u bloccu EDID hè lettu da qualsiasi display attache, è sta informazione hè aduprata per cunfigurà a cunsola Linux è u desktop.

Pussibili prublemi è sintomi

U sintumu di fallimentu più cumune sperimentatu quandu si traslada à KMS hè un avviu inizialmente bonu, cù a schermu di bootloader è dopu a schermu di l'arcubalenu chì appare, seguita dopu à uni pochi di seconde da a visualizazione chì diventa nera è ùn torna micca. U puntu in u quale a visualizazione diventa nera hè in fattu u puntu durante u prucessu di boot di u kernel quandu u driver KMS ripiglià a visualizazione da u firmware. U Raspberry Pi hè attualmente in esecuzione in tutti i rispetti eccettu per l'output HDMI, cusì se SSH hè attivatu, duvete esse capace di log in u dispusitivu per quella strada. U LED d'accessu à a carta SD verde di solitu sfarfalla in ocasioni. Hè ancu pussibule chì ùn vi vede micca output HDMI à tutti; nè display di bootloader, nè schermu arcubalenu. Questu pò esse generalmente attribuitu à un difettu hardware.

Diagnostica di u difettu

Nisuna output HDMI in tuttu
Hè pussibule chì u dispusitivu ùn hà micca booted in tuttu, ma questu hè fora di u mandatu di stu libru biancu. Assumindu chì u cumpurtamentu osservatu hè un prublema di visualizazione, a mancanza di output HDMI durante ogni parte di u prucessu di booting hè di solitu dovutu à un difettu hardware. Ci hè una quantità di opzioni pussibuli:

  • Cavu HDMI difettu
  • Pruvate un novu cable. Certi cavi, in particulare quelli assai economici, ùn ponu micca cuntene tutte e linee di cumunicazione necessarie (per esempiu hotplug) per Raspberry Pi per detectà bè a visualizazione.
  • Portu HDMI difettu in Raspberry Pi
  • Sè vo aduprate un Raspberry Pi 4, pruvate l'altru portu HDMI.
  • Portu HDMI difettu nantu à u monitor
  • A volte, u portu HDMI in un monitor o TV pò sguassate. Pruvate un portu diversu se u dispusitivu hà unu.
  • Raramente, un dispositivu di visualizazione pò furnisce solu dati EDID quandu hè attivatu, o quandu u portu currettu hè sceltu. Per verificà, assicuratevi chì u dispusitivu hè nantu è chì u portu di input currettu hè sceltu.
  • Dispositivu di visualizazione chì ùn affirmeghja micca a linea di rilevazione hotplug

L'output iniziale, allora u screnu diventa neru
Se a visualizazione vene, ma poi si spegne durante l'iniziu di u kernel Linux, ci sò parechje cause pussibuli, è queste sò generalmente ligati à un prublema di leghje l'EDID da u dispusitivu di visualizazione. Comu pò esse vistu da a sezione sopra chì tratta di a sequenza di boot, l'EDID hè lettu in parechji punti diffirenti durante u prucessu di boot, è ognuna di queste leghje hè fatta da un pezzu di software differenti. A lettura finale, quandu u KMS assume, hè realizatu da u codice di u kernel Linux upstream inalteratu, è questu ùn tratta micca i formati EDID difettosi cum'è u software di firmware precedente. Hè per quessa chì a visualizazione pò cessà di funzionà currettamente una volta chì KMS ripiglià. Ci hè parechje manere di cunfirmà se KMS ùn riesce à leghje l'EDID, è dui di questi sò i seguenti.
Verificate a pantalla di diagnostica di u bootloader (solu Raspberry Pi 4)

NOTA
I diagnostichi di bootloader necessitanu un bootloader recente. Pudete aghjurnà à l'ultima versione usendu sti struzzioni: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Eliminate a carta SD è reboot u Raspberry Pi. Press ESC nantu à a pantalla Install OS, è a pantalla di diagnostica deve apparisce nantu à u dispusitivu di visualizazione. Ci deve esse una linea nantu à a visualizazione chì principia cù display: - per exampLe:

  • display: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=none #0

Questa uscita da un Raspberry Pi 4 mostra chì u sistema hà rilevatu un display HDMI in u portu HDMI 0, u hotplug detect hè affirmatu, è l'EDID hè statu lettu OK. Ùn hè statu trovu nunda in u portu HDMI 1.

Verificate se u sistema KMS hà rilevatu un EDID
Per verificà questu, avete bisognu di accede à u Raspberry Pi device sopra SSH da un altru computer. SSH pò esse attivatu quandu crea una maghjina di una carta SD cù Raspberry Pi Imager, utilizendu l'opzioni di Configurazione Avanzata. L'attivazione di SSH nantu à una carta SD chì hè digià stata stampata hè un pocu più complicata: avete bisognu di utilizà un altru computer per aghjunghje un file chjamatu ssh à a partizione di boot. Sustituite a carta SD in u Raspberry Pi originale è accende. Questu deve attivà SSH, cù un indirizzu IP attribuitu da DHCP. Una volta cunnessu, scrivite u seguitu à u prompt di u terminal per visualizà u cuntenutu di qualsiasi EDID rilevatu (pudete avè bisognu di cambià HDMI-A-1 à HDMI-A-2 secondu u portu HDMI in u Raspberry Pi u dispusitivu di visualizazione hè cunnessu). à): cat /sys/class/drm/card?-HDMI-A-1/edid Se ùn ci sò micca cartulare chjamati card?-HDMI-A-1 o simili, allora hè prubabile chì nisun EDID puderia esse lettu da u display dispusitivu.

NOTA
In u casu induve l'EDID hè lettu bè, ci hè un virtuale utile file in u stessu cartulare, chjamati modi, chì quandu si vede mostra tutti i modi pussibuli chì l'EDID dichjara chì u dispusitivu sustene.

Mitigazioni

Hotplug detect failure Se u firmware è u KMS fallenu à truvà un monitoru attaccatu, puderia esse un fallimentu di rilevazione hotplug - vale à dì, u Raspberry Pi ùn sapi micca chì un dispositivu hè statu cunnessu, perchè ùn verifica micca un EDID. Stu puderia esse causatu da un cable cattivu, o un dispositivu di visualizazione chì ùn affirmeghja micca u hotplug currettamente. Pudete furzà un hotplug detect alterendu a linea di cummanda di u kernel file (cmdline.txt) chì hè guardatu in a partizione di boot di una carta SD Raspberry Pi OS. Pudete edità questu file nantu à un altru sistema, utilizendu qualsiasi editore chì preferite. Aghjunghjite i seguenti à a fine di u cmdline.txt file: video=HDMI-A-1:1280×720@60D Sè vo aduprate u sicondu portu HDMI, rimpiazzà HDMI-A-1 cù HDMI-A-2. Tù dinù ponu specificà una differente risuluzzioni è frame rate, ma assicuratevi di sceglie quelli chì u dispusitivu di visualizazione accumpagna.

NOTA
A documentazione nantu à i paràmetri di a linea di cummanda di u kernel per u video pò esse truvata quì: https://www.kernel.org/doc/Documentation/fb/modedb.txt

ATTENZIONE
Stacks di gràfiche più vechje supportanu l'usu di una entrata config.txt per stabilisce hotplug detect, ma à u mumentu di a scrittura questu ùn funziona micca cù KMS. Pò esse supportatu in future versioni di firmware. L'entrata config.txt hè hdmi_force_hotplug, è pudete specificà u portu HDMI specificu chì u hotplug s'applica à aduprà sia hdmi_force_hotplug:0=1 o hdmi_force_hotplug:1=1. Nota chì a nomenclatura per KMS si riferisce à i porti HDMI cum'è 1 è 2, mentre chì Raspberry Pi usa 0 è 1.

prublemi EDID
Una minurità di i dispositi di visualizazione sò incapaci di rinvià un EDID si sò disattivati, o quandu l'input AV sbagliatu hè sceltu. Questu pò esse un prublema quandu u Raspberry Pi è i dispositi di visualizazione sò nantu à a listessa striscia di putenza, è u dispusitivu Raspberry Pi avvia più veloce di a visualizazione. Cù dispusitivi cum'è questu, pudete bisognu di furnisce un EDID manualmente. Ancu più inusualmente, certi dispositi di visualizazione anu blocchi EDID chì sò mal formattati è ùn ponu esse analizati da u sistema KMS EDID. In queste circustanze, pò esse pussibule di leghje un EDID da un dispositivu cù una risuluzione simili è l'utilizanu. In ogni casu, e seguenti struzzioni stabiliscenu cumu leghje un EDID da un dispositivu di visualizazione è cunfigurà KMS per usà, invece di KMS chì prova à interrogà u dispusitivu direttamente.

Copia un EDID in a file
Creazione di a file chì cuntene metadata EDID da zero ùn hè micca generalmente fattibile, è l'utilizazione di una esistente hè assai più faciule. In generale, hè pussibule ottene un EDID da un dispositivu di visualizazione è almacenà nantu à a carta SD di u Raspberry Pi per pudè esse usatu da KMS invece di ottene un EDID da u dispusitivu di visualizazione. L'opzione più faciule quì hè di assicurà chì u dispusitivu di visualizazione hè in funziunamentu è nantu à l'input AV currettu, è chì u Raspberry Pi hà iniziatu u sistema HDMI currettamente. Da u terminal, pudete avà copià l'EDID à a file cù u cumandimu seguitu: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Se per una certa ragione l'EDID ùn hè micca presente, pudete boot u dispusitivu in un non - Modu KMS chì riesce à avvià à u desktop o cunsola, poi copià l'EDID chì u firmware (sperendu) leghje cù successu à un file.

  1. Avviate à u modu di grafica legacy.
    1. Edite config.txt in a partizione di boot, assicuratevi di eseguisce u vostru editore cù sudo, è cambia a linea chì dice dtoverlay=vc4-kms-v3d à #dtoverlay=vc4-kms-v3d.
    2. Reboot.
  2. U scrittore o cunsola di login deve avà apparisce.
    1. Utilizendu u terminal, copiate l'EDID da u dispusitivu di visualizazione attaccatu à a file cù u cumandimu seguente:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Utilizendu a file-based EDID invece di interrogà u dispositivu di visualizazione Edit /boot/cmdline.txt, assicuratevi di eseguisce u vostru editore cù sudo, è aghjunghje i seguenti à a linea di cummanda di u kernel: drm.edid_firmware=myedid.dat Pudete applicà l'EDID à un portu HDMI specificu cusì: drm.edid_firmware=HDMI-A-1:myedid.dat In casu di necessariu, riavviate in modu KMS facendu i seguenti:

  1. Edite config.txt in a partizione di boot, assicuratevi di eseguisce u vostru editore cù sudo, è cambia a linea chì dice #dtoverlay=vc4-kms-v3d à dtoverlay=vc4-kms-v3d.
  2. Reboot.

NOTA
Se utilizate a file-based EDID, ma ancu avè prublemi cù hotplug, pudete furzà a deteczione di hotplug aghjunghjendu i seguenti à a linea di cummanda di u kernel: video=HDMI-A-1:D.

Documenti / Risorse

RaspberryPi KMS HDMI Output Graphics Driver [pdfManuale d'usu
KMS, Driver graficu di output HDMI, Output KMS HDMI, Driver graficu, Driver graficu KMS HDMI Output, Driver

Referenze

Lascia un cumentu

U vostru indirizzu email ùn serà micca publicatu. I campi obbligatori sò marcati *