Ovladač grafického výstupu RaspberryPi KMS HDMI
Tiráž
2020-2023 Raspberry Pi Ltd (dříve Raspberry Pi (Trading) Ltd.) Tato dokumentace je licencována pod licencí Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). datum sestavení: 2023-02-10 verze sestavení: githash: c65fe9c-clean
Právní upozornění
TECHNICKÁ A SPOLEHLIVOSTNÍ ÚDAJE PRO PRODUKTY RASPBERRY PI (VČETNĚ DATOVÝCH LISTŮ), JAK JSOU ČAS OD ČASU MODIFIKOVANÉ („ZDROJE“), POSKYTUJE RASPBERRY PI LTD („RPL“) „TAK JAK JSOU“ A JAKÉKOLI VÝSLOVNÉ NEBO OMEZENÉ, BEZ ZÁRUK ODPOVÍDAJÍCÍ ZÁRUKY PRODEJNOSTI A VHODNOSTI PRO KONKRÉTNÍ ÚČEL. V MAXIMÁLNÍM ROZSAHU POVOLENÉM PŘÍSLUŠNÝM ZÁKONEM V ŽÁDNÉM PŘÍPADĚ NEBUDE RPL ODPOVĚDNÁ ZA JAKÉKOLI PŘÍMÉ, NEPŘÍMÉ, NÁHODNÉ, ZVLÁŠTNÍ, EXEMPLÁRNÍ NEBO NÁSLEDNÉ ŠKODY (VČETNĚ, ALE NEOMEZENO NA POSKYTNUTÍ POSKYTOVÁNÍ NÁHRADNÍCH DATA; , NEBO ZISKY NEBO PŘERUŠENÍ OBCHODNÍ ČINNOSTI), JAK JSOU ZPŮSOBENÉ A NA JAKÉKOLI TEorii ODPOVĚDNOSTI, AŤ VE SMLOUVĚ, PŘÍMÉ ODPOVĚDNOSTI NEBO deliktu (VČETNĚ NEDBALOSTI ČI JINAK), VZNIKLÉM JAKÝKOLI ZPŮSOB JAK JAK NAVYŠLI TOHOTO POUŽITÍ. TAKOVÉ ŠKODY. Společnost RPL si vyhrazuje právo kdykoli a bez dalšího upozornění provádět jakákoli vylepšení, vylepšení, opravy nebo jakékoli jiné úpravy ZDROJŮ nebo jakýchkoli produktů v nich popsaných. ZDROJE jsou určeny pro zkušené uživatele s odpovídající úrovní znalostí návrhu. Uživatelé jsou výhradně zodpovědní za svůj výběr a použití ZDROJŮ a jakékoli použití produktů v nich popsaných. Uživatel souhlasí s tím, že odškodní a ochrání RPL vůči veškerým závazkům, nákladům, škodám nebo jiným ztrátám vyplývajícím z jeho používání ZDROJŮ. RPL uděluje uživatelům povolení používat ZDROJE výhradně ve spojení s produkty Raspberry Pi. Jakékoli jiné použití ZDROJŮ je zakázáno. Žádná licence není udělena žádnému jinému RPL nebo jinému právu duševního vlastnictví třetí strany. VYSOKÉ RIZIKOVÉ AKTIVITY. Produkty Raspberry Pi nejsou navrženy, vyrobeny ani zamýšleny pro použití v nebezpečných prostředích vyžadujících bezpečnost při selhání, jako je provoz jaderných zařízení, letecké navigační nebo komunikační systémy, řízení letového provozu, zbraňové systémy nebo aplikace kritické z hlediska bezpečnosti (včetně podpory života systémů a jiných zdravotnických prostředků), ve kterých by selhání produktů mohlo vést přímo k smrti, zranění osob nebo vážnému fyzickému poškození nebo poškození životního prostředí („Vysoce rizikové činnosti“). RPL výslovně odmítá jakoukoli výslovnou nebo předpokládanou záruku vhodnosti pro vysoce rizikové činnosti a nepřijímá žádnou odpovědnost za použití nebo zahrnutí produktů Raspberry Pi do vysoce rizikových činností. Produkty Raspberry Pi jsou poskytovány v souladu se standardními podmínkami RPL. Poskytování ZDROJŮ společností RPL nerozšiřuje ani jinak neupravuje Standardní podmínky společnosti RPL, včetně, nikoli však výhradně, vyloučení odpovědnosti a záruk v nich vyjádřených.
Historie verzí dokumentu
Rozsah dokumentu
Tento dokument se vztahuje na následující produkty Raspberry Pi
Zavedení
Se zavedením grafického ovladače KMS (Kernel Mode Setting) se společnost Raspberry Pi Ltd posouvá od ovládání systému výstupu videa pomocí staršího firmwaru a směřuje ke grafickému systému s více otevřeným zdrojovým kódem. To však přineslo své vlastní problémy. Tento dokument má pomoci s jakýmikoli problémy, které mohou nastat při přechodu na nový systém. Tento dokument předpokládá, že Raspberry Pi používá operační systém Raspberry Pi a je plně aktuální s nejnovějším firmwarem a jádry.
Terminologie
DRM: Direct Rendering Manager, subsystém linuxového jádra používaný ke komunikaci s grafickými procesory (GPU). Používá se ve spolupráci s FKMS a KMS.
DVI: Předchůdce HDMI, ale bez zvukových možností. Pro připojení zařízení Raspberry Pi k displeji vybavenému DVI jsou k dispozici kabely a adaptéry HDMI na DVI.
EDID: Rozšířené identifikační údaje displeje. Formát metadat pro zobrazovací zařízení k popisu jejich schopností zdroji videa. Struktura dat EDID zahrnuje jméno výrobce a sériové číslo, typ produktu, velikost fyzického displeje a časování podporované displejem spolu s některými méně užitečnými údaji. Některé displeje mohou mít vadné bloky EDID, což může způsobit problémy, pokud tyto vady nezpracuje zobrazovací systém.
FKMS (vc4-fkms-v3d): Nastavení režimu falešného jádra. Zatímco firmware stále ovládá hardware nízké úrovně (napřampV samotném jádře jsou použity porty High-Definition Multimedia Interface (HDMI), Display Serial Interface (DSI), atd., standardní linuxové knihovny. FKMS se ve výchozím nastavení používá v Buster, ale nyní je zastaralý ve prospěch KMS v Bullseye.
HDMI: High-Definition Multimedia Interface je proprietární audio/video rozhraní pro přenos nekomprimovaných video dat a komprimovaných nebo nekomprimovaných digitálních audio dat.
HPD: Detekce Hotplug. Fyzický vodič, který je připojeným zobrazovacím zařízením potvrzen, že je přítomen.
KMS: Nastavení režimu jádra; vidět https://www.kernel.org/doc/html/latest/gpu/drm-kms.html Více podrobností. Na Raspberry Pi je vc4-kms-v3d ovladač, který implementuje KMS a je často označován jako „ovladač KMS“. Starší grafický zásobník: Grafický zásobník plně implementovaný v blobu firmwaru VideoCore vystavený ovladačem framebufferu pro Linux. Starší grafický zásobník byl až donedávna používán ve většině zařízení Raspberry Pi Ltd; nyní je postupně nahrazován (F)KMS/DRM.
Systém HDMI a grafické ovladače
Zařízení Raspberry Pi používají pro výstup videa standard HDMI, který je velmi běžný na moderních LCD monitorech a televizích. Raspberry Pi 3 (včetně Raspberry Pi 3B+) a starší zařízení mají jeden port HDMI, který je schopen výstupu 1920 × 1200 při 60 Hz pomocí konektoru HDMI v plné velikosti. Raspberry Pi 4 má dva porty micro HDMI a je schopen výstupu 4K na obou portech. V závislosti na nastavení je port HDMI 0 na Raspberry Pi 4 schopen až 4kp60, ale při použití dvou výstupních zařízení 4K jste omezeni na p30 na obou zařízeních. Zásobník grafického softwaru, bez ohledu na verzi, je zodpovědný za zjišťování vlastností připojených zařízení HDMI a za správné nastavení systému HDMI. Starší a FKMS zásobníky používají firmware v grafickém procesoru VideoCore ke kontrole přítomnosti a vlastností HDMI. Naproti tomu KMS používá zcela open source implementaci na straně ARM. To znamená, že základy kódu pro oba systémy jsou zcela odlišné a za určitých okolností to může vést k odlišnému chování mezi těmito dvěma přístupy. Zařízení HDMI a DVI se identifikují zdrojovému zařízení pomocí metadat nazývaných blok EDID. Toto je čteno zdrojovým zařízením ze zobrazovacího zařízení prostřednictvím připojení I2C, což je pro koncového uživatele zcela transparentní, protože to provádí grafický zásobník. Blok EDID obsahuje velké množství informací, ale primárně se používá k určení rozlišení, která displej podporuje, takže Raspberry Pi lze nastavit tak, aby vydával odpovídající rozlišení.
Jak se zachází s HDMI během bootování
Při prvním zapnutí Raspberry Pi projde řadou stages, známý jako boot stages:
- První-stage, bootloader založený na ROM spustí VideoCore GPU.
- Sekundytage bootloader (toto je bootcode.bin na SD kartě na zařízeních před Raspberry Pi 4 a v SPI EEPROM na Raspberry Pi 4):
- Na Raspberry Pi 4, druhý-stagBootloader spustí systém HDMI, vyhledá na displeji možné režimy a poté displej vhodně nastaví. V tomto okamžiku se displej používá k poskytování základních diagnostických údajů.
- Diagnostický displej bootloaderu (od 07. prosince 2022) zobrazí stav všech připojených displejů (zda je přítomen Hotplug Detect (HPD) a zda byl z displeje obnoven blok EDID).
- Firmware VideoCore (start.elf) se načte a spustí. Tím převezmete kontrolu nad systémem HDMI, přečtete blok EDID ze všech připojených displejů a na těchto displejích zobrazíte duhovou obrazovku.
- Spustí se jádro Linuxu
- Během bootování jádra KMS převezme kontrolu nad systémem HDMI z firmwaru. Blok EDID je opět načten ze všech připojených displejů a tyto informace se použijí k nastavení konzole Linuxu a plochy.
Možné problémy a příznaky
Nejčastějším příznakem selhání, ke kterému dochází při přechodu na KMS, je zpočátku dobrý start, kdy se objeví obrazovka bootloaderu a poté duhová obrazovka, po několika sekundách obrazovka zčerná a znovu se nerozsvítí. Okamžik, kdy displej zčerná, je ve skutečnosti bodem během procesu zavádění jádra, kdy ovladač KMS převezme řízení displeje z firmwaru. Raspberry Pi aktuálně běží ve všech ohledech kromě výstupu HDMI, takže pokud je povoleno SSH, měli byste být schopni se k zařízení přihlásit touto cestou. Zelená dioda LED přístupu na kartu SD obvykle občas zabliká. Je také možné, že neuvidíte žádný výstup HDMI; žádný displej bootloaderu a žádná duhová obrazovka. To lze obvykle připsat hardwarové chybě.
Diagnostika závady
Žádný HDMI výstup vůbec
Je možné, že se zařízení vůbec nespustilo, ale to je mimo rozsah tohoto dokumentu. Za předpokladu, že pozorované chování je problém se zobrazením, nedostatek výstupu HDMI během jakékoli části procesu spouštění je obvykle způsoben poruchou hardwaru. Existuje několik možných možností:
- Vadný kabel HDMI
- Zkuste nový kabel. Některé kabely, zejména velmi levné, nemusí obsahovat všechny potřebné komunikační linky (např. hotplug), aby Raspberry Pi úspěšně detekovalo displej.
- Vadný port HDMI na Raspberry Pi
- Pokud používáte Raspberry Pi 4, zkuste jiný port HDMI.
- Vadný port HDMI na monitoru
- Někdy se může opotřebovat port HDMI na monitoru nebo televizi. Zkuste jiný port, pokud jej zařízení má.
- Zřídka může zobrazovací zařízení poskytovat data EDID pouze tehdy, když je zapnuto, nebo když je vybrán správný port. Pro kontrolu se ujistěte, že je zařízení zapnuté a že je vybrán správný vstupní port.
- Zobrazovací zařízení neaktivuje detekční linku hotplug
Počáteční výstup, pak obrazovka zčerná
Pokud se obrazovka objeví, ale pak zhasne během bootování linuxového jádra, existuje řada možných příčin a ty obvykle souvisí s problémem čtení EDID ze zobrazovacího zařízení. Jak je vidět z výše uvedené části zabývající se zaváděcí sekvencí, EDID se během procesu spouštění načítá v několika různých bodech a každé z těchto čtení provádí jiný software. Konečné čtení, když KMS převezme řízení, se provádí nezměněným upstreamovým kódem linuxového jádra, a to nezvládá vadné formáty EDID tak dobře jako dřívější software firmwaru. To je důvod, proč může displej přestat správně fungovat, jakmile KMS převezme kontrolu. Existuje řada způsobů, jak ověřit, zda KMS selhává při čtení EDID, a dva z nich jsou následující.
Zkontrolujte diagnostickou obrazovku bootloaderu (pouze Raspberry Pi 4)
POZNÁMKA
Diagnostika bootloaderu vyžaduje nejnovější bootloader. Aktualizaci na nejnovější verzi můžete provést pomocí těchto pokynů: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Vyjměte SD kartu a restartujte Raspberry Pi. Stiskněte ESC na obrazovce Instalace OS a na zobrazovacím zařízení by se měla objevit diagnostická obrazovka. Na displeji by měl být řádek začínající displejem: — napřampten:
- zobrazit: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=žádné #0
Tento výstup z Raspberry Pi 4 ukazuje, že systém detekoval displej HDMI na portu HDMI 0, detekce hotplug je potvrzena a EDID bylo přečteno v pořádku. Na portu HDMI 1 nebylo nic nalezeno.
Zkontrolujte, zda systém KMS detekoval EDID
Chcete-li to zkontrolovat, budete se muset přihlásit k zařízení Raspberry Pi přes SSH z jiného počítače. SSH lze povolit při vytváření obrazu SD karty pomocí Raspberry Pi Imager pomocí možností Upřesnit nastavení. Povolení SSH na SD kartě, která již byla vytvořena jako image, je trochu složitější: k přidání budete muset použít jiný počítač. file pojmenovaný ssh do zaváděcího oddílu. Vyměňte SD kartu v původním Raspberry Pi a zapněte jej. To by mělo povolit SSH s IP adresou přidělenou DHCP. Po přihlášení zadejte do příkazového řádku následující příkaz, abyste zobrazili obsah jakéhokoli zjištěného EDID (možná budete muset změnit HDMI-A-1 na HDMI-A-2 v závislosti na tom, ke kterému portu HDMI na Raspberry Pi je připojeno zobrazovací zařízení to): cat /sys/class/drm/card?-HDMI-A-1/edid Pokud neexistují žádné složky s názvem card?-HDMI-A-1 nebo podobné, pak je pravděpodobné, že z displeje nelze načíst žádné EDID přístroj.
POZNÁMKA
V případě, že je EDID úspěšně načteno, existuje užitečný virtuál file ve stejné složce nazvané režimy, která při zobrazení zobrazuje všechny možné režimy, o kterých EDID tvrdí, že je zařízení podporuje.
Zmírnění
Selhání detekce hotplug Pokud firmware i KMS nenajdou připojený monitor, může se jednat o selhání detekce hotplug – tj. Raspberry Pi neví, že bylo připojeno zařízení, takže nekontroluje EDID. To může být způsobeno špatným kabelem nebo zobrazovacím zařízením, které správně neaktivuje hotplug. Detekci hotplug můžete vynutit změnou příkazového řádku jádra file (cmdline.txt), který je uložen v zaváděcím oddílu SD karty OS Raspberry Pi. Toto můžete upravit file na jiném systému pomocí libovolného editoru, který preferujete. Na konec souboru cmdline.txt přidejte následující file: video=HDMI-A-1:1280×720@60D Pokud používáte druhý port HDMI, vyměňte HDMI-A-1 za HDMI-A-2. Můžete také zadat jiné rozlišení a snímkovou frekvenci, ale ujistěte se, že jste vybrali takové, které zobrazovací zařízení podporuje.
POZNÁMKA
Dokumentaci k nastavení příkazového řádku jádra pro video lze nalézt zde: https://www.kernel.org/doc/Documentation/fb/modedb.txt
VAROVÁNÍ
Starší grafické zásobníky podporovaly použití položky config.txt pro nastavení detekce hotplug, ale v době psaní tohoto článku to s KMS nefunguje. Může být podporován v budoucích verzích firmwaru. Položka config.txt je hdmi_force_hotplug a můžete určit konkrétní port HDMI, na který se hotplug vztahuje, pomocí buď hdmi_force_hotplug:0=1 nebo hdmi_force_hotplug:1=1. Všimněte si, že nomenklatura pro KMS označuje porty HDMI jako 1 a 2, zatímco Raspberry Pi používá 0 a 1.
Problémy EDID
Menšina zobrazovacích zařízení není schopna vrátit EDID, pokud jsou vypnutá nebo když je vybrán nesprávný AV vstup. To může být problém, když jsou Raspberry Pi a zobrazovací zařízení na stejné napájecí liště a zařízení Raspberry Pi se spouští rychleji než displej. U zařízení, jako je toto, možná budete muset zadat EDID ručně. Ještě neobvyklejší je, že některá zobrazovací zařízení mají bloky EDID, které jsou špatně naformátované a nelze je analyzovat systémem KMS EDID. Za těchto okolností může být možné přečíst EDID ze zařízení s podobným rozlišením a použít jej. V obou případech je v následujících pokynech uvedeno, jak číst EDID ze zobrazovacího zařízení a nakonfigurovat KMS tak, aby jej používal, namísto toho, aby se KMS pokoušela přímo načíst zařízení.
Kopírování EDID do a file
Vytvoření a file obsahovat metadata EDID od začátku není obvykle proveditelné a použití existujících je mnohem jednodušší. Obecně je možné získat EDID ze zobrazovacího zařízení a uložit jej na SD kartu Raspberry Pi, takže jej může použít KMS místo získávání EDID ze zobrazovacího zařízení. Nejjednodušší možností je zajistit, aby zobrazovací zařízení bylo v provozu a na správném AV vstupu a že Raspberry Pi správně spustilo systém HDMI. Z terminálu nyní můžete zkopírovat EDID do a file pomocí následujícího příkazu: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Pokud z nějakého důvodu není EDID přítomno, můžete zavést zařízení bez -Režim KMS, který úspěšně zavede na plochu nebo konzolu, a poté zkopírujte EDID, které firmware (doufejme) úspěšně načte, do file.
- Spusťte do staršího grafického režimu.
- Upravte soubor config.txt v zaváděcím oddílu, nezapomeňte spustit editor pomocí sudo a změňte řádek, který říká dtoverlay=vc4-kms-v3d na #dtoverlay=vc4-kms-v3d.
- Restartujte.
- Nyní by se měla objevit plocha nebo přihlašovací konzola.
- Pomocí terminálu zkopírujte EDID z připojeného zobrazovacího zařízení do a file s následujícím příkazem:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
Pomocí a file-based EDID namísto dotazování zobrazovacího zařízení Upravte /boot/cmdline.txt, ujistěte se, že spouštíte editor pomocí sudo, a do příkazového řádku jádra přidejte následující: drm.edid_firmware=myedid.dat EDID můžete použít na konkrétní port HDMI takto: drm.edid_firmware=HDMI-A-1:myedid.dat V případě potřeby spusťte systém zpět do režimu KMS takto:
- Upravte soubor config.txt v zaváděcím oddílu, nezapomeňte spustit editor pomocí sudo a změňte řádek s textem #dtoverlay=vc4-kms-v3d na dtoverlay=vc4-kms-v3d.
- Restartujte.
POZNÁMKA
Pokud použijete a file-založené EDID, ale stále máte problémy s hotplug, můžete vynutit detekci hotplug přidáním následujícího do příkazového řádku jádra: video=HDMI-A-1:D.
Dokumenty / zdroje
![]() |
Ovladač grafického výstupu RaspberryPi KMS HDMI [pdfUživatelská příručka KMS, HDMI Output Graphic Driver, KMS HDMI Output, Graphic Driver, KMS HDMI Output Graphics Driver, Driver |