RaspberryPi-LOGO

Controlador de gràfics de sortida HDMI RaspberryPi KMS

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

Colofó

2020-2023 Raspberry Pi Ltd (anteriorment Raspberry Pi (Trading) Ltd.) Aquesta documentació està subjecta a una llicència Creative Commons Reconeixement-Sense Derivades 4.0 Internacional (CC BY-ND 4.0). data de compilació: 2023-02-10 versió de compilació: githash: c65fe9c-clean

Avís legal d'exempció de responsabilitat

LES DADES TÈCNIQUES I DE FIABILITAT DELS PRODUCTES RASPBERRY PI (INCLOSO LES FITXES DE DADES) MODIFICAT DE TANTA EN TEMPS ("RECURSOS") LES PROPORCIONEN PER RASPBERRY PI LTD ("RPL") "TAL CUAL" I QUALSEVOL GARANTIA EXPRESSA O IMPLÍCITA, INCLOSA, PERÒ NO LIMITADA. A, LES GARANTIES IMPLÍCITES DE COMERCIABILITAT I IDONEITAT PER A UN PROPÒSIT PARTICULAR ES RENUNCIAN. EN LA MESURA MÀXIMA PERMESA PER LA LLEI APLICABLE EN CAP CAS, RPL SERÀ RESPONSABLE DE CAP DANYS DIRECTS, INDIRECTS, INCIDENTALS, ESPECIALS, EXEMPLARS O CONSEQUENTLS (INCLOSOS, PERÒ NO LIMITAR-SE, LA ADQUISICIÓ DE BÉNS SUBSTITUTS, PÈRDUES DE DADES; , O BENEFICIS; O INTERRUPCIÓ DE NEGOCIS) SIGUI QUE ÉS CAUSADA I SOBRE QUALSEVOL TEORIA DE RESPONSABILITAT, JA SIGUI EN CONTRACTE, RESPONSABILITAT ESTRICTA O ALTRES (INCLOSA LA NEGLIGÈNCIA O ALTRE MANERA) SORRIJADA DE QUALSEVOL MANERA DE L'ÚS DE LA RESPONSABILITAT, D'AQUEST DANY. RPL es reserva el dret de fer qualsevol millora, millora, correcció o qualsevol altra modificació als RECURSOS o als productes que s'hi descriuen en qualsevol moment i sense cap avís. Els RECURSOS estan destinats a usuaris qualificats amb nivells adequats de coneixements de disseny. Els usuaris són els únics responsables de la seva selecció i ús dels RECURSOS i de qualsevol aplicació dels productes que s'hi descriuen. L'usuari es compromet a indemnitzar i mantenir indemne a RPL de totes les responsabilitats, costos, danys o altres pèrdues derivades del seu ús dels RECURSOS. RPL concedeix als usuaris permís per utilitzar els RECURSOS únicament juntament amb els productes Raspberry Pi. Queda prohibit qualsevol altre ús dels RECURSOS. No s'atorga cap llicència a cap altre RPL o dret de propietat intel·lectual de tercers. ACTIVITATS D'ALT RISC. Els productes Raspberry Pi no estan dissenyats, fabricats ni pensats per al seu ús en entorns perillosos que requereixin un rendiment segur contra errors, com ara en l'operació d'instal·lacions nuclears, sistemes de navegació o comunicació d'aeronaus, control de trànsit aeri, sistemes d'armes o aplicacions crítiques per a la seguretat (inclòs el suport vital). sistemes i altres dispositius mèdics), en els quals la fallada dels productes podria provocar directament la mort, lesions personals o danys físics o ambientals greus (“Activitats d'alt risc”). RPL renuncia específicament a qualsevol garantia expressa o implícita d'aptitud per a Activitats d'Alt Risc i no accepta cap responsabilitat per l'ús o inclusió dels productes Raspberry Pi a les Activitats d'Alt Risc. Els productes Raspberry Pi es proporcionen subjectes a les condicions estàndard de RPL. La disposició de RPL dels RECURSOS no amplia ni modifica d'una altra manera les Condicions estàndard de RPL, incloses, entre altres, les exempcions de responsabilitat i garanties expressades en elles.

Historial de versions del document

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

Àmbit del document

Aquest document s'aplica als següents productes Raspberry Pi

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

Introducció

Amb la introducció del controlador de gràfics KMS (Configuració del mode del nucli), Raspberry Pi Ltd s'allunya del control del microprogramari heretat del sistema de sortida de vídeo i cap a un sistema de gràfics de codi obert. Tanmateix, això ha vingut amb el seu propi conjunt de reptes. Aquest document té com a objectiu ajudar amb qualsevol problema que pugui sorgir en passar al nou sistema. Aquest document blanc suposa que Raspberry Pi està executant el sistema operatiu Raspberry Pi i està totalment actualitzat amb els darrers microprogramaris i nuclis.

Terminologia

DRM: Direct Rendering Manager, un subsistema del nucli de Linux utilitzat per comunicar-se amb unitats de processament gràfic (GPU). S'utilitza en col·laboració amb FKMS i KMS.
DVI: Un predecessor de HDMI, però sense les capacitats d'àudio. Hi ha cables i adaptadors HDMI a DVI disponibles per connectar un dispositiu Raspberry Pi a una pantalla equipada amb DVI.
EDID: Dades d'identificació de visualització ampliada. Un format de metadades per als dispositius de visualització per descriure les seves capacitats a una font de vídeo. L'estructura de dades EDID inclou el nom del fabricant i el número de sèrie, el tipus de producte, la mida de la pantalla física i els temps admesos per la pantalla, juntament amb algunes dades menys útils. Algunes pantalles poden tenir blocs EDID defectuosos, cosa que pot causar problemes si el sistema de visualització no gestiona aquests defectes.
FKMS (vc4-fkms-v3d): Configuració del mode de nucli fals. Tot i que el microprogramari encara controla el maquinari de baix nivell (per example, els ports de la interfície multimèdia d'alta definició (HDMI), la interfície de sèrie de pantalla (DSI), etc.), les biblioteques estàndard de Linux s'utilitzen al propi nucli. FKMS s'utilitza de manera predeterminada a Buster, però ara està obsolet a favor de KMS a Bullseye.
HDMI: La interfície multimèdia d'alta definició és una interfície d'àudio/vídeo propietària per transmetre dades de vídeo sense comprimir i dades d'àudio digital comprimides o sense comprimir.
HPD: Detecció de connexió en calent. Un cable físic que és afirmat per un dispositiu de visualització connectat per mostrar que està present.
KMS: Configuració del mode del nucli; veure https://www.kernel.org/doc/html/latest/gpu/drm-kms.html per a més detalls. A Raspberry Pi, vc4-kms-v3d és un controlador que implementa KMS i sovint es coneix com "el controlador KMS". Pila de gràfics heretada: una pila de gràfics totalment implementada al blob de microprogramari VideoCore exposat per un controlador de framebuffer de Linux. La pila de gràfics heretada s'ha utilitzat a la majoria de dispositius Raspberry Pi Ltd fins fa poc; ara s'està substituint gradualment per (F)KMS/DRM.

El sistema HDMI i els controladors gràfics

Els dispositius Raspberry Pi utilitzen l'estàndard HDMI, que és molt comú als monitors i televisors LCD moderns, per a la sortida de vídeo. El Raspberry Pi 3 (inclòs el Raspberry Pi 3B+) i els dispositius anteriors tenen un únic port HDMI, capaç de tenir una sortida de 1920 × 1200 a 60 Hz mitjançant un connector HDMI de mida completa. Raspberry Pi 4 té dos ports micro HDMI i és capaç de sortir 4K als dos ports. Depenent de la configuració, el port HDMI 0 de Raspberry Pi 4 és capaç de fins a 4kp60, però quan utilitzeu dos dispositius de sortida 4K, esteu limitat a p30 als dos dispositius. La pila de programari gràfic, independentment de la versió, s'encarrega d'interrogar els dispositius HDMI connectats per les seves propietats i de configurar el sistema HDMI adequadament. Les piles Legacy i FKMS utilitzen firmware al processador de gràfics VideoCore per comprovar la presència i les propietats de HDMI. Per contra, KMS utilitza una implementació del costat ARM de codi obert completament. Això significa que les bases del codi dels dos sistemes són completament diferents i, en algunes circumstàncies, això pot provocar un comportament diferent entre els dos enfocaments. Els dispositius HDMI i DVI s'identifiquen amb el dispositiu font mitjançant una peça de metadades anomenada bloc EDID. Això ho llegeix el dispositiu d'origen des del dispositiu de visualització mitjançant una connexió I2C, i això és totalment transparent per a l'usuari final, ja que ho fa la pila de gràfics. El bloc EDID conté una gran quantitat d'informació, però s'utilitza principalment per especificar quines resolucions admet la pantalla, de manera que Raspberry Pi es pot configurar per obtenir una resolució adequada.

Com es gestiona HDMI durant l'arrencada

Quan s'encén per primera vegada, Raspberry Pi passa per una sèrie de stages, conegut com boot stages:

  1. El primer-stage, el carregador d'arrencada basat en ROM inicia la GPU VideoCore.
  2. Segon-stage carregador d'arrencada (això és bootcode.bin a la targeta SD en dispositius anteriors a Raspberry Pi 4 i a SPI EEPROM a Raspberry Pi 4):
    1. A Raspberry Pi 4, el segon stagEl carregador d'arrencada iniciarà el sistema HDMI, interrogarà la pantalla per a possibles modes i, a continuació, configurarà la pantalla adequadament. En aquest punt, la pantalla s'utilitza per proporcionar dades de diagnòstic bàsiques.
    2. La pantalla de diagnòstic del carregador d'arrencada (a partir del 07 de desembre de 2022) mostrarà l'estat de les pantalles adjuntes (si hi ha Hotplug Detect (HPD) i si s'ha recuperat un bloc EDID de la pantalla).
  3. El microprogramari VideoCore (start.elf) es carrega i s'executa. Això prendrà el control del sistema HDMI, llegirà el bloc EDID de qualsevol pantalla adjunta i mostrarà la pantalla de l'arc de Sant Martí en aquestes pantalles.
  4. El nucli de Linux arrenca
    1. Durant l'arrencada del nucli, KMS prendrà el control del sistema HDMI des del microprogramari. Una vegada més, el bloc EDID es llegeix des de qualsevol pantalla adjunta, i aquesta informació s'utilitza per configurar la consola i l'escriptori Linux.

Possibles problemes i símptomes

El símptoma de fallada més comú que s'experimenta en moure's al KMS és un arrencada inicialment correcta, amb la pantalla del carregador d'arrencada i després la pantalla de l'arc de Sant Martí, seguida al cap d'uns segons de la pantalla que es torna negra i no es torna a encendre. El punt en què la pantalla es torna negra és de fet el punt durant el procés d'arrencada del nucli quan el controlador KMS es fa càrrec de l'execució de la pantalla des del microprogramari. El Raspberry Pi s'està executant actualment en tots els aspectes, excepte per a la sortida HDMI, de manera que si SSH està habilitat, hauríeu de poder iniciar sessió al dispositiu per aquesta ruta. El LED verd d'accés a la targeta SD normalment parpelleja de tant en tant. També és possible que no vegeu cap sortida HDMI; sense pantalla del carregador d'arrencada ni pantalla de l'arc de Sant Martí. Normalment, això es pot atribuir a una fallada del maquinari.

Diagnòstic de l'avaria

No hi ha sortida HDMI
És possible que el dispositiu no s'hagi arrencat en absolut, però això està fora de les competències d'aquest llibre blanc. Suposant que el comportament observat és un problema de visualització, la manca de sortida HDMI durant qualsevol part del procés d'arrencada sol ser deguda a una fallada del maquinari. Hi ha diverses opcions possibles:

  • Cable HDMI defectuós
  • Proveu un cable nou. És possible que alguns cables, especialment els molt econòmics, no continguin totes les línies de comunicacions necessàries (per exemple, hotplug) perquè Raspberry Pi detecti correctament la pantalla.
  • Port HDMI defectuós a Raspberry Pi
  • Si utilitzeu un Raspberry Pi 4, proveu l'altre port HDMI.
  • Port HDMI defectuós al monitor
  • De vegades, el port HDMI d'un monitor o TV es pot desgastar. Proveu un port diferent si el dispositiu en té un.
  • En poques ocasions, un dispositiu de visualització només pot proporcionar dades EDID quan està encès o quan se selecciona el port correcte. Per comprovar-ho, assegureu-vos que el dispositiu estigui encès i que estigui seleccionat el port d'entrada correcte.
  • El dispositiu de visualització no afirma la línia de detecció de connexió en calent

Sortida inicial, després la pantalla es torna negra
Si la pantalla apareix però després s'apaga durant l'arrencada del nucli de Linux, hi ha diverses causes possibles, i aquestes solen estar relacionades amb un problema per llegir l'EDID des del dispositiu de visualització. Com es pot veure a la secció anterior que tracta de la seqüència d'arrencada, l'EDID es llegeix en diversos punts durant el procés d'arrencada, i cadascuna d'aquestes lectures es fa mitjançant un programari diferent. La lectura final, quan KMS pren el relleu, es fa mitjançant el codi del nucli de Linux amunt inalterat, i això no gestiona els formats EDID defectuosos, així com el programari de microprogramari anterior. És per això que la pantalla pot deixar de funcionar correctament un cop KMS es faci càrrec. Hi ha diverses maneres de confirmar si KMS no pot llegir l'EDID, i dues d'aquestes són les següents.
Comproveu la pantalla de diagnòstic del carregador d'arrencada (només Raspberry Pi 4)

NOTA
Els diagnòstics del carregador d'arrencada requereixen un carregador d'arrencada recent. Podeu actualitzar a la darrera versió seguint aquestes instruccions: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Traieu la targeta SD i reinicieu el Raspberry Pi. Premeu ESC a la pantalla d'instal·lació del sistema operatiu i la pantalla de diagnòstic hauria d'aparèixer al dispositiu de visualització. Hi hauria d'haver una línia a la pantalla que comenci per pantalla: — per exempleampLI:

  • visualització: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=cap #0

Aquesta sortida d'un Raspberry Pi 4 mostra que el sistema va detectar una pantalla HDMI al port HDMI 0, s'afirma la detecció de connexió en calent i l'EDID es va llegir bé. No s'ha trobat res al port HDMI 1.

Comproveu si el sistema KMS ha detectat un EDID
Per comprovar-ho, haureu d'iniciar sessió al dispositiu Raspberry Pi mitjançant SSH des d'un ordinador diferent. SSH es pot activar quan es crea una imatge de targeta SD amb Raspberry Pi Imager, utilitzant les opcions de configuració avançada. Habilitar SSH en una targeta SD que ja s'ha fet una imatge és una mica més complicat: haureu d'utilitzar un altre ordinador per afegir un file anomenat ssh a la partició d'arrencada. Substituïu la targeta SD a la Raspberry Pi original i engegueu-la. Això hauria d'habilitar SSH, amb una adreça IP assignada per DHCP. Un cop hàgiu iniciat la sessió, escriviu el següent a l'indicador del terminal per mostrar el contingut de qualsevol EDID detectat (pot ser que hàgiu de canviar HDMI-A-1 a HDMI-A-2 en funció del port HDMI del Raspberry Pi el dispositiu de visualització està connectat). a): cat /sys/class/drm/card?-HDMI-A-1/edid Si no hi ha carpetes anomenades card?-HDMI-A-1 o similar, és probable que no es pugui llegir cap EDID a la pantalla dispositiu.

NOTA
En el cas que l'EDID es llegeixi correctament, hi ha un virtual útil file a la mateixa carpeta, anomenada modes, que quan es mostra mostra tots els modes possibles que l'EDID afirma que admet el dispositiu.

Mitigacions

Error de detecció de connexió en calent Si tant el microprogramari com el KMS no troben un monitor connectat, podria ser un error de detecció de connexió en calent, és a dir, el Raspberry Pi no sap que s'ha connectat un dispositiu, de manera que no verifica si hi ha un EDID. Això podria ser causat per un cable defectuós o per un dispositiu de visualització que no s'afirma correctament. Podeu forçar la detecció d'un hotplug alterant la línia d'ordres del nucli file (cmdline.txt) que s'emmagatzema a la partició d'arrencada d'una targeta SD de Raspberry Pi OS. Podeu editar això file en un altre sistema, utilitzant l'editor que preferiu. Afegiu el següent al final del cmdline.txt file: vídeo=HDMI-A-1:1280×720@60D Si utilitzeu el segon port HDMI, substituïu HDMI-A-1 per HDMI-A-2. També podeu especificar una resolució i una velocitat de fotogrames diferents, però assegureu-vos de triar-ne les que admeti el dispositiu de visualització.

NOTA
La documentació sobre la configuració de la línia d'ordres del nucli per al vídeo es pot trobar aquí: https://www.kernel.org/doc/Documentation/fb/modedb.txt

ADVERTIMENT
Les piles de gràfics més antigues admetien l'ús d'una entrada config.txt per configurar la detecció de connexió en calent, però en el moment d'escriure això no funciona amb KMS. És possible que sigui compatible en futures versions de microprogramari. L'entrada config.txt és hdmi_force_hotplug, i podeu especificar el port HDMI específic al qual s'aplica el hotplug mitjançant hdmi_force_hotplug:0=1 o hdmi_force_hotplug:1=1. Tingueu en compte que la nomenclatura per a KMS fa referència als ports HDMI com a 1 i 2, mentre que Raspberry Pi utilitza 0 i 1.

Problemes EDID
Una minoria de dispositius de visualització són incapaços de retornar un EDID si estan apagats o quan se selecciona l'entrada AV incorrecta. Això pot ser un problema quan el Raspberry Pi i els dispositius de visualització es troben a la mateixa regleta d'alimentació i el dispositiu Raspberry Pi arrenca més ràpidament que la pantalla. Amb dispositius com aquest, és possible que hàgiu de proporcionar un EDID manualment. Encara més inusual, alguns dispositius de visualització tenen blocs EDID mal formatats i que el sistema KMS EDID no pot analitzar. En aquestes circumstàncies, pot ser possible llegir un EDID des d'un dispositiu amb una resolució similar i utilitzar-lo. En qualsevol dels casos, les instruccions següents estableixen com llegir un EDID des d'un dispositiu de visualització i configurar el KMS perquè l'utilitzi, en lloc de que KMS intenti interrogar el dispositiu directament.

Còpia d'un EDID a a file
Creant a file Contenir metadades EDID des de zero normalment no és factible, i utilitzar-ne una existent és molt més fàcil. En general, és possible obtenir un EDID d'un dispositiu de visualització i emmagatzemar-lo a la targeta SD del Raspberry Pi perquè el KMS pugui utilitzar-lo en lloc d'obtenir un EDID del dispositiu de visualització. L'opció més senzilla aquí és assegurar-se que el dispositiu de visualització està en funcionament i a l'entrada AV correcta i que el Raspberry Pi ha iniciat correctament el sistema HDMI. Des del terminal, ara podeu copiar l'EDID a a file amb l'ordre següent: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Si per algun motiu l'EDID no està present, podeu arrencar el dispositiu en un -Mode KMS que aconsegueix arrencar a l'escriptori o a la consola, després copieu l'EDID que el microprogramari (esperem) llegirà amb èxit a un file.

  1. Arrencada al mode de gràfics heretat.
    1. Editeu config.txt a la partició d'arrencada, assegurant-vos d'executar el vostre editor amb sudo i canvieu la línia que diu dtoverlay=vc4-kms-v3d a #dtoverlay=vc4-kms-v3d.
    2. Reinicieu.
  2. Ara hauria d'aparèixer l'escriptori o la consola d'inici de sessió.
    1. Amb el terminal, copieu l'EDID del dispositiu de visualització connectat a a file amb la següent comanda:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Utilitzant a file-based EDID en lloc d'interrogar el dispositiu de visualització Editeu /boot/cmdline.txt, assegurant-vos d'executar el vostre editor amb sudo i afegiu el següent a la línia d'ordres del nucli: drm.edid_firmware=myedid.dat Podeu aplicar l'EDID a un port HDMI específic de la següent manera: drm.edid_firmware=HDMI-A-1:myedid.dat Si cal, torneu a arrencar al mode KMS fent el següent:

  1. Editeu config.txt a la partició d'arrencada, assegureu-vos d'executar el vostre editor amb sudo i canvieu la línia que diu #dtoverlay=vc4-kms-v3d per dtoverlay=vc4-kms-v3d.
  2. Reinicieu.

NOTA
Si utilitzeu a file-based EDID, però encara tens problemes amb hotplug, pots forçar la detecció hotplug afegint el següent a la línia d'ordres del nucli: video=HDMI-A-1:D.

Documents/Recursos

Controlador de gràfics de sortida HDMI RaspberryPi KMS [pdfManual d'usuari
KMS, controlador de gràfics de sortida HDMI, sortida KMS HDMI, controlador de gràfics, controlador de gràfics de sortida KMS HDMI, controlador

Referències

Deixa un comentari

La teva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats *