RaspberryPi-LOGO

Driver grafic pentru ieșire HDMI RaspberryPi KMS

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

Colofon

2020-2023 Raspberry Pi Ltd (fostă Raspberry Pi (Trading) Ltd.) Această documentație este licențiată în baza unei licențe Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). data construirii: 2023-02-10 versiunea construirii: githash: c65fe9c-clean

Notificare legală de declinare a răspunderii

DATELE TEHNICE ȘI DE FIABILITATE PENTRU PRODUSELE RASPBERRY PI (INCLUSIV FIȘE DE TEHNICE) MODIFICATE DIN CANCEL CU CANDIDAT (“RESURSE”) SUNT FURNIZATE DE RASPBERRY PI LTD (“RPL”) „CA AȚI” ȘI ORICE GARANȚII EXPRESE SAU IMPLICITE, INCLUSIV, DAR NU LIMITATE PENTRU, GARANȚIILE IMPLICITE DE VANTABILITATE ȘI ADECUAREA PENTRU UN ANUMIT SCOP SUNT RENUNCIATE. ÎN MĂSURA MAXIMĂ PERMISĂ DE LEGEA APLICABILĂ ÎN NICIO CAZ, RPL NU VA FI RESPONSABILĂ PENTRU ORICE DAUNE DIRECTE, INDIRECTE, INCIDENTALE, SPECIALE, EXEMPLARE SAU CONSECUȚIONALE (INCLUSIV, DAR FĂRĂ A SE LIMITĂ LA, ACHIZIȚIA DE BUNURI DE SUBSTITUȚIE, PIERDERI DE DATE; , SAU PROFIT; SAU ÎNTRERUPEREA AFACERII) ORIENTA CAUZATE ȘI PENTRU ORICE TEORIE A RĂSPUNDERII, FIEA ÎN CONTRACT, RESPONSABILITATE STRICTĂ SAU DELICIT (INCLUS NEGLIGENȚA SAU ÎN ALTRE MOD) DECARE ÎN ORICE MOD DIN UTILIZAREA RESURSELOR CONSULTATE DE ASEMENEA DAUNE. RPL își rezervă dreptul de a face orice îmbunătățiri, îmbunătățiri, corecturi sau orice alte modificări la RESURSE sau la orice produse descrise în acestea în orice moment și fără notificare ulterioară. RESURSE sunt destinate utilizatorilor calificați cu niveluri adecvate de cunoștințe de proiectare. Utilizatorii sunt singurii responsabili pentru selectarea și utilizarea lor a RESURSELOR și pentru orice aplicare a produselor descrise în acestea. Utilizatorul este de acord să despăgubească și să țină RPL fără răspundere față de toate răspunderile, costurile, daunele sau alte pierderi care decurg din utilizarea RESURSELOR. RPL acordă utilizatorilor permisiunea de a utiliza RESURSE numai împreună cu produsele Raspberry Pi. Orice altă utilizare a RESURSELOR este interzisă. Nu se acordă nicio licență oricărui alt RPL sau altui drept de proprietate intelectuală terță parte. ACTIVITĂȚI CU RISC MARE. Produsele Raspberry Pi nu sunt proiectate, fabricate sau destinate utilizării în medii periculoase care necesită performanțe sigure, cum ar fi operarea instalațiilor nucleare, a sistemelor de navigație sau comunicații ale aeronavelor, controlul traficului aerian, sisteme de arme sau aplicații critice pentru siguranță (inclusiv suportul vieții). sisteme și alte dispozitive medicale), în care defecțiunea produselor ar putea duce direct la deces, vătămare corporală sau daune fizice sau de mediu grave („Activități cu risc ridicat”). RPL declină în mod special orice garanție expresă sau implicită de adecvare pentru Activitățile cu risc ridicat și nu își asumă nicio responsabilitate pentru utilizarea sau includerea produselor Raspberry Pi în activitățile cu risc ridicat. Produsele Raspberry Pi sunt furnizate sub rezerva Termenilor standard RPL. Furnizarea de RESURSE de către RPL nu extinde sau modifică în alt mod Termenii standard ai RPL, inclusiv, dar fără a se limita la, declinările și garanțiile exprimate în aceștia.

Istoricul versiunilor documentului

RaspberryPi-KMS-Ieșire-HDMI-Driver-grafică-FIG-1

Sfera documentului

Acest document se aplică următoarelor produse Raspberry Pi

RaspberryPi-KMS-Ieșire-HDMI-Driver-grafică-FIG-2

Introducere

Odată cu introducerea driverului de grafică KMS (Kernel Mode Setting), Raspberry Pi Ltd se îndepărtează de controlul firmware-ului moștenit al sistemului de ieșire video și se îndreaptă către un sistem grafic cu sursă mai deschisă. Cu toate acestea, acest lucru a venit cu propriul set de provocări. Acest document este destinat să ajute cu orice problemă care ar putea apărea la trecerea la noul sistem. Această lucrare albă presupune că Raspberry Pi rulează sistemul de operare Raspberry Pi și este complet actualizat cu cele mai recente firmware și nuclee.

Terminologie

DRM-uri: Direct Rendering Manager, un subsistem al nucleului Linux utilizat pentru a comunica cu unitățile de procesare grafică (GPU). Folosit în parteneriat cu FKMS și KMS.
DVI: Un predecesor al HDMI, dar fără capabilități audio. Sunt disponibile cabluri și adaptoare HDMI la DVI pentru a conecta un dispozitiv Raspberry Pi la un afișaj echipat cu DVI.
EDID: Date de identificare cu afișaj extins. Un format de metadate pentru dispozitivele de afișare pentru a descrie capacitățile acestora la o sursă video. Structura de date EDID include numele producătorului și numărul de serie, tipul de produs, dimensiunea fizică a afișajului și intervalele de timp acceptate de afișaj, împreună cu unele date mai puțin utile. Unele afișaje pot avea blocuri EDID defecte, ceea ce poate cauza probleme dacă acele defecte nu sunt gestionate de sistemul de afișare.
FKMS (vc4-fkms-v3d): Setarea modului Kernel fals. În timp ce firmware-ul încă controlează hardware-ul de nivel scăzut (de example, porturile de interfață multimedia de înaltă definiție (HDMI), interfața serială de afișare (DSI), etc.), bibliotecile standard Linux sunt utilizate în nucleul însuși. FKMS este utilizat în mod implicit în Buster, dar acum este depreciat în favoarea KMS în Bullseye.
HDMI: Interfața multimedia de înaltă definiție este o interfață audio/video proprietară pentru transmiterea datelor video necomprimate și a datelor audio digitale comprimate sau necomprimate.
HPD: Detectare hotplug. Un fir fizic care este afirmat de un dispozitiv de afișare conectat pentru a arăta că este prezent.
KMS: Setarea modului Kernel; vedea https://www.kernel.org/doc/html/latest/gpu/drm-kms.html pentru mai multe detalii. Pe Raspberry Pi, vc4-kms-v3d este un driver care implementează KMS și este adesea denumit „driverul KMS”. Stivă de grafică moștenită: o stivă de grafică implementată în întregime în blob-ul de firmware VideoCore expus de un driver de framebuffer Linux. Stiva de grafică moștenită a fost folosită în majoritatea dispozitivelor Raspberry Pi Ltd până de curând; acum este înlocuit treptat de (F)KMS/DRM.

Sistemul HDMI și driverele grafice

Dispozitivele Raspberry Pi folosesc standardul HDMI, care este foarte comun pe monitoarele LCD și televizoarele moderne, pentru ieșirea video. Raspberry Pi 3 (inclusiv Raspberry Pi 3B+) și dispozitivele anterioare au un singur port HDMI, care este capabil de ieșire de 1920 × 1200 la 60 Hz folosind un conector HDMI de dimensiune completă. Raspberry Pi 4 are două porturi micro HDMI și este capabil de ieșire 4K pe ambele porturi. În funcție de configurație, portul HDMI 0 de pe Raspberry Pi 4 este capabil de până la 4kp60, dar atunci când utilizați două dispozitive de ieșire 4K, sunteți limitat la p30 pe ambele dispozitive. Stack-ul de software grafic, indiferent de versiune, este responsabil pentru interogarea dispozitivelor HDMI atașate pentru proprietățile lor și configurarea adecvată a sistemului HDMI. Stivele Legacy și FKMS folosesc ambele firmware în procesorul grafic VideoCore pentru a verifica prezența și proprietățile HDMI. Prin contrast, KMS utilizează o implementare complet open source, partea ARM. Aceasta înseamnă că bazele de cod pentru cele două sisteme sunt complet diferite și, în unele circumstanțe, acest lucru poate duce la un comportament diferit între cele două abordări. Dispozitivele HDMI și DVI se identifică cu dispozitivul sursă folosind o parte de metadate numită bloc EDID. Acest lucru este citit de dispozitivul sursă de pe dispozitivul de afișare printr-o conexiune I2C și este complet transparent pentru utilizatorul final, deoarece este realizat de stiva de grafică. Blocul EDID conține o mulțime de informații, dar este folosit în primul rând pentru a specifica ce rezoluții acceptă afișajul, astfel încât Raspberry Pi poate fi configurat pentru a scoate o rezoluție adecvată.

Cum este tratat HDMI în timpul pornirii

Când este pornit pentru prima dată, Raspberry Pi trece printr-un număr de stages, cunoscut sub numele de boot stages:

  1. Primul-stage, bootloader-ul bazat pe ROM pornește GPU-ul VideoCore.
  2. Al doilea-stage bootloader (acesta este bootcode.bin pe cardul SD pe dispozitivele anterioare Raspberry Pi 4 și în SPI EEPROM pe Raspberry Pi 4):
    1. Pe Raspberry Pi 4, al doilea-stagBootloader-ul va porni sistemul HDMI, va interoga afișajul pentru modurile posibile, apoi va configura afișajul în mod corespunzător. În acest moment, afișajul este utilizat pentru a furniza date de diagnostic de bază.
    2. Afișajul de diagnosticare a încărctorului de pornire (de la 07 decembrie 2022 în sus) va afișa starea oricăror afișaje atașate (dacă este prezentă Hotplug Detect (HPD) și dacă un bloc EDID a fost recuperat de pe afișaj).
  3. Firmware-ul VideoCore (start.elf) este încărcat și rulat. Aceasta va prelua controlul asupra sistemului HDMI, va citi blocul EDID de pe orice afișaj atașat și va afișa ecranul curcubeu pe acele afișaje.
  4. Nucleul Linux pornește
    1. În timpul pornirii kernel-ului, KMS va prelua controlul asupra sistemului HDMI de la firmware. Încă o dată, blocul EDID este citit de pe orice afișaj atașat, iar aceste informații sunt folosite pentru a configura consola și desktopul Linux.

Posibile probleme și simptome

Cel mai frecvent simptom de eșec experimentat la trecerea la KMS este o pornire inițial bună, cu ecranul bootloader-ului și apoi ecranul curcubeu care apar, urmat după câteva secunde de afișajul care devine negru și nu se mai aprinde. Punctul în care afișajul devine negru este de fapt punctul din timpul procesului de pornire a nucleului în care driverul KMS preia rularea afișajului din firmware. Raspberry Pi rulează în prezent în toate privințele, cu excepția ieșirii HDMI, așa că dacă SSH este activat, atunci ar trebui să vă puteți conecta la dispozitiv pe acea rută. LED-ul verde de acces la cardul SD va pâlpâi de obicei ocazional. De asemenea, este posibil să nu vedeți deloc ieșire HDMI; fără afișaj pentru bootloader și fără ecran curcubeu. Acest lucru poate fi de obicei atribuit unei defecțiuni hardware.

Diagnosticarea defecțiunii

Nicio ieșire HDMI
Este posibil ca dispozitivul să nu fi pornit deloc, dar acest lucru este în afara domeniului acestei cărți albe. Presupunând că comportamentul observat este o problemă de afișare, lipsa ieșirii HDMI în timpul oricărei părți a procesului de pornire se datorează de obicei unei defecțiuni hardware. Există o serie de opțiuni posibile:

  • Cablu HDMI defect
  • Încercați un cablu nou. Este posibil ca unele cabluri, în special cele foarte ieftine, să nu conțină toate liniile de comunicații necesare (de exemplu, hotplug) pentru ca Raspberry Pi să detecteze cu succes afișajul.
  • Port HDMI defect pe Raspberry Pi
  • Dacă utilizați un Raspberry Pi 4, încercați celălalt port HDMI.
  • Port HDMI defect pe monitor
  • Uneori, portul HDMI de pe un monitor sau televizor se poate uza. Încercați un alt port dacă dispozitivul are unul.
  • Rareori, un dispozitiv de afișare poate furniza date EDID numai atunci când este pornit sau când este selectat portul corect. Pentru a verifica, asigurați-vă că dispozitivul este pornit și că este selectat portul de intrare corect.
  • Dispozitivul de afișare nu afirmă linia de detectare a conexiunii la cald

Ieșirea inițială, apoi ecranul devine negru
Dacă afișajul apare, dar apoi se stinge în timpul pornirii nucleului Linux, există o serie de cauze posibile, iar acestea sunt de obicei legate de o problemă la citirea EDID-ului de pe dispozitivul de afișare. După cum se poate vedea din secțiunea de mai sus care se ocupă de secvența de pornire, EDID-ul este citit în mai multe puncte diferite în timpul procesului de pornire și fiecare dintre aceste citiri este realizată de o bucată diferită de software. Citirea finală, când KMS preia controlul, este efectuată de codul kernel-ului Linux în amonte nealterat, iar acesta nu gestionează formatele EDID defecte, precum și software-ul firmware anterior. Acesta este motivul pentru care afișajul poate înceta să funcționeze corect odată ce KMS preia controlul. Există o serie de moduri de a confirma dacă KMS nu reușește să citească EDID-ul, iar două dintre acestea sunt după cum urmează.
Verificați ecranul de diagnostic al bootloaderului (numai Raspberry Pi 4)

NOTA
Diagnosticarea bootloader-ului necesită un bootloader recent. Puteți face upgrade la cea mai recentă versiune utilizând aceste instrucțiuni: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Scoateți cardul SD și reporniți Raspberry Pi. Apăsați ESC pe ecranul Instalare OS, iar ecranul de diagnosticare ar trebui să apară pe dispozitivul de afișare. Ar trebui să existe o linie pe afișaj care începe cu afișaj: — de examppe:

  • afişa: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=niciunul #0

Această ieșire de la un Raspberry Pi 4 arată că sistemul a detectat un afișaj HDMI pe portul HDMI 0, detectarea hotplug este afirmată și EDID-ul a fost citit OK. Nu a fost găsit nimic pe portul HDMI 1.

Verificați dacă sistemul KMS a detectat un EDID
Pentru a verifica acest lucru, va trebui să vă conectați la dispozitivul Raspberry Pi prin SSH de pe un alt computer. SSH poate fi activat atunci când se creează o imagine de card SD cu Raspberry Pi Imager, folosind opțiunile Advanced Settings. Activarea SSH pe un card SD care a fost deja fotografiat este puțin mai complicată: va trebui să utilizați un alt computer pentru a adăuga un file numit ssh la partiția de boot. Înlocuiți cardul SD în Raspberry Pi original și porniți-l. Acest lucru ar trebui să activeze SSH, cu o adresă IP alocată de DHCP. Odată autentificat, tastați următoarele la promptul terminalului pentru a afișa conținutul oricărui EDID detectat (poate fi necesar să schimbați HDMI-A-1 în HDMI-A-2, în funcție de portul HDMI de pe Raspberry Pi la care este conectat dispozitivul de afișare). la): cat /sys/class/drm/card?-HDMI-A-1/edid Dacă nu există foldere denumite card?-HDMI-A-1 sau similar, atunci este probabil ca niciun EDID să nu poată fi citit de pe afișaj dispozitiv.

NOTA
În cazul în care EDID-ul este citit cu succes, există un virtual util file în același folder, numit moduri, care atunci când este afișat arată toate modurile posibile pe care EDID-ul susține că le acceptă dispozitivul.

Atenuări

Eroare de detectare a conectării la cald Dacă atât firmware-ul, cât și KMS nu reușesc să găsească un monitor atașat, ar putea fi o eșec de detectare a conexiunii la cald - adică Raspberry Pi nu știe că un dispozitiv a fost conectat, așa că nu verifică un EDID. Acest lucru ar putea fi cauzat de un cablu defect sau de un dispozitiv de afișare care nu afirmă corect conectarea la cald. Puteți forța o detectare hotplug modificând linia de comandă a nucleului file (cmdline.txt) care este stocat în partiția de pornire a unui card SD Raspberry Pi OS. Puteți edita acest lucru file pe alt sistem, folosind orice editor preferi. Adăugați următoarele la sfârșitul cmdline.txt file: video=HDMI-A-1:1280×720@60D Dacă utilizați al doilea port HDMI, înlocuiți HDMI-A-1 cu HDMI-A-2. De asemenea, puteți specifica o rezoluție și o rată de cadre diferite, dar asigurați-vă că le alegeți pe cele pe care dispozitivul de afișare le acceptă.

NOTA
Documentația privind setările liniei de comandă a nucleului pentru video poate fi găsită aici: https://www.kernel.org/doc/Documentation/fb/modedb.txt

AVERTIZARE
Stivele de grafică mai vechi au acceptat utilizarea unei intrări config.txt pentru a seta detectarea hotplug, dar la momentul scrierii, acest lucru nu funcționează cu KMS. Poate fi acceptat în viitoarele versiuni de firmware. Intrarea config.txt este hdmi_force_hotplug și puteți specifica portul HDMI specific căruia i se aplică hotplug folosind fie hdmi_force_hotplug:0=1, fie hdmi_force_hotplug:1=1. Rețineți că nomenclatura pentru KMS se referă la porturile HDMI ca 1 și 2, în timp ce Raspberry Pi folosește 0 și 1.

Probleme EDID
O minoritate de dispozitive de afișare nu sunt capabile să returneze un EDID dacă sunt oprite sau când este selectată intrarea AV greșită. Aceasta poate fi o problemă atunci când Raspberry Pi și dispozitivele de afișare sunt pe aceeași priză, iar dispozitivul Raspberry Pi pornește mai repede decât afișajul. Cu astfel de dispozitive, poate fi necesar să furnizați manual un EDID. Și mai neobișnuit, unele dispozitive de afișare au blocuri EDID care sunt prost formatate și nu pot fi analizate de sistemul KMS EDID. În aceste circumstanțe, este posibil să citiți un EDID de pe un dispozitiv cu rezoluție similară și să îl utilizați. În ambele cazuri, următoarele instrucțiuni stabilesc cum să citiți un EDID de pe un dispozitiv de afișare și să configurați KMS să-l folosească, în loc ca KMS să încerce să interogheze dispozitivul direct.

Copierea unui EDID în a file
Crearea unui file Conținerea de la zero a metadatelor EDID nu este de obicei fezabilă, iar utilizarea uneia existente este mult mai ușoară. În general, este posibil să obțineți un EDID de pe un dispozitiv de afișare și să îl stocați pe cardul SD al Raspberry Pi, astfel încât să poată fi utilizat de KMS în loc să obțineți un EDID de pe dispozitivul de afișare. Cea mai ușoară opțiune aici este să vă asigurați că dispozitivul de afișare este în funcțiune și pe intrarea AV corectă și că Raspberry Pi a pornit corect sistemul HDMI. Din terminal, acum puteți copia EDID-ul în a file cu următoarea comandă: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Dacă din anumite motive EDID-ul nu este prezent, puteți porni dispozitivul într-un -Mod KMS care reușește să pornească pe desktop sau pe consolă, apoi copiați EDID-ul pe care firmware-ul îl va citi (sperăm) cu succes într-un file.

  1. Porniți în modul grafic vechi.
    1. Editați config.txt în partiția de pornire, asigurându-vă că rulați editorul folosind sudo și schimbați linia care spune dtoverlay=vc4-kms-v3d în #dtoverlay=vc4-kms-v3d.
    2. Reporniți.
  2. Ar trebui să apară acum desktopul sau consola de conectare.
    1. Folosind terminalul, copiați EDID-ul de pe dispozitivul de afișare atașat pe a file cu următoarea comandă:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Folosind a file-based EDID în loc să interogați dispozitivul de afișare Editați /boot/cmdline.txt, asigurându-vă că rulați editorul folosind sudo și adăugați următoarele la linia de comandă a nucleului: drm.edid_firmware=myedid.dat Puteți aplica EDID-ul unui port HDMI specific, după cum urmează: drm.edid_firmware=HDMI-A-1:myedid.dat Dacă este necesar, porniți înapoi în modul KMS, făcând următoarele:

  1. Editați config.txt în partiția de pornire, asigurându-vă că rulați editorul folosind sudo și schimbați linia care spune #dtoverlay=vc4-kms-v3d în dtoverlay=vc4-kms-v3d.
  2. Reporniți.

NOTA
Dacă utilizați un file-based EDID, dar mai aveți probleme cu hotplug, puteți forța detectarea hotplug-ului adăugând următoarele la linia de comandă a nucleului: video=HDMI-A-1:D.

Documente/Resurse

Driver grafic pentru ieșire HDMI RaspberryPi KMS [pdfManual de utilizare
KMS, Driver grafic de ieșire HDMI, Ieșire KMS HDMI, Driver grafic, Driver grafic de ieșire KMS HDMI, Driver

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *