RaspberryPi-LOGO

Pilote graphique de sortie RaspberryPi KMS HDMI

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

Colophon

2020-2023 Raspberry Pi Ltd (anciennement Raspberry Pi (Trading) Ltd.) Cette documentation est sous licence Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). date de construction : 2023/02/10 version de construction : githash : c65fe9c-clean

Avis de non-responsabilité légale

LES DONNÉES TECHNIQUES ET DE FIABILITÉ DES PRODUITS RASPBERRY PI (Y COMPRIS LES FICHES TECHNIQUES) TELLES QUE MODIFIÉES DE TEMPS À AUTRE (« RESSOURCES ») SONT FOURNIES PAR RASPBERRY PI LTD (« RPL ») « TELLES QUELLES » ET TOUTE GARANTIE EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER À, LES GARANTIES IMPLICITES DE QUALITÉ MARCHANDE ET D'ADÉQUATION À UN USAGE PARTICULIER SONT DÉCLINÉES. DANS LA MESURE MAXIMALE AUTORISÉE PAR LA LOI APPLICABLE, RPL NE SERA EN AUCUN CAS RESPONSABLE DE TOUT DOMMAGE DIRECT, INDIRECT, ACCESSOIRE, SPÉCIAL, EXEMPLAIRE OU CONSÉCUTIF (Y COMPRIS, MAIS SANS S'Y LIMITER, L'ACQUISITION DE BIENS OU SERVICES DE SUBSTITUTION ; PERTE D'UTILISATION, DE DONNÉES , OU BÉNÉFICES ; OU INTERRUPTION D'ACTIVITÉ) QUELLE QU'EN SOIT LA CAUSE ET SUR TOUTE THÉORIE DE RESPONSABILITÉ, QU'ELLE SOIT CONTRACTUELLE, RESPONSABILITÉ STRICTE OU DÉLICTUELLE (Y COMPRIS LA NÉGLIGENCE OU AUTRE) RÉSULTANT DE QUELQUE MANIÈRE QUE CE SOIT DE L'UTILISATION DES RESSOURCES, MÊME SI AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES. RPL se réserve le droit d'apporter des améliorations, des améliorations, des corrections ou toute autre modification aux RESSOURCES ou à tout produit qui y est décrit à tout moment et sans préavis. Les RESSOURCES sont destinées à des utilisateurs qualifiés ayant des niveaux appropriés de connaissances en conception. Les utilisateurs sont seuls responsables de leur sélection et de leur utilisation des RESSOURCES et de toute application des produits qui y sont décrits. L'utilisateur accepte d'indemniser et de dégager RPL de toute responsabilité, coût, dommage ou autre perte résultant de son utilisation des RESSOURCES. RPL accorde aux utilisateurs l'autorisation d'utiliser les RESSOURCES uniquement en conjonction avec les produits Raspberry Pi. Toute autre utilisation des RESSOURCES est interdite. Aucune licence n'est accordée à tout autre RPL ou autre droit de propriété intellectuelle de tiers. ACTIVITÉS À HAUT RISQUE. Les produits Raspberry Pi ne sont pas conçus, fabriqués ou destinés à être utilisés dans des environnements dangereux nécessitant des performances de sécurité, tels que l'exploitation d'installations nucléaires, les systèmes de navigation ou de communication d'aéronefs, le contrôle du trafic aérien, les systèmes d'armes ou les applications critiques pour la sécurité (y compris les systèmes de survie systèmes et autres dispositifs médicaux), dans lesquels la défaillance des produits pourrait entraîner directement la mort, des blessures corporelles ou des dommages physiques ou environnementaux graves ("Activités à haut risque"). RPL décline spécifiquement toute garantie expresse ou implicite d'adéquation aux activités à haut risque et n'accepte aucune responsabilité pour l'utilisation ou l'inclusion de produits Raspberry Pi dans les activités à haut risque. Les produits Raspberry Pi sont fournis sous réserve des conditions générales de RPL. La fourniture des RESSOURCES par RPL n'étend ni ne modifie autrement les Conditions générales de RPL, y compris, mais sans s'y limiter, les clauses de non-responsabilité et les garanties qui y sont exprimées.

Historique des versions de documents

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

Portée du document

Ce document s'applique aux produits Raspberry Pi suivants

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

Introduction

Avec l'introduction du pilote graphique KMS (Kernel Mode Setting), Raspberry Pi Ltd s'éloigne du contrôle du micrologiciel hérité du système de sortie vidéo et se dirige vers un système graphique plus open source. Cependant, cela s'est accompagné de son propre ensemble de défis. Ce document est destiné à vous aider à résoudre tout problème pouvant survenir lors du passage au nouveau système. Ce livre blanc suppose que Raspberry Pi exécute le système d'exploitation Raspberry Pi et qu'il est entièrement à jour avec les derniers micrologiciels et noyaux.

Terminologie

GDN : Direct Rendering Manager, un sous-système du noyau Linux utilisé pour communiquer avec les unités de traitement graphique (GPU). Utilisé en partenariat avec FKMS et KMS.
DVI: Un prédécesseur du HDMI, mais sans les capacités audio. Des câbles et adaptateurs HDMI vers DVI sont disponibles pour connecter un appareil Raspberry Pi à un écran équipé DVI.
EDID : Données d'identification d'affichage étendues. Format de métadonnées permettant aux appareils d'affichage de décrire leurs capacités à une source vidéo. La structure de données EDID comprend le nom du fabricant et le numéro de série, le type de produit, la taille de l'affichage physique et les horaires pris en charge par l'affichage, ainsi que certaines données moins utiles. Certains écrans peuvent avoir des blocs EDID défectueux, ce qui peut causer des problèmes si ces défauts ne sont pas gérés par le système d'affichage.
FKMS (vc4-fkms-v3d) : Faux paramètre de mode noyau. Alors que le firmware contrôle toujours le matériel de bas niveau (par example, les ports HDMI (High-Definition Multimedia Interface), l'interface série d'affichage (DSI), etc.), les bibliothèques Linux standard sont utilisées dans le noyau lui-même. FKMS est utilisé par défaut dans Buster, mais est désormais obsolète au profit de KMS dans Bullseye.
HDMI: L'interface multimédia haute définition est une interface audio/vidéo propriétaire pour la transmission de données vidéo non compressées et de données audio numériques compressées ou non.
DHP : Hotplug détecte. Un fil physique affirmé par un dispositif d'affichage connecté pour montrer qu'il est présent.
KMS : Réglage du mode noyau ; voir https://www.kernel.org/doc/html/latest/gpu/drm-kms.html pour plus de détails. Sur Raspberry Pi, vc4-kms-v3d est un pilote qui implémente KMS, et est souvent appelé « le pilote KMS ». Pile graphique héritée : une pile graphique entièrement implémentée dans le blob du micrologiciel VideoCore exposé par un pilote de tampon de trame Linux. La pile graphique héritée a été utilisée dans la majorité des appareils Raspberry Pi Ltd jusqu'à récemment ; il est maintenant progressivement remplacé par (F)KMS/DRM.

Le système HDMI et les pilotes graphiques

Les appareils Raspberry Pi utilisent la norme HDMI, qui est très courante sur les moniteurs et téléviseurs LCD modernes, pour la sortie vidéo. Raspberry Pi 3 (y compris Raspberry Pi 3B+) et les appareils antérieurs ont un seul port HDMI, qui est capable d'une sortie 1920 × 1200 à 60 Hz à l'aide d'un connecteur HDMI pleine taille. Le Raspberry Pi 4 possède deux ports micro HDMI et est capable d'une sortie 4K sur les deux ports. Selon la configuration, le port HDMI 0 sur Raspberry Pi 4 est capable de supporter jusqu'à 4kp60, mais lorsque vous utilisez deux périphériques de sortie 4K, vous êtes limité à p30 sur les deux appareils. La pile de logiciels graphiques, quelle que soit la version, est chargée d'interroger les périphériques HDMI connectés pour leurs propriétés et de configurer le système HDMI de manière appropriée. Les piles héritées et FKMS utilisent toutes deux le micrologiciel du processeur graphique VideoCore pour vérifier la présence et les propriétés HDMI. En revanche, KMS utilise une implémentation entièrement open source côté ARM. Cela signifie que les bases de code des deux systèmes sont entièrement différentes et, dans certaines circonstances, cela peut entraîner un comportement différent entre les deux approches. Les appareils HDMI et DVI s'identifient à l'appareil source à l'aide d'un élément de métadonnées appelé bloc EDID. Celui-ci est lu par le périphérique source depuis le périphérique d'affichage via une connexion I2C, et ceci est entièrement transparent pour l'utilisateur final car cela est fait par la pile graphique. Le bloc EDID contient beaucoup d'informations, mais il est principalement utilisé pour spécifier les résolutions prises en charge par l'écran, afin que Raspberry Pi puisse être configuré pour produire une résolution appropriée.

Comment HDMI est traité lors du démarrage

Lors de la première mise sous tension, Raspberry Pi passe par un certain nombre de stages, connu sous le nom de boot stagen:

  1. Le premier-stage, le chargeur de démarrage basé sur ROM démarre le GPU VideoCore.
  2. Deuxième-stage bootloader (c'est bootcode.bin sur la carte SD sur les appareils antérieurs à Raspberry Pi 4, et dans SPI EEPROM sur Raspberry Pi 4):
    1. Sur Raspberry Pi 4, les secondestagLe chargeur de démarrage démarrera le système HDMI, interrogera l'affichage pour les modes possibles, puis configurera l'affichage de manière appropriée. À ce stade, l'affichage est utilisé pour fournir des données de diagnostic de base.
    2. L'affichage de diagnostic du chargeur de démarrage (à partir du 07 décembre 2022) affichera l'état de tous les écrans connectés (si Hotplug Detect (HPD) est présent et si un bloc EDID a été récupéré à partir de l'écran).
  3. Le micrologiciel VideoCore (start.elf) est chargé et exécuté. Cela prendra le contrôle du système HDMI, lira le bloc EDID à partir de tous les écrans connectés et affichera l'écran arc-en-ciel sur ces écrans.
  4. Le noyau Linux démarre
    1. Lors du démarrage du noyau, KMS prendra le contrôle du système HDMI à partir du micrologiciel. Une fois de plus, le bloc EDID est lu à partir de tous les écrans connectés, et ces informations sont utilisées pour configurer la console et le bureau Linux.

Problèmes et symptômes possibles

Le symptôme d'échec le plus courant rencontré lors du passage à KMS est un bon démarrage initial, avec l'écran du chargeur de démarrage, puis l'écran arc-en-ciel qui apparaît, suivi après quelques secondes par l'affichage qui devient noir et ne se rallume pas. Le point auquel l'affichage devient noir est en fait le moment du processus de démarrage du noyau où le pilote KMS prend en charge l'exécution de l'affichage à partir du micrologiciel. Le Raspberry Pi fonctionne actuellement à tous égards, à l'exception de la sortie HDMI, donc si SSH est activé, vous devriez pouvoir vous connecter à l'appareil par cette route. Le voyant vert d'accès à la carte SD clignote généralement de temps en temps. Il est également possible que vous ne voyiez aucune sortie HDMI ; pas d'affichage du chargeur de démarrage et pas d'écran arc-en-ciel. Cela peut généralement être attribué à un défaut matériel.

Diagnostiquer la panne

Pas de sortie HDMI du tout
Il est possible que l'appareil n'ait pas démarré du tout, mais cela n'entre pas dans le cadre de ce livre blanc. En supposant que le comportement observé est un problème d'affichage, l'absence de sortie HDMI à n'importe quelle partie du processus de démarrage est généralement due à une défaillance matérielle. Il existe plusieurs options possibles :

  • Câble HDMI défectueux
  • Essayez un nouveau câble. Certains câbles, en particulier ceux très bon marché, peuvent ne pas contenir toutes les lignes de communication requises (par exemple hotplug) pour que Raspberry Pi détecte correctement l'affichage.
  • Port HDMI défectueux sur Raspberry Pi
  • Si vous utilisez un Raspberry Pi 4, essayez l'autre port HDMI.
  • Port HDMI défectueux sur le moniteur
  • Parfois, le port HDMI d'un moniteur ou d'un téléviseur peut s'user. Essayez un autre port si l'appareil en possède un.
  • Rarement, un périphérique d'affichage peut uniquement fournir des données EDID lorsqu'il est allumé ou lorsque le port correct est sélectionné. Pour vérifier, assurez-vous que l'appareil est allumé et que le bon port d'entrée est sélectionné.
  • Le périphérique d'affichage n'affirme pas la ligne de détection de hotplug

Sortie initiale, puis l'écran devient noir
Si l'affichage s'affiche puis s'éteint lors du démarrage du noyau Linux, il existe un certain nombre de causes possibles, et celles-ci sont généralement liées à un problème de lecture de l'EDID à partir du périphérique d'affichage. Comme on peut le voir dans la section ci-dessus traitant de la séquence de démarrage, l'EDID est lu à un certain nombre de points différents pendant le processus de démarrage, et chacune de ces lectures est effectuée par un logiciel différent. La lecture finale, lorsque KMS prend le relais, est effectuée par le code du noyau Linux en amont non modifié, et cela ne gère pas les formats EDID défectueux ainsi que le logiciel du micrologiciel antérieur. C'est pourquoi l'affichage peut cesser de fonctionner correctement une fois que KMS prend le relais. Il existe plusieurs façons de confirmer si KMS ne parvient pas à lire l'EDID, et deux d'entre elles sont les suivantes.
Vérifiez l'écran de diagnostic du chargeur de démarrage (Raspberry Pi 4 uniquement)

NOTE
Les diagnostics du chargeur de démarrage nécessitent un chargeur de démarrage récent. Vous pouvez mettre à niveau vers la dernière version en suivant ces instructions : https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Retirez la carte SD et redémarrez le Raspberry Pi. Appuyez sur ESC sur l'écran d'installation du système d'exploitation et l'écran de diagnostic devrait apparaître sur le périphérique d'affichage. Il doit y avoir une ligne sur l'écran qui commence par display : — par example:

  • afficher: DISP0 : HDMI HPD=1 EDID=ok #2 DISP1 : HPD=0 EDID=aucun #0

Cette sortie d'un Raspberry Pi 4 montre que le système a détecté un affichage HDMI sur le port HDMI 0, la détection de hotplug est affirmée et l'EDID a été lu correctement. Rien n'a été trouvé sur le port HDMI 1.

Vérifiez si le système KMS a détecté un EDID
Pour vérifier cela, vous devrez vous connecter à l'appareil Raspberry Pi via SSH à partir d'un autre ordinateur. SSH peut être activé lors de la création d'une image de carte SD avec Raspberry Pi Imager, à l'aide des options de paramètres avancés. Activer SSH sur une carte SD qui a déjà été imagée est un peu plus compliqué : vous devrez utiliser un autre ordinateur pour ajouter un file nommé ssh sur la partition de démarrage. Remplacez la carte SD dans le Raspberry Pi d'origine et allumez-le. Cela devrait activer SSH, avec une adresse IP allouée par DHCP. Une fois connecté, tapez ce qui suit à l'invite du terminal pour afficher le contenu de tout EDID détecté (vous devrez peut-être changer HDMI-A-1 en HDMI-A-2 en fonction du port HDMI du Raspberry Pi auquel le périphérique d'affichage est connecté à) : cat /sys/class/drm/card?-HDMI-A-1/edid S'il n'y a pas de dossier nommé card?-HDMI-A-1 ou similaire, il est probable qu'aucun EDID ne puisse être lu à partir de l'écran appareil.

NOTE
Dans le cas où l'EDID est lu avec succès, il existe un outil virtuel utile file dans le même dossier, appelé modes, qui, lorsqu'il est affiché, affiche tous les modes possibles que l'EDID prétend être pris en charge par l'appareil.

Mesures d'atténuation

Échec de détection de hotplug Si le micrologiciel et le KMS ne parviennent pas à trouver un moniteur connecté, il peut s'agir d'un échec de détection de hotplug - c'est-à-dire que le Raspberry Pi ne sait pas qu'un périphérique a été branché, il ne vérifie donc pas un EDID. Cela peut être dû à un mauvais câble ou à un périphérique d'affichage qui n'affirme pas correctement le branchement à chaud. Vous pouvez forcer une détection de hotplug en modifiant la ligne de commande du noyau file (cmdline.txt) qui est stocké dans la partition de démarrage d'une carte SD Raspberry Pi OS. Vous pouvez modifier ceci file sur un autre système, en utilisant l'éditeur de votre choix. Ajoutez ce qui suit à la fin du cmdline.txt file: video=HDMI-A-1:1280×720@60D Si vous utilisez le deuxième port HDMI, remplacez HDMI-A-1 par HDMI-A-2. Vous pouvez également spécifier une résolution et une fréquence d'images différentes, mais assurez-vous de choisir celles que le périphérique d'affichage prend en charge.

NOTE
La documentation sur les paramètres de ligne de commande du noyau pour la vidéo peut être trouvée ici : https://www.kernel.org/doc/Documentation/fb/modedb.txt

AVERTISSEMENT
Les piles graphiques plus anciennes prenaient en charge l'utilisation d'une entrée config.txt pour définir la détection de hotplug, mais au moment de la rédaction, cela ne fonctionne pas avec KMS. Il peut être pris en charge dans les futures versions du micrologiciel. L'entrée config.txt est hdmi_force_hotplug, et vous pouvez spécifier le port HDMI spécifique auquel le hotplug s'applique en utilisant hdmi_force_hotplug:0=1 ou hdmi_force_hotplug:1=1. Notez que la nomenclature pour KMS fait référence aux ports HDMI comme 1 et 2, tandis que Raspberry Pi utilise 0 et 1.

Problèmes EDID
Une minorité d'appareils d'affichage sont incapables de renvoyer un EDID s'ils sont éteints ou lorsque la mauvaise entrée AV est sélectionnée. Cela peut être un problème lorsque le Raspberry Pi et les périphériques d'affichage sont sur la même barrette d'alimentation et que le périphérique Raspberry Pi démarre plus rapidement que l'écran. Avec des appareils comme celui-ci, vous devrez peut-être fournir un EDID manuellement. Encore plus inhabituel, certains dispositifs d'affichage ont des blocs EDID qui sont mal formatés et ne peuvent pas être analysés par le système KMS EDID. Dans ces circonstances, il peut être possible de lire un EDID à partir d'un appareil avec une résolution similaire et de l'utiliser. Dans les deux cas, les instructions suivantes expliquent comment lire un EDID à partir d'un périphérique d'affichage et configurer KMS pour l'utiliser, au lieu que KMS essaie d'interroger directement le périphérique.

Copier un EDID vers un file
Créer un file contenir des métadonnées EDID à partir de zéro n'est généralement pas possible, et en utiliser une existante est beaucoup plus facile. Il est généralement possible d'obtenir un EDID à partir d'un dispositif d'affichage et de le stocker sur la carte SD du Raspberry Pi afin qu'il puisse être utilisé par KMS au lieu d'obtenir un EDID à partir du dispositif d'affichage. L'option la plus simple ici est de s'assurer que le périphérique d'affichage est opérationnel et sur la bonne entrée AV, et que le Raspberry Pi a correctement démarré le système HDMI. Depuis le terminal, vous pouvez maintenant copier l'EDID dans un file avec la commande suivante : sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Si pour une raison quelconque l'EDID n'est pas présent, vous pouvez démarrer l'appareil dans un non -Le mode KMS qui réussit à démarrer sur le bureau ou la console, puis copiez l'EDID que le micrologiciel lira (espérons-le) avec succès sur un file.

  1. Démarrez en mode graphique hérité.
    1. Modifiez config.txt dans la partition de démarrage, en vous assurant d'exécuter votre éditeur à l'aide de sudo, et modifiez la ligne indiquant dtoverlay=vc4-kms-v3d en #dtoverlay=vc4-kms-v3d.
    2. Redémarrer.
  2. Le bureau ou la console de connexion devrait maintenant apparaître.
    1. À l'aide du terminal, copiez l'EDID du périphérique d'affichage connecté vers un file avec la commande suivante :
  • tvservice -d monedid.dat sudo mv monedid.dat /lib/firmware/

En utilisant un file-basé sur l'EDID au lieu d'interroger le périphérique d'affichage Modifiez /boot/cmdline.txt, en veillant à exécuter votre éditeur à l'aide de sudo, et ajoutez ce qui suit à la ligne de commande du noyau : drm.edid_firmware=myedid.dat Vous pouvez appliquer l'EDID à un port HDMI spécifique comme suit : drm.edid_firmware=HDMI-A-1:myedid.dat Si nécessaire, redémarrez en mode KMS en procédant comme suit :

  1. Modifiez config.txt dans la partition de démarrage, en vous assurant d'exécuter votre éditeur à l'aide de sudo, et modifiez la ligne indiquant #dtoverlay=vc4-kms-v3d en dtoverlay=vc4-kms-v3d.
  2. Redémarrer.

NOTE
Si vous utilisez un file-basé sur EDID, mais que vous rencontrez toujours des problèmes avec hotplug, vous pouvez forcer la détection de hotplug en ajoutant ce qui suit à la ligne de commande du noyau : video=HDMI-A-1:D.

Documents / Ressources

Pilote graphique de sortie RaspberryPi KMS HDMI [pdf] Manuel de l'utilisateur
KMS, pilote graphique de sortie HDMI, sortie HDMI KMS, pilote graphique, pilote graphique de sortie KMS HDMI, pilote

Références

Laisser un commentaire

Votre adresse email ne sera pas publiée. Les champs obligatoires sont marqués *