LOGO RaspberryPi

Controlador de gráficos de saída HDMI RaspberryPi KMS

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

Colofón

2020-2023 Raspberry Pi Ltd (anteriormente Raspberry Pi (Trading) Ltd.) Esta documentación está baixo unha licenza Creative Commons Recoñecemento-Sen Derivadas 4.0 Internacional (CC BY-ND 4.0). data de compilación: 2023-02-10 versión de compilación: githash: c65fe9c-clean

Aviso legal de exención de responsabilidade

OS DATOS TÉCNICOS E DE FIABILIDADE DOS PRODUTOS DE RASPBERRY PI (INCLUÍDAS AS FOLLAS DE DATOS) MODIFICADOS DE CADA VEZ ("RECURSOS") PROPORCIONAN RASPBERRY PI LTD ("RPL") "TAL CUAL" E CALQUERA GARANTÍA EXPRESA OU IMPLÍCITA, INCLUÍDO, PERO NON LIMITADO. AO, NEGARÁNSE AS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDADE E IDONEIDADE PARA UN FIN PARTICULAR. NA MEDIDA MÁXIMA PERMITIDA POLA LEI APLICABLE EN NINGÚN CASO, RPL SERÁ RESPONSABLE DE NINGÚN DANOS DIRECTOS, INDIRECTOS, ACCIDENTALES, ESPECIAIS, EXEMPLARS OU CONSECUENTES (INCLUÍDO, PERO NON LIMITADO A, A ADQUISICIÓN DE BENS SUBSTITUTIVOS, PERDA DE DATOS; , OU BENEFICIOS; OU INTERRUPCIÓN DE NEGOCIOS) SEEN O CAUSADOS E SOBRE CALQUERA TEORÍA DE RESPONSABILIDADE, FOI POR CONTRATO, RESPONSABILIDADE ESTRICTA OU EXTRAORDINARIA (INCLÚA A NEGLIXENCIA OU DE OUTRO MODO) DERIVADA DE CALQUERA FORMA DO USO DOS RECURSOS, INCLUSO A CONSULTABILIDADE DE DE TAL DANO. RPL resérvase o dereito de facer calquera mellora, mellora, corrección ou calquera outra modificación nos RECURSOS ou en calquera produto descrito neles en calquera momento e sen previo aviso. Os RECURSOS están destinados a usuarios cualificados con niveis axeitados de coñecemento do deseño. Os usuarios son os únicos responsables da súa selección e uso dos RECURSOS e de calquera aplicación dos produtos descritos neles. O usuario comprométese a indemnizar e eximir a RPL de todas as responsabilidades, custos, danos ou outras perdas que se deriven do seu uso dos RECURSOS. RPL concede aos usuarios permiso para usar os RECURSOS unicamente xunto cos produtos Raspberry Pi. Queda prohibido calquera outro uso dos RECURSOS. Non se concede ningunha licenza a ningún outro RPL ou dereito de propiedade intelectual de terceiros. ACTIVIDADES DE ALTO RISCO. Os produtos Raspberry Pi non están deseñados, fabricados nin destinados a ser utilizados en ambientes perigosos que requiran un rendemento seguro contra fallos, como no funcionamento de instalacións nucleares, sistemas de navegación ou comunicación de aeronaves, control de tráfico aéreo, sistemas de armas ou aplicacións críticas para a seguridade (incluído o soporte vital). sistemas e outros dispositivos médicos), nos que a falla dos produtos pode provocar directamente a morte, danos persoais ou graves danos físicos ou ambientais (“Actividades de alto risco”). RPL renuncia específicamente a calquera garantía expresa ou implícita de aptitude para actividades de alto risco e non acepta ningunha responsabilidade polo uso ou inclusión de produtos Raspberry Pi en actividades de alto risco. Os produtos Raspberry Pi ofrécense suxeitos ás Condicións estándar de RPL. A disposición de RPL dos RECURSOS non amplía nin modifica de ningún xeito as Condicións estándar de RPL, incluíndo, entre outras, as renuncias e garantías expresadas nelas.

Historial de versións do documento

RaspberryPi-KMS-Saída-HDMI-Controlador-gráficos-FIG-1

Alcance do documento

Este documento aplícase aos seguintes produtos Raspberry Pi

RaspberryPi-KMS-Saída-HDMI-Controlador-gráficos-FIG-2

Introdución

Coa introdución do controlador de gráficos KMS (Configuración do modo de núcleo), Raspberry Pi Ltd está a afastarse do control do firmware heredado do sistema de saída de vídeo e cara a un sistema de gráficos de código aberto. Non obstante, isto veu co seu propio conxunto de desafíos. Este documento está destinado a axudar con calquera problema que poida xurdir ao pasar ao novo sistema. Este documento asume que Raspberry Pi está executando o sistema operativo Raspberry Pi e está totalmente actualizado co firmware e os núcleos máis recentes.

Terminoloxía

DRM: Direct Rendering Manager, un subsistema do núcleo de Linux que se utiliza para comunicarse coas unidades de procesamento de gráficos (GPU). Usado en colaboración con FKMS e KMS.
DVI: Un predecesor de HDMI, pero sen as capacidades de audio. Hai cables e adaptadores HDMI a DVI dispoñibles para conectar un dispositivo Raspberry Pi a unha pantalla equipada con DVI.
EDICIÓN: Datos de identificación de visualización ampliada. Un formato de metadatos para que os dispositivos de visualización describan as súas capacidades nunha fonte de vídeo. A estrutura de datos EDID inclúe o nome do fabricante e o número de serie, o tipo de produto, o tamaño físico da pantalla e os tempos que admite a pantalla, xunto con algúns datos menos útiles. Algunhas pantallas poden ter bloques EDID defectuosos, o que pode causar problemas se eses defectos non son xestionados polo sistema de visualización.
FKMS (vc4-fkms-v3d): Configuración do modo de núcleo falso. Aínda que o firmware aínda controla o hardware de baixo nivel (por exemploample, os portos de interface multimedia de alta definición (HDMI), a interface de serie de visualización (DSI), etc.), as bibliotecas estándar de Linux utilízanse no propio núcleo. FKMS utilízase de forma predeterminada en Buster, pero agora está en desuso en favor de KMS en Bullseye.
HDMI: High-Definition Multimedia Interface é unha interface propietaria de audio/vídeo para transmitir datos de vídeo sen comprimir e datos de audio dixital comprimidos ou sen comprimir.
HPD: Detección de conexión en caliente. Un cable físico que é afirmado por un dispositivo de visualización conectado para mostrar que está presente.
KMS: Configuración do modo do núcleo; Ver https://www.kernel.org/doc/html/latest/gpu/drm-kms.html para máis detalles. En Raspberry Pi, vc4-kms-v3d é un controlador que implementa KMS e adoita denominarse "o controlador KMS". Pila de gráficos heredada: unha pila de gráficos totalmente implementada no blob de firmware VideoCore exposto por un controlador de framebuffer de Linux. A pila de gráficos heredado utilizouse na maioría dos dispositivos Raspberry Pi Ltd ata hai pouco; agora está sendo substituído gradualmente por (F)KMS/DRM.

O sistema HDMI e os controladores gráficos

Os dispositivos Raspberry Pi usan o estándar HDMI, que é moi común nos modernos monitores LCD e televisores, para a saída de vídeo. Raspberry Pi 3 (incluíndo Raspberry Pi 3B+) e os dispositivos anteriores teñen un único porto HDMI, que é capaz de obter unha saída de 1920 × 1200 a 60 Hz mediante un conector HDMI de tamaño completo. Raspberry Pi 4 ten dous portos micro HDMI e é capaz de saída 4K en ambos os dous portos. Dependendo da configuración, o porto HDMI 0 de Raspberry Pi 4 é capaz de ata 4kp60, pero cando se usan dous dispositivos de saída 4K estás limitado a p30 en ambos os dous dispositivos. A pila de software de gráficos, independentemente da versión, encárgase de interrogar os dispositivos HDMI conectados sobre as súas propiedades e de configurar o sistema HDMI de forma adecuada. As pilas legacy e FKMS usan firmware no procesador de gráficos VideoCore para comprobar a presenza e as propiedades de HDMI. Pola contra, KMS usa unha implementación do lado ARM de código aberto. Isto significa que as bases de código para os dous sistemas son totalmente diferentes e, nalgunhas circunstancias, isto pode producir un comportamento diferente entre os dous enfoques. Os dispositivos HDMI e DVI identifícanse co dispositivo fonte mediante unha peza de metadatos chamado bloque EDID. Isto é lido polo dispositivo de orixe desde o dispositivo de visualización mediante unha conexión I2C, e isto é totalmente transparente para o usuario final xa que o fai a pila de gráficos. O bloque EDID contén unha gran cantidade de información, pero utilízase principalmente para especificar que resolucións admite a pantalla, polo que Raspberry Pi pódese configurar para obter unha resolución adecuada.

Como se trata HDMI durante o arranque

Cando se acende por primeira vez, Raspberry Pi pasa por un número de stages, coñecido como boot stages:

  1. O primeiro-stage, o cargador de arranque baseado en ROM inicia a GPU VideoCore.
  2. Segundo-stage cargador de arranque (este é bootcode.bin na tarxeta SD en dispositivos anteriores a Raspberry Pi 4 e na EEPROM SPI en Raspberry Pi 4):
    1. En Raspberry Pi 4, o segundo stagO cargador de arranque iniciará o sistema HDMI, interrogará a pantalla sobre os posibles modos e, a continuación, configurará a pantalla adecuadamente. Neste punto, a pantalla úsase para proporcionar datos básicos de diagnóstico.
    2. A pantalla de diagnóstico do cargador de arranque (a partir do 07 de decembro de 2022) mostrará o estado das pantallas anexas (se está presente Hotplug Detect (HPD) e se se recuperou un bloque EDID da pantalla).
  3. O firmware VideoCore (start.elf) está cargado e executado. Isto asumirá o control do sistema HDMI, lerá o bloque EDID das pantallas anexas e mostrará a pantalla do arco da vella nesas pantallas.
  4. O kernel de Linux arranca
    1. Durante o inicio do núcleo, KMS asumirá o control do sistema HDMI desde o firmware. Unha vez máis, o bloque EDID é lido desde calquera pantalla adxunta e esta información utilízase para configurar a consola e o escritorio de Linux.

Posibles problemas e síntomas

O síntoma de fallo máis común que se experimenta ao pasar a KMS é un inicio inicialmente bo, coa pantalla do cargador de arranque e despois aparece a pantalla do arco da vella, seguida duns segundos pola pantalla que se volve negra e non se volve a acender. O punto no que a pantalla se pon negra é de feito o punto durante o proceso de inicio do núcleo cando o controlador KMS se fai cargo da execución da pantalla desde o firmware. O Raspberry Pi está funcionando actualmente en todos os aspectos, excepto na saída HDMI, polo que se SSH está activado, deberías poder iniciar sesión no dispositivo por esa vía. O LED verde de acceso á tarxeta SD normalmente parpadeará ocasionalmente. Tamén é posible que non vexa ningunha saída HDMI; sen visualización do cargador de arranque e sen pantalla arco da vella. Isto xeralmente pódese atribuír a un fallo de hardware.

Diagnóstico da avaría

Non hai saída HDMI
É posible que o dispositivo non se iniciou en absoluto, pero isto está fóra das competencias deste libro branco. Asumindo que o comportamento observado é un problema de visualización, a falta de saída HDMI durante calquera parte do proceso de inicio adoita deberse a un fallo de hardware. Hai unha serie de opcións posibles:

  • Cable HDMI defectuoso
  • Proba cun cable novo. Algúns cables, especialmente os moi baratos, poden non conter todas as liñas de comunicación necesarias (por exemplo, hotplug) para que Raspberry Pi detecte correctamente a pantalla.
  • Porto HDMI defectuoso na Raspberry Pi
  • Se estás a usar un Raspberry Pi 4, proba co outro porto HDMI.
  • Porto HDMI defectuoso no monitor
  • Ás veces, o porto HDMI dun monitor ou TV pode desgastarse. Proba cun porto diferente se o dispositivo ten un.
  • Poucas veces, un dispositivo de visualización só pode proporcionar datos EDID cando está acendido ou cando se selecciona o porto correcto. Para comprobar, asegúrese de que o dispositivo está acendido e de que se selecciona o porto de entrada correcto.
  • O dispositivo de visualización non afirma a liña de detección de conexión en quente

Saída inicial, despois a pantalla queda negra
Se a pantalla aparece pero despois apágase durante o inicio do núcleo de Linux, hai unha serie de posibles causas, e estas normalmente están relacionadas cun problema ao ler o EDID desde o dispositivo de visualización. Como se pode ver na sección anterior que trata sobre a secuencia de arranque, o EDID lese en varios puntos diferentes durante o proceso de arranque, e cada unha destas lecturas realízase mediante un software diferente. A lectura final, cando o KMS toma o control, realízase mediante o código do núcleo de Linux ascendente inalterado, e isto non xestiona os formatos EDID defectuosos, así como o software de firmware anterior. É por iso que a pantalla pode deixar de funcionar correctamente unha vez que KMS se faga cargo. Hai varias formas de confirmar se KMS non pode ler o EDID, e dúas delas son as seguintes.
Comprobe a pantalla de diagnóstico do cargador de arranque (só Raspberry Pi 4)

NOTA
Os diagnósticos do cargador de arranque requiren un cargador de arranque recente. Podes actualizar á última versión usando estas instrucións: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Retire a tarxeta SD e reinicie o Raspberry Pi. Prema ESC na pantalla Instalar SO e a pantalla de diagnóstico debería aparecer no dispositivo de visualización. Debería haber unha liña na pantalla que comece por display: — por exemploampLe:

  • visualización: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=ninguno #0

Esta saída dun Raspberry Pi 4 mostra que o sistema detectou unha pantalla HDMI no porto HDMI 0, a detección de conexión en quente afírmase e o EDID foi lido ben. Non se atopou nada no porto HDMI 1.

Comproba se o sistema KMS detectou un EDID
Para comprobar isto, terás que iniciar sesión no dispositivo Raspberry Pi a través de SSH desde un ordenador diferente. SSH pódese activar ao crear unha imaxe de tarxeta SD con Raspberry Pi Imager, usando as opcións de Configuración avanzada. Activar SSH nunha tarxeta SD que xa foi capturada é un pouco máis complicado: terás que usar outro ordenador para engadir un file chamado ssh á partición de arranque. Substitúe a tarxeta SD na Raspberry Pi orixinal e encéndela. Isto debería activar SSH, cun enderezo IP asignado por DHCP. Unha vez iniciado sesión, escriba o seguinte no indicador do terminal para mostrar o contido de calquera EDID detectado (pode que teña que cambiar HDMI-A-1 a HDMI-A-2 dependendo do porto HDMI do Raspberry Pi ao que estea conectado o dispositivo de visualización). a): cat /sys/class/drm/card?-HDMI-A-1/edid Se non hai cartafoles chamados card?-HDMI-A-1 ou semellante, é probable que non se poida ler ningún EDID na pantalla dispositivo.

NOTA
No caso de que o EDID se lea con éxito, hai un virtual útil file no mesmo cartafol, chamado modos, que cando se mostra mostra todos os modos posibles que o EDID afirma que admite o dispositivo.

Mitigacións

Fallo de detección de conexión en quente Se tanto o firmware como o KMS non atopan un monitor conectado, pode tratarse dun fallo de detección de conexión en quente, é dicir, a Raspberry Pi non sabe que se conectou un dispositivo, polo que non verifica se hai un EDID. Isto pode deberse a un cable defectuoso ou a un dispositivo de visualización que non activa a conexión en quente correctamente. Pode forzar a detección de conexión en quente modificando a liña de comandos do núcleo file (cmdline.txt) que se almacena na partición de arranque dunha tarxeta SD de Raspberry Pi OS. Podes editar isto file noutro sistema, usando o editor que prefira. Engade o seguinte ao final do cmdline.txt file: video=HDMI-A-1:1280×720@60D Se está a usar o segundo porto HDMI, substitúa HDMI-A-1 por HDMI-A-2. Tamén podes especificar unha resolución e unha taxa de cadros diferentes, pero asegúrate de escoller as que admita o dispositivo de visualización.

NOTA
A documentación sobre a configuración da liña de comandos do núcleo para o vídeo pódese atopar aquí: https://www.kernel.org/doc/Documentation/fb/modedb.txt

AVISO
As pilas de gráficos máis antigas admitían o uso dunha entrada config.txt para establecer a detección de conexión en quente, pero no momento de escribir isto non funciona con KMS. É posible que sexa compatible con futuras versións de firmware. A entrada config.txt é hdmi_force_hotplug e podes especificar o porto HDMI específico ao que se aplica o hotplug usando hdmi_force_hotplug:0=1 ou hdmi_force_hotplug:1=1. Teña en conta que a nomenclatura para KMS refírese aos portos HDMI como 1 e 2, mentres que Raspberry Pi usa 0 e 1.

Problemas EDID
Unha minoría de dispositivos de visualización non poden devolver un EDID se están desactivados ou cando se selecciona a entrada AV incorrecta. Isto pode ser un problema cando o Raspberry Pi e os dispositivos de visualización están na mesma tira de alimentación e o dispositivo Raspberry Pi arranca máis rápido que a pantalla. Con dispositivos como este, é posible que necesites proporcionar un EDID manualmente. Aínda máis inusual, algúns dispositivos de visualización teñen bloques EDID mal formateados e o sistema KMS EDID non pode ser analizado. Nestas circunstancias, pode ser posible ler un EDID desde un dispositivo cunha resolución similar e utilizalo. En calquera dos casos, as seguintes instrucións indican como ler un EDID desde un dispositivo de visualización e configurar o KMS para usalo, en lugar de que o KMS intente interrogar o dispositivo directamente.

Copiando un EDID a a file
Creando un file Conter metadatos EDID desde cero non adoita ser factible, e usar un existente é moito máis sinxelo. En xeral, é posible obter un EDID dun dispositivo de visualización e almacenalo na tarxeta SD da Raspberry Pi para que o poida usar KMS en lugar de obter un EDID do dispositivo de visualización. A opción máis sinxela aquí é asegurarse de que o dispositivo de visualización estea en funcionamento e na entrada AV correcta e que o Raspberry Pi iniciou o sistema HDMI correctamente. Desde o terminal, agora pode copiar o EDID a un file co seguinte comando: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Se por algún motivo o EDID non está presente, pode iniciar o dispositivo nun -Modo KMS que se inicia correctamente no escritorio ou na consola e, a continuación, copie o EDID que o firmware (con sorte) lerá con éxito nun file.

  1. Iniciar ao modo de gráficos heredado.
    1. Edita config.txt na partición de arranque, asegúrate de executar o teu editor usando sudo e cambia a liña que di dtoverlay=vc4-kms-v3d a #dtoverlay=vc4-kms-v3d.
    2. Reinicie.
  2. Agora debería aparecer o escritorio ou a consola de inicio de sesión.
    1. Usando o terminal, copie o EDID do dispositivo de visualización conectado a a file co seguinte comando:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Usando a file-based EDID en lugar de interrogar o dispositivo de visualización Edite /boot/cmdline.txt, asegúrese de executar o seu editor usando sudo e engada o seguinte á liña de comandos do núcleo: drm.edid_firmware=myedid.dat Pode aplicar o EDID a un porto HDMI específico do seguinte xeito: drm.edid_firmware=HDMI-A-1:myedid.dat Se é necesario, reinicie o modo KMS facendo o seguinte:

  1. Edita config.txt na partición de arranque, asegúrate de executar o teu editor usando sudo e cambia a liña que di #dtoverlay=vc4-kms-v3d a dtoverlay=vc4-kms-v3d.
  2. Reinicie.

NOTA
Se usa a file-based EDID, pero aínda tes problemas co hotplug, podes forzar a detección de hotplug engadindo o seguinte á liña de comandos do núcleo: video=HDMI-A-1:D.

Documentos/Recursos

Controlador de gráficos de saída HDMI RaspberryPi KMS [pdfManual do usuario
KMS, Controlador de gráficos de saída HDMI, Saída de KMS HDMI, Controlador de gráficos, Controlador de gráficos de saída KMS HDMI, Controlador

Referencias

Deixa un comentario

O teu enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados *