LOGO RaspberryPi

Sterownik graficzny wyjścia HDMI RaspberryPi KMS

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

Kolofon

2020-2023 Raspberry Pi Ltd (dawniej Raspberry Pi (Trading) Ltd.) Niniejsza dokumentacja objęta jest licencją Creative Commons Uznanie autorstwa-Bez utworów zależnych 4.0 International (CC BY-ND 4.0). data kompilacji: 2023 wersja kompilacji: githash: c02fe10c-clean

Zastrzeżenie prawne

DANE TECHNICZNE I NIEZAWODNOŚĆ PRODUKTÓW RASPBERRY PI (W TYM KARTY DANYCH) ZMIENIANE od czasu do czasu („ZASOBY”) SĄ DOSTARCZANE PRZEZ FIRMĘ RASPBERRY PI LTD („RPL”) „W STANIE, W JAKIM SIĘ ZNAJDUJĄ” ORAZ WSZELKICH WYRAŹNYCH LUB DOROZUMIANYCH GWARANCJI, W TYM M.in. DOROZUMIANE GWARANCJE WARTOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU SĄ WYŁĄCZONE. W MAKSYMALNYM ZAKRESIE DOZWOLONYM PRZEZ OBOWIĄZUJĄCE PRAWO RPL W ŻADNYM WYPADKU NIE BĘDZIE ODPOWIEDZIALNA ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SPECJALNE, PRZYKŁADOWE LUB WYNIKOWE SZKODY (W TYM M.in. ZAKUPIENIE TOWARÓW LUB USŁUG ZAMIENNYCH; UTRATA WYKORZYSTANIA, DANYCH LUB ZYSKI; LUB PRZERWA W DZIAŁALNOŚCI) JAKICHKOLWIEK PRZYCZYNY I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI, CZY TO UMOWNEJ, ŚCIŚŁEJ ODPOWIEDZIALNOŚCI LUB DELIKTUJNEJ (W TYM ZANIEDBANIA LUB INNYCH), WYNIKAJĄCEJ W JAKIKOLWIEK Z WYKORZYSTANIA ZASOBÓW, NAWET JEŚLI POWIADOMIONA O MOŻLIWOŚCI TAKICH SZKOD. RPL zastrzega sobie prawo do wprowadzania udoskonaleń, ulepszeń, poprawek lub innych modyfikacji ZASOBÓW lub jakichkolwiek produktów w nich opisanych w dowolnym momencie i bez dodatkowego powiadomienia. ZASOBY są przeznaczone dla wykwalifikowanych użytkowników o odpowiednim poziomie wiedzy projektowej. Użytkownicy ponoszą wyłączną odpowiedzialność za wybór i wykorzystanie ZASOBÓW oraz wszelkie zastosowania opisanych w nich produktów. Użytkownik zgadza się zwolnić RPL z odpowiedzialności i chronić ją przed wszelkimi zobowiązaniami, kosztami, szkodami lub innymi stratami wynikającymi z korzystania z ZASOBÓW. RPL udziela użytkownikom pozwolenia na korzystanie z ZASOBÓW wyłącznie w połączeniu z produktami Raspberry Pi. Wszelkie inne wykorzystanie ZASOBÓW jest zabronione. Nie udziela się licencji na żadne inne prawa własności intelektualnej RPL ani inne prawa własności intelektualnej osób trzecich. DZIAŁANIA WYSOKIEGO RYZYKA. Produkty Raspberry Pi nie są projektowane, produkowane ani przeznaczone do użytku w niebezpiecznych środowiskach wymagających niezawodnego działania, takich jak eksploatacja obiektów nuklearnych, systemy nawigacji lub komunikacji statków powietrznych, kontrola ruchu lotniczego, systemy uzbrojenia lub zastosowania o krytycznym znaczeniu dla bezpieczeństwa (w tym systemy podtrzymywania życia) systemów i innych wyrobów medycznych), w których awaria produktów może prowadzić bezpośrednio do śmierci, obrażeń ciała lub poważnych szkód fizycznych lub środowiskowych („Działalność wysokiego ryzyka”). RPL w szczególności zrzeka się wszelkich wyraźnych lub dorozumianych gwarancji przydatności do działań wysokiego ryzyka i nie przyjmuje żadnej odpowiedzialności za użycie lub włączenie produktów Raspberry Pi do działań wysokiego ryzyka. Produkty Raspberry Pi są dostarczane zgodnie ze Standardowymi Warunkami RPL. Udostępnienie ZASOBÓW przez RPL nie rozszerza ani w żaden inny sposób nie modyfikuje Warunków Standardowych RPL, w tym między innymi wyrażonych w nich zastrzeżeń i gwarancji.

Historia wersji dokumentu

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

Zakres dokumentu

Niniejszy dokument dotyczy następujących produktów Raspberry Pi

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

Wstęp

Wraz z wprowadzeniem sterownika graficznego KMS (Kernel Mode Setting), Raspberry Pi Ltd odchodzi od starszego oprogramowania układowego sterującego systemem wyjścia wideo na rzecz systemu graficznego o bardziej otwartym kodzie źródłowym. Wiąże się to jednak z własnym zestawem wyzwań. Celem tego dokumentu jest pomoc w rozwiązywaniu wszelkich problemów, które mogą pojawić się podczas przejścia na nowy system. W tym dokumencie założono, że Raspberry Pi działa pod kontrolą systemu operacyjnego Raspberry Pi i jest w pełni aktualne z najnowszym oprogramowaniem sprzętowym i jądrami.

Terminologia

DRM: Direct Rendering Manager, podsystem jądra Linuksa używany do komunikacji z jednostkami przetwarzania grafiki (GPU). Używany we współpracy z FKMS i KMS.
DVI: Poprzednik HDMI, ale bez możliwości audio. Dostępne są kable i adaptery HDMI–DVI umożliwiające podłączenie urządzenia Raspberry Pi do wyświetlacza wyposażonego w złącze DVI.
EDYCJA: Rozszerzone dane identyfikacyjne wyświetlacza. Format metadanych urządzeń wyświetlających opisujących ich możliwości w źródle wideo. Struktura danych EDID obejmuje nazwę producenta i numer seryjny, typ produktu, fizyczny rozmiar wyświetlacza i taktowanie obsługiwane przez wyświetlacz, a także kilka mniej przydatnych danych. Niektóre wyświetlacze mogą mieć wadliwe bloki EDID, co może powodować problemy, jeśli te defekty nie zostaną obsłużone przez system wyświetlania.
FKMS (vc4-fkms-v3d): Fałszywe ustawienie trybu jądra. Chociaż oprogramowanie sprzętowe nadal kontroluje sprzęt niskiego poziomu (npample, porty High-Definition Multimedia Interface (HDMI), Display Serial Interface (DSI) itp.), w samym jądrze używane są standardowe biblioteki systemu Linux. FKMS jest domyślnie używany w Buster, ale obecnie jest przestarzały na rzecz KMS w Bullseye.
HDMI: High-Definition Multimedia Interface to zastrzeżony interfejs audio/wideo służący do przesyłania nieskompresowanych danych wideo oraz skompresowanych lub nieskompresowanych cyfrowych danych audio.
HPD: Wykrywanie hotplug. Fizyczny przewód, który jest potwierdzany przez podłączone urządzenie wyświetlające w celu pokazania jego obecności.
KM: Ustawienie trybu jądra; Widzieć https://www.kernel.org/doc/html/latest/gpu/drm-kms.html po więcej szczegółów. Na Raspberry Pi vc4-kms-v3d to sterownik implementujący KMS i często nazywany jest „sterownikiem KMS”. Starszy stos graficzny: stos graficzny w całości zaimplementowany w blobie oprogramowania układowego VideoCore udostępniany przez sterownik bufora ramki dla systemu Linux. Starszy stos graficzny był do niedawna używany w większości urządzeń Raspberry Pi Ltd; obecnie jest on stopniowo zastępowany przez (F)KMS/DRM.

System HDMI i sterowniki graficzne

Urządzenia Raspberry Pi wykorzystują do wyjścia wideo standard HDMI, który jest bardzo powszechny w nowoczesnych monitorach LCD i telewizorach. Raspberry Pi 3 (w tym Raspberry Pi 3B+) i wcześniejsze urządzenia mają pojedynczy port HDMI, który umożliwia przesyłanie sygnału wyjściowego o rozdzielczości 1920 × 1200 przy 60 Hz przy użyciu pełnowymiarowego złącza HDMI. Raspberry Pi 4 ma dwa porty micro HDMI i obsługuje sygnał wyjściowy 4K na obu portach. W zależności od konfiguracji port HDMI 0 w Raspberry Pi 4 obsługuje maksymalnie 4kp60, ale w przypadku korzystania z dwóch urządzeń wyjściowych 4K ogranicza się do p30 na obu urządzeniach. Stos oprogramowania graficznego, niezależnie od wersji, odpowiada za sprawdzanie właściwości podłączonych urządzeń HDMI i odpowiednie konfigurowanie systemu HDMI. Zarówno starsze, jak i stosy FKMS wykorzystują oprogramowanie sprzętowe procesora graficznego VideoCore do sprawdzania obecności i właściwości HDMI. Natomiast KMS wykorzystuje całkowicie otwartą implementację po stronie ARM. Oznacza to, że podstawy kodu obu systemów są całkowicie różne, co w pewnych okolicznościach może skutkować odmiennym zachowaniem obu podejść. Urządzenia HDMI i DVI identyfikują się z urządzeniem źródłowym za pomocą metadanych zwanych blokiem EDID. Jest to odczytywane przez urządzenie źródłowe z urządzenia wyświetlającego za pośrednictwem połączenia I2C i jest to całkowicie przejrzyste dla użytkownika końcowego, ponieważ odbywa się to za pomocą stosu graficznego. Blok EDID zawiera wiele informacji, ale służy przede wszystkim do określenia rozdzielczości obsługiwanych przez wyświetlacz, dzięki czemu Raspberry Pi można skonfigurować tak, aby wyświetlał odpowiednią rozdzielczość.

Sposób obsługi HDMI podczas uruchamiania

Po pierwszym włączeniu Raspberry Pi przechodzi przez szereg stages, znany jako boot stages:

  1. Pierwsze-stage, bootloader oparty na ROMie uruchamia procesor graficzny VideoCore.
  2. Sekundytage bootloader (jest to bootcode.bin na karcie SD w urządzeniach wcześniejszych niż Raspberry Pi 4 oraz w SPI EEPROM na Raspberry Pi 4):
    1. Na Raspberry Pi 4, drugi-stagProgram ładujący uruchomi system HDMI, zapyta wyświetlacz o możliwe tryby, a następnie odpowiednio skonfiguruje wyświetlacz. W tym momencie wyświetlacz służy do podawania podstawowych danych diagnostycznych.
    2. Wyświetlacz diagnostyczny modułu ładującego (od 07 grudnia 2022 r.) wyświetli stan wszystkich podłączonych wyświetlaczy (czy występuje funkcja Hotplug Detect (HPD) i czy z wyświetlacza odzyskano blok EDID).
  3. Oprogramowanie sprzętowe VideoCore (start.elf) zostanie załadowane i uruchomione. Spowoduje to przejęcie kontroli nad systemem HDMI, odczytanie bloku EDID z dowolnych podłączonych wyświetlaczy i wyświetlenie tęczowego ekranu na tych wyświetlaczach.
  4. Uruchamia się jądro Linuksa
    1. Podczas uruchamiania jądra KMS przejmie kontrolę nad systemem HDMI z poziomu oprogramowania sprzętowego. Po raz kolejny blok EDID jest odczytywany z wszelkich podłączonych wyświetlaczy, a informacje te są wykorzystywane do konfiguracji konsoli Linux i pulpitu.

Możliwe problemy i objawy

Najczęstszym objawem awarii występującym podczas przejścia na KMS jest początkowo dobry rozruch, z ekranem programu ładującego, a następnie wyświetleniem tęczowego ekranu, po czym po kilku sekundach wyświetlacz staje się czarny i nie włącza się ponownie. Moment, w którym wyświetlacz staje się czarny, jest w rzeczywistości momentem podczas procesu uruchamiania jądra, w którym sterownik KMS przejmuje obsługę wyświetlacza z poziomu oprogramowania sprzętowego. Raspberry Pi działa obecnie pod każdym względem z wyjątkiem wyjścia HDMI, więc jeśli włączone jest SSH, logowanie się do urządzenia tą trasą powinno być możliwe. Zielona dioda dostępu do karty SD zazwyczaj miga od czasu do czasu. Możliwe jest również, że w ogóle nie będzie widać wyjścia HDMI; brak wyświetlania programu ładującego i brak ekranu tęczowego. Zwykle można to przypisać usterce sprzętowej.

Diagnozowanie usterki

W ogóle nie ma wyjścia HDMI
Możliwe, że urządzenie w ogóle się nie uruchomiło, ale wykracza to poza zakres niniejszego opracowania. Zakładając, że zaobserwowane zachowanie jest problemem z wyświetlaniem, brak wyjścia HDMI podczas jakiejkolwiek części procesu uruchamiania jest zwykle spowodowany awarią sprzętu. Istnieje wiele możliwych opcji:

  • Uszkodzony kabel HDMI
  • Wypróbuj nowy kabel. Niektóre kable, zwłaszcza bardzo tanie, mogą nie zawierać wszystkich wymaganych linii komunikacyjnych (np. hotplug), aby Raspberry Pi mogło skutecznie wykryć wyświetlacz.
  • Wadliwy port HDMI w Raspberry Pi
  • Jeśli używasz Raspberry Pi 4, wypróbuj inny port HDMI.
  • Uszkodzony port HDMI w monitorze
  • Czasami port HDMI w monitorze lub telewizorze może się zużyć. Wypróbuj inny port, jeśli urządzenie go posiada.
  • Rzadko urządzenie wyświetlające może udostępniać dane EDID tylko wtedy, gdy jest włączone lub gdy wybrany jest właściwy port. Aby to sprawdzić, upewnij się, że urządzenie jest włączone i wybrany jest właściwy port wejściowy.
  • Urządzenie wyświetlające nie potwierdza linii wykrywania hotplug

Początkowe wyjście, następnie ekran staje się czarny
Jeśli wyświetlacz pojawia się, ale następnie gaśnie podczas uruchamiania jądra Linuksa, istnieje wiele możliwych przyczyn i są one zwykle związane z problemem z odczytaniem identyfikatora EDID z urządzenia wyświetlającego. Jak widać z powyższej sekcji dotyczącej sekwencji rozruchu, identyfikator EDID jest odczytywany w wielu różnych momentach procesu rozruchu, a każdy z tych odczytów jest wykonywany przez inny fragment oprogramowania. Ostateczny odczyt, gdy KMS przejmuje kontrolę, jest wykonywany przez niezmieniony kod jądra Linuksa, który pochodzi z poprzedniego źródła i nie obsługuje wadliwych formatów EDID ani wcześniejszego oprogramowania sprzętowego. Z tego powodu wyświetlacz może przestać działać poprawnie po przejęciu kontroli przez KMS. Istnieje wiele sposobów sprawdzenia, czy KMS nie odczytuje EDID, a dwa z nich są następujące.
Sprawdź ekran diagnostyczny bootloadera (tylko Raspberry Pi 4)

NOTATKA
Diagnostyka programu ładującego wymaga najnowszego programu ładującego. Możesz dokonać aktualizacji do najnowszej wersji, korzystając z poniższych instrukcji: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Wyjmij kartę SD i uruchom ponownie Raspberry Pi. Naciśnij klawisz ESC na ekranie instalacji systemu operacyjnego, a na urządzeniu wyświetlającym powinien pojawić się ekran diagnostyczny. Na wyświetlaczu powinna pojawić się linia rozpoczynająca się od display: — npampna:

  • wyświetlacz: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=brak #0

To wyjście z Raspberry Pi 4 pokazuje, że system wykrył wyświetlacz HDMI na porcie HDMI 0, potwierdzono wykrycie hotplug i odczyt EDID był prawidłowy. Nic nie znaleziono na porcie HDMI 1.

Sprawdź, czy system KMS wykrył EDID
Aby to sprawdzić, musisz zalogować się do urządzenia Raspberry Pi przez SSH z innego komputera. SSH można włączyć podczas tworzenia obrazu karty SD za pomocą Raspberry Pi Imager, korzystając z opcji Ustawień zaawansowanych. Włączenie SSH na karcie SD, która została już zobrazowana, jest nieco bardziej skomplikowane: będziesz musiał użyć innego komputera, aby dodać file o nazwie ssh na partycję rozruchową. Wymień kartę SD w oryginalnym Raspberry Pi i włącz go. Powinno to włączyć SSH z adresem IP przydzielonym przez DHCP. Po zalogowaniu wpisz następujące polecenie w wierszu terminala, aby wyświetlić zawartość wykrytego EDID (może być konieczna zmiana HDMI-A-1 na HDMI-A-2 w zależności od tego, do którego portu HDMI w Raspberry Pi podłączone jest urządzenie wyświetlające do): cat /sys/class/drm/card?-HDMI-A-1/edid Jeśli nie ma folderów o nazwie card?-HDMI-A-1 lub podobnej, prawdopodobnie nie można odczytać żadnego EDID z wyświetlacza urządzenie.

NOTATKA
W przypadku pomyślnego odczytania EDID, przydatny jest wirtualny file w tym samym folderze, zwanym trybami, który po wyświetleniu pokazuje wszystkie możliwe tryby, które według EDID obsługuje urządzenie.

Ograniczenia

Błąd wykrywania hotplug Jeśli zarówno oprogramowanie sprzętowe, jak i KMS nie znajdą podłączonego monitora, może to oznaczać awarię wykrywania hotplug — tzn. Raspberry Pi nie wie, że urządzenie zostało podłączone, więc nie sprawdza EDID. Może to być spowodowane uszkodzonym kablem lub urządzeniem wyświetlającym, które nie obsługuje prawidłowo funkcji hotplug. Możesz wymusić wykrycie hotplugu, zmieniając wiersz poleceń jądra file (cmdline.txt), który jest przechowywany na partycji rozruchowej karty SD Raspberry Pi OS. Możesz to edytować file w innym systemie, używając dowolnego edytora, który wolisz. Dodaj następujący tekst na końcu pliku cmdline.txt file: wideo=HDMI-A-1:1280×720@60D Jeśli używasz drugiego portu HDMI, zamień HDMI-A-1 na HDMI-A-2. Możesz także określić inną rozdzielczość i liczbę klatek na sekundę, ale upewnij się, że wybierasz te, które obsługuje urządzenie wyświetlające.

NOTATKA
Dokumentację dotyczącą ustawień wiersza poleceń jądra dla wideo można znaleźć tutaj: https://www.kernel.org/doc/Documentation/fb/modedb.txt

OSTRZEŻENIE
Starsze stosy graficzne obsługiwały użycie wpisu config.txt do ustawiania wykrywania hotplug, ale w chwili pisania tego tekstu nie działa to z KMS. Może być obsługiwana w przyszłych wersjach oprogramowania sprzętowego. Wpis w pliku config.txt to hdmi_force_hotplug i możesz określić konkretny port HDMI, do którego odnosi się wtyczka typu hotplug, używając hdmi_force_hotplug:0=1 lub hdmi_force_hotplug:1=1. Należy pamiętać, że nazewnictwo KMS odnosi się do portów HDMI jako 1 i 2, podczas gdy Raspberry Pi używa 0 i 1.

Problemy z EDID-em
Mniejszość urządzeń wyświetlających nie jest w stanie zwrócić kodu EDID, jeśli zostaną wyłączone lub wybrane zostanie niewłaściwe wejście AV. Może to stanowić problem, gdy Raspberry Pi i urządzenia wyświetlające znajdują się na tej samej listwie zasilającej, a urządzenie Raspberry Pi uruchamia się szybciej niż wyświetlacz. W przypadku takich urządzeń może być konieczne ręczne podanie identyfikatora EDID. Co jeszcze bardziej niezwykłe, niektóre urządzenia wyświetlające mają bloki EDID, które są źle sformatowane i nie mogą być analizowane przez system KMS EDID. W takich okolicznościach może być możliwe odczytanie identyfikatora EDID z urządzenia o podobnej rozdzielczości i użycie go. W obu przypadkach poniższe instrukcje opisują, jak odczytać identyfikator EDID z urządzenia wyświetlającego i skonfigurować KMS do jego używania, zamiast próbować KMS bezpośrednio odpytywać urządzenie.

Kopiowanie EDID do pliku file
Tworzenie file utworzenie od zera metadanych EDID zwykle nie jest wykonalne, a użycie istniejącego jest znacznie łatwiejsze. Zasadniczo możliwe jest uzyskanie identyfikatora EDID z urządzenia wyświetlającego i zapisanie go na karcie SD Raspberry Pi, aby mógł być używany przez KMS zamiast pobierać identyfikator EDID z urządzenia wyświetlającego. Najłatwiejszą opcją jest upewnienie się, że urządzenie wyświetlające jest uruchomione i podłączone do prawidłowego wejścia AV oraz że Raspberry Pi poprawnie uruchomiło system HDMI. Z terminala możesz teraz skopiować EDID do pliku file za pomocą następującego polecenia: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Jeśli z jakiegoś powodu nie ma EDID, możesz uruchomić urządzenie w innym -KMS, który pomyślnie uruchamia się na pulpicie lub konsoli, następnie skopiuj EDID, który oprogramowanie sprzętowe (miejmy nadzieję) pomyślnie odczyta do komputera file.

  1. Uruchom starszy tryb graficzny.
    1. Edytuj plik config.txt na partycji rozruchowej, pamiętając o uruchomieniu edytora za pomocą sudo, i zmień wiersz dtoverlay=vc4-kms-v3d na #dtoverlay=vc4-kms-v3d.
    2. Ponowne uruchomienie.
  2. Powinien teraz pojawić się pulpit lub konsola logowania.
    1. Korzystając z terminala, skopiuj identyfikator EDID z podłączonego urządzenia wyświetlającego do pliku a file za pomocą następującego polecenia:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Używanie file-based EDID zamiast odpytywać urządzenie wyświetlające Edytuj plik /boot/cmdline.txt, uruchamiając edytor za pomocą sudo i dodaj następujące polecenie do wiersza poleceń jądra: drm.edid_firmware=myedid.dat Możesz zastosować EDID do określonego portu HDMI w następujący sposób: drm.edid_firmware=HDMI-A-1:myedid.dat W razie potrzeby uruchom ponownie komputer w trybie KMS, wykonując następujące czynności:

  1. Edytuj plik config.txt na partycji rozruchowej, pamiętając o uruchomieniu edytora za pomocą sudo i zmień wiersz #dtoverlay=vc4-kms-v3d na dtoverlay=vc4-kms-v3d.
  2. Ponowne uruchomienie.

NOTATKA
Jeśli używasz file-based EDID, ale nadal masz problemy z hotplugiem, możesz wymusić wykrywanie hotplugu, dodając następujące polecenie do wiersza poleceń jądra: video=HDMI-A-1:D.

Dokumenty / Zasoby

Sterownik graficzny wyjścia HDMI RaspberryPi KMS [plik PDF] Instrukcja obsługi
KMS, sterownik karty graficznej z wyjściem HDMI, wyjście KMS HDMI, sterownik karty graficznej, sterownik karty graficznej z wyjściem KMS HDMI, sterownik

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *