RaspberryPi-LOGO

RaspberryPi KMS HDMI Output Graphics Driver

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

Colophon

2020-2023 Raspberry Pi Ltd (dating Raspberry Pi (Trading) Ltd.) Ang dokumentasyong ito ay lisensyado sa ilalim ng lisensya ng Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). build-date: 2023-02-10 build-version: githash: c65fe9c-clean

Paunawa sa Legal na Disclaimer

TEKNIKAL AT PAGKAAASAHAN NA DATA PARA SA MGA PRODUKTO NG RASPBERRY PI (KASAMA ANG MGA DATASHEETS) NA BINABAGO PAminsan-minsan (“MGA YAMAN”) AY IBINIBIGAY NG RASPBERRY PI LTD (“RPL”) “AS IS” AT ANUMANG TAHAS O IPINAHIWATIG NA WARRANTY, HINDI KASAMA, SA, ANG IPINAHIWATIG NA WARRANTY NG KALIGTASAN AT KAANGKUPAN PARA SA ISANG PARTIKULAR NA LAYUNIN AY ITINATAWALA. HANGGANG SA LABAS NA PINAHIHINTULUTAN NG NAAANGKOP NA BATAS SA KAHIT KAHIT WALANG PANANAGUTAN ANG RPL PARA SA ANUMANG DIREKTA, DI DIREKTA, NAGSASABI, ESPESYAL, HUWAG, O KINAHIHINUNGANG MGA PINSALA (KASAMA, PERO HINDI LIMITADO SA, PAGBIBIGAY NG MGA KAPALIT NA MGA SERBISYO; , O MGA KITA; O PAG-ALAM SA NEGOSYO) GAANO MAN ANG SANHI AT SA ANUMANG TEORYA NG PANANAGUTAN, SA KONTRATA MAN, MAHIGPIT NA PANANAGUTAN, O TORT (KASAMA ANG PAGPAPAbaya O KUNG IBA) NA NAGMULA SA ANUMANG PARAAN SA PAGGAMIT NG MGA PAGKUKUNAN, NG GANITONG PINSALA. Inilalaan ng RPL ang karapatan na gumawa ng anumang mga pagpapahusay, pagpapahusay, pagwawasto o anumang iba pang mga pagbabago sa RESOURCES o anumang mga produktong inilarawan sa mga ito anumang oras at nang walang karagdagang abiso. Ang RESOURCES ay inilaan para sa mga bihasang user na may angkop na antas ng kaalaman sa disenyo. Ang mga gumagamit ay tanging responsable para sa kanilang pagpili at paggamit ng MGA RESOURCES at anumang aplikasyon ng mga produktong inilarawan sa kanila. Sumasang-ayon ang user na magbayad ng danyos at panatilihing hindi nakakapinsala ang RPL laban sa lahat ng pananagutan, gastos, pinsala o iba pang pagkalugi na dulot ng kanilang paggamit sa RESOURCES. Binibigyan ng RPL ang mga user ng pahintulot na gamitin ang RESOURCES kasabay lamang ng mga produktong Raspberry Pi. Ang lahat ng iba pang paggamit ng RESOURCES ay ipinagbabawal. Walang lisensya ang ibinibigay sa anumang ibang RPL o iba pang third party na karapatan sa intelektwal na ari-arian. MGA AKTIBIDAD NA MATAAS NA PANGANIB. Ang mga produkto ng Raspberry Pi ay hindi idinisenyo, ginawa o inilaan para gamitin sa mga mapanganib na kapaligiran na nangangailangan ng hindi ligtas na pagganap, tulad ng sa pagpapatakbo ng mga pasilidad ng nuklear, nabigasyon ng sasakyang panghimpapawid o mga sistema ng komunikasyon, kontrol sa trapiko sa himpapawid, mga sistema ng armas o mga aplikasyong kritikal sa kaligtasan (kabilang ang suporta sa buhay. system at iba pang mga medikal na aparato), kung saan ang pagkabigo ng mga produkto ay maaaring direktang humantong sa kamatayan, personal na pinsala o malubhang pisikal o pinsala sa kapaligiran ("Mga Aktibidad na Mataas na Panganib"). Partikular na itinatanggi ng RPL ang anumang ipinahayag o ipinahiwatig na warranty ng pagiging angkop para sa Mga Aktibidad na Mataas ang Panganib at hindi tumatanggap ng pananagutan para sa paggamit o pagsasama ng mga produkto ng Raspberry Pi sa Mga Aktibidad na Mataas ang Panganib. Ang mga produktong Raspberry Pi ay ibinibigay alinsunod sa Mga Karaniwang Tuntunin ng RPL. Ang probisyon ng RPL ng RESOURCES ay hindi nagpapalawak o kung hindi man ay nagbabago sa Mga Karaniwang Tuntunin ng RPL kabilang ngunit hindi limitado sa mga disclaimer at warranty na ipinahayag sa kanila.

Kasaysayan ng bersyon ng dokumento

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

Saklaw ng dokumento

Nalalapat ang dokumentong ito sa mga sumusunod na produkto ng Raspberry Pi

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

Panimula

Sa pagpapakilala ng graphics driver ng KMS (Kernel Mode Setting), ang Raspberry Pi Ltd ay lumalayo mula sa legacy na kontrol ng firmware ng video output system at patungo sa isang mas open source na graphics system. Gayunpaman, ito ay may kasamang sariling hanay ng mga hamon. Ang dokumentong ito ay inilaan upang makatulong sa anumang mga isyu na maaaring lumitaw kapag lumipat sa bagong system. Ipinapalagay ng whitepaper na ito na ang Raspberry Pi ay nagpapatakbo ng Raspberry Pi OS, at ganap na napapanahon sa pinakabagong firmware at mga kernel.

Terminolohiya

DRM: Direct Rendering Manager, isang subsystem ng Linux kernel na ginagamit upang makipag-ugnayan sa mga graphics processing unit (GPU). Ginagamit sa pakikipagtulungan sa FKMS at KMS.
DVI: Isang hinalinhan sa HDMI, ngunit walang mga kakayahan sa audio. Available ang mga HDMI to DVI cable at adapter para ikonekta ang isang Raspberry Pi device sa isang display na may DVI.
EDID: Pinalawak na Display Identification Data. Isang format ng metadata para sa mga display device upang ilarawan ang kanilang mga kakayahan sa isang video source. Kasama sa istruktura ng data ng EDID ang pangalan ng tagagawa at serial number, uri ng produkto, laki ng pisikal na display, at mga timing na sinusuportahan ng display, kasama ang ilang hindi gaanong kapaki-pakinabang na data. Ang ilang mga display ay maaaring magkaroon ng mga may sira na bloke ng EDID, na maaaring magdulot ng mga problema kung ang mga depektong iyon ay hindi pinangangasiwaan ng sistema ng pagpapakita.
FKMS (vc4-fkms-v3d): Setting ng Fake Kernel Mode. Habang kinokontrol pa rin ng firmware ang mababang antas ng hardware (para sa halample, ang mga High-Definition Multimedia Interface (HDMI) port, ang Display Serial Interface (DSI), atbp), ang karaniwang mga library ng Linux ay ginagamit sa kernel mismo. Ang FKMS ay ginagamit bilang default sa Buster, ngunit ngayon ay hindi na ginagamit pabor sa KMS sa Bullseye.
HDMI: Ang High-Definition Multimedia Interface ay isang pagmamay-ari na interface ng audio/video para sa pagpapadala ng hindi naka-compress na data ng video, at naka-compress o hindi naka-compress na digital audio data.
HPD: Na-detect ang hotplug. Isang pisikal na wire na iginiit ng isang konektadong display device upang ipakita na naroroon ito.
KMS: Setting ng Kernel Mode; tingnan mo https://www.kernel.org/doc/html/latest/gpu/drm-kms.html para sa karagdagang detalye. Sa Raspberry Pi, ang vc4-kms-v3d ay isang driver na nagpapatupad ng KMS, at madalas na tinutukoy bilang "ang driver ng KMS". Legacy graphics stack: Isang graphics stack na ganap na ipinatupad sa VideoCore firmware blob na inilantad ng isang Linux framebuffer driver. Ang legacy graphics stack ay ginamit sa karamihan ng mga Raspberry Pi Ltd device hanggang kamakailan; unti-unti na itong pinapalitan ng (F)KMS/DRM.

Ang HDMI system at ang mga graphics driver

Ginagamit ng mga Raspberry Pi device ang HDMI standard, na karaniwan sa mga modernong LCD monitor at telebisyon, para sa video output. Ang Raspberry Pi 3 (kabilang ang Raspberry Pi 3B+) at ang mga naunang device ay may iisang HDMI port, na may kakayahang 1920 × 1200 @60Hz na output gamit ang full-size na HDMI connector. Ang Raspberry Pi 4 ay may dalawang micro HDMI port, at may kakayahang 4K output sa parehong port. Depende sa setup, ang HDMI 0 port sa Raspberry Pi 4 ay may kakayahang hanggang 4kp60, ngunit kapag gumagamit ng dalawang 4K na output device, limitado ka sa p30 sa parehong mga device. Ang graphics software stack, anuman ang bersyon, ay responsable para sa interogasyon ng mga naka-attach na HDMI device para sa kanilang mga katangian, at pag-set up ng HDMI system nang naaangkop. Ang legacy at FKMS stacks ay parehong gumagamit ng firmware sa VideoCore graphics processor upang tingnan kung may HDMI at mga katangian. Sa kabaligtaran, ang KMS ay gumagamit ng isang ganap na open source, ARM-side na pagpapatupad. Nangangahulugan ito na ang mga base ng code para sa dalawang sistema ay ganap na naiiba, at sa ilang mga pagkakataon maaari itong magresulta sa magkaibang pag-uugali sa pagitan ng dalawang diskarte. Ang mga HDMI at DVI device ay kinikilala ang kanilang sarili sa pinagmulang device gamit ang isang piraso ng metadata na tinatawag na EDID block. Ito ay binabasa ng source device mula sa display device sa pamamagitan ng isang I2C na koneksyon, at ito ay ganap na transparent sa end user dahil ginagawa ito ng graphics stack. Ang EDID block ay naglalaman ng maraming impormasyon, ngunit ito ay pangunahing ginagamit upang tukuyin kung aling mga resolusyon ang sinusuportahan ng display, kaya ang Raspberry Pi ay maaaring i-set up upang maglabas ng naaangkop na resolusyon.

Paano tinatalakay ang HDMI habang nagbo-boot

Kapag unang naka-on, dumaan ang Raspberry Pi sa ilang stages, na kilala bilang boot stages:

  1. Ang unang-stage, ang ROM-based na bootloader ay magsisimula sa VideoCore GPU.
  2. Second-stage bootloader (ito ay bootcode.bin sa SD card sa mga device bago ang Raspberry Pi 4, at sa SPI EEPROM sa Raspberry Pi 4):
    1. Sa Raspberry Pi 4, ang pangalawang-stagSisimulan ng e bootloader ang HDMI system, tanungin ang display para sa mga posibleng mode, pagkatapos ay i-set up ang display nang naaangkop. Sa puntong ito ang display ay ginagamit upang magbigay ng pangunahing diagnostic data.
    2. Ipapakita ng diagnostic display ng bootloader (Disyembre 07, 2022 pataas) ang status ng anumang mga naka-attach na display (kung mayroon man ang Hotplug Detect (HPD), at kung may na-recover na EDID block mula sa display).
  3. Ang firmware ng VideoCore (start.elf) ay na-load at tumatakbo. Aalisin nito ang kontrol ng HDMI system, basahin ang EDID block mula sa anumang mga naka-attach na display, at ipapakita ang rainbow screen sa mga display na iyon.
  4. Ang Linux kernel boots
    1. Sa panahon ng kernel boot, kukunin ng KMS ang kontrol ng HDMI system mula sa firmware. Muli, binabasa ang bloke ng EDID mula sa anumang mga naka-attach na display, at ginagamit ang impormasyong ito para i-set up ang Linux console at desktop.

Mga posibleng problema at sintomas

Ang pinakakaraniwang sintomas ng pagkabigo na nararanasan kapag lumipat sa KMS ay isang magandang boot sa simula, na may lalabas na screen ng bootloader at pagkatapos ay ang rainbow screen, na sinusundan pagkatapos ng ilang segundo ng pagdidilim ng display at hindi na babalik. Ang punto kung saan nagiging itim ang display ay sa katunayan ang punto sa panahon ng proseso ng kernel booting kapag ang driver ng KMS ang pumalit sa pagpapatakbo ng display mula sa firmware. Ang Raspberry Pi ay kasalukuyang tumatakbo sa lahat ng aspeto maliban sa HDMI na output, kaya kung ang SSH ay pinagana, dapat ay makapag-log in ka sa device sa pamamagitan ng rutang iyon. Ang berdeng SD card access LED ay karaniwang kumikislap paminsan-minsan. Posible rin na wala kang makitang output ng HDMI; walang bootloader display, at walang rainbow screen. Ito ay kadalasang maiuugnay sa isang hardware fault.

Pag-diagnose ng kasalanan

Walang HDMI output sa lahat
Posibleng hindi pa nag-boot ang device, ngunit wala ito sa remit ng white paper na ito. Ipagpalagay na ang naobserbahang gawi ay isang problema sa pagpapakita, ang kakulangan ng HDMI output sa anumang bahagi ng proseso ng pag-boot ay kadalasang dahil sa isang hardware fault. Mayroong ilang mga posibleng pagpipilian:

  • Sirang HDMI cable
  • Subukan ang isang bagong cable. Ang ilang mga cable, lalo na ang mga napakamura, ay maaaring hindi naglalaman ng lahat ng kinakailangang linya ng komunikasyon (hal. hotplug) para matagumpay na matukoy ng Raspberry Pi ang display.
  • May sira na HDMI port sa Raspberry Pi
  • Kung gumagamit ka ng Raspberry Pi 4, subukan ang iba pang HDMI port.
  • Sirang HDMI port sa monitor
  • Minsan ang HDMI port sa isang monitor o TV ay maaaring masira. Subukan ang ibang port kung mayroon ang device.
  • Bihirang, ang isang display device ay maaari lamang magbigay ng EDID data kapag naka-on, o kapag ang tamang port ay napili. Upang suriin, tiyaking naka-on ang device at napili ang tamang input port.
  • Display device na hindi iginiit ang hotplug detect line

Paunang output, pagkatapos ay iitim ang screen
Kung ang display ay lumabas ngunit pagkatapos ay umalis sa panahon ng Linux kernel boot, mayroong isang bilang ng mga posibleng dahilan, at ang mga ito ay karaniwang nauugnay sa isang problema sa pagbabasa ng EDID mula sa display device. Tulad ng makikita mula sa seksyon sa itaas na nakikitungo sa pagkakasunud-sunod ng boot, ang EDID ay binabasa sa isang bilang ng iba't ibang mga punto sa panahon ng proseso ng pag-boot, at ang bawat isa sa mga nabasang ito ay ginagawa ng ibang piraso ng software. Ang huling pagbabasa, kapag ang KMS ang pumalit, ay isinasagawa sa pamamagitan ng hindi nabagong upstream na Linux kernel code, at hindi nito pinangangasiwaan ang mga may sira na format ng EDID pati na rin ang naunang firmware software. Ito ang dahilan kung bakit ang display ay maaaring huminto sa paggana nang tama kapag ang KMS ang pumalit. Mayroong ilang mga paraan upang kumpirmahin kung hindi binabasa ng KMS ang EDID, at dalawa sa mga ito ay ang mga sumusunod.
Suriin ang diagnostic screen ng bootloader (Raspberry Pi 4 lang)

TANDAAN
Ang mga diagnostic ng bootloader ay nangangailangan ng isang kamakailang bootloader. Maaari kang mag-upgrade sa pinakabagong bersyon gamit ang mga tagubiling ito: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Alisin ang SD card at i-reboot ang Raspberry Pi. Pindutin ang ESC sa screen ng I-install ang OS, at dapat lumabas ang diagnostic screen sa display device. Dapat mayroong isang linya sa display na nagsisimula sa display: — para sa halample:

  • display: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=none #0

Ang output na ito mula sa isang Raspberry Pi 4 ay nagpapakita na ang system ay nakakita ng isang HDMI display sa HDMI port 0, ang hotplug detect ay iginiit, at ang EDID ay nabasa nang OK. Walang nakita sa HDMI port 1.

Suriin kung may nakitang EDID ang KMS system
Upang suriin ito, kakailanganin mong mag-log in sa Raspberry Pi device sa SSH mula sa ibang computer. Maaaring paganahin ang SSH kapag gumagawa ng imahe ng SD card gamit ang Raspberry Pi Imager, gamit ang mga opsyon sa Advanced na Setting. Ang pagpapagana ng SSH sa isang SD card na nailarawan na ay medyo mas kumplikado: kakailanganin mong gumamit ng isa pang computer upang magdagdag ng file pinangalanang ssh sa boot partition. Palitan ang SD card sa orihinal na Raspberry Pi at paganahin ito. Dapat nitong paganahin ang SSH, na may IP address na inilalaan ng DHCP. Kapag naka-log in, i-type ang sumusunod sa terminal prompt upang ipakita ang mga nilalaman ng anumang EDID na nakita (maaaring kailanganin mong baguhin ang HDMI-A-1 sa HDMI-A-2 depende sa kung aling HDMI port sa Raspberry Pi ang display device ay konektado to): cat /sys/class/drm/card?-HDMI-A-1/edid Kung walang mga folder na pinangalanang card?-HDMI-A-1 o katulad nito, malamang na walang EDID na mababasa mula sa display aparato.

TANDAAN
Sa kaso kung saan matagumpay na nabasa ang EDID, mayroong isang kapaki-pakinabang na virtual file sa parehong folder, na tinatawag na mga mode, na kapag ipinakita ay nagpapakita ng lahat ng posibleng mga mode na inaangkin ng EDID na sinusuportahan ng device.

Mga pagpapagaan

Hotplug detect failure Kung parehong nabigo ang firmware at KMS na makahanap ng naka-attach na monitor, maaaring ito ay isang hotplug detection failure — ibig sabihin, hindi alam ng Raspberry Pi na may nakasaksak na device, kaya hindi nito tinitingnan kung may EDID. Ito ay maaaring sanhi ng isang masamang cable, o isang display device na hindi igiit nang tama ang hotplug. Maaari mong pilitin ang isang hotplug detect sa pamamagitan ng pagbabago sa kernel command line file (cmdline.txt) na naka-store sa boot partition ng Raspberry Pi OS SD card. Maaari mong i-edit ito file sa ibang system, gamit ang anumang editor na gusto mo. Idagdag ang sumusunod sa dulo ng cmdline.txt file: video=HDMI-A-1:1280×720@60D Kung gumagamit ka ng pangalawang HDMI port, palitan ang HDMI-A-1 ng HDMI-A-2. Maaari ka ring tumukoy ng ibang resolution at frame rate, ngunit tiyaking pipiliin mo ang mga sinusuportahan ng display device.

TANDAAN
Ang dokumentasyon sa mga setting ng kernel command line para sa video ay matatagpuan dito: https://www.kernel.org/doc/Documentation/fb/modedb.txt

BABALA
Sinuportahan ng mga mas lumang graphics stack ang paggamit ng isang config.txt entry upang itakda ang hotplug detect, ngunit sa oras ng pagsulat ay hindi ito gumagana sa KMS. Maaaring sinusuportahan ito sa mga paglabas ng firmware sa hinaharap. Ang config.txt entry ay hdmi_force_hotplug, at maaari mong tukuyin ang partikular na HDMI port kung saan nalalapat ang hotplug gamit ang alinman sa hdmi_force_hotplug:0=1 o hdmi_force_hotplug:1=1. Tandaan na ang nomenclature para sa KMS ay tumutukoy sa mga HDMI port bilang 1 at 2, habang ang Raspberry Pi ay gumagamit ng 0 at 1.

Mga problema sa EDID
Ang isang minorya ng mga display device ay walang kakayahang magbalik ng EDID kung naka-off ang mga ito, o kapag napili ang maling AV input. Maaari itong maging isyu kapag ang Raspberry Pi at ang mga display device ay nasa parehong power strip, at ang Raspberry Pi device ay nagbo-boot nang mas mabilis kaysa sa display. Sa mga device na tulad nito, maaaring kailanganin mong manual na magbigay ng EDID. Higit pang hindi karaniwan, ang ilang mga display device ay may mga EDID block na hindi maganda ang pagkaka-format at hindi ma-parse ng KMS EDID system. Sa mga sitwasyong ito, posibleng magbasa ng EDID mula sa isang device na may katulad na resolution at gamitin iyon. Sa alinmang kaso, itinakda ng mga sumusunod na tagubilin kung paano magbasa ng EDID mula sa isang display device at i-configure ang KMS na gamitin ito, sa halip na subukan ng KMS na itanong nang direkta ang device.

Pagkopya ng EDID sa a file
Paglikha ng a file na naglalaman ng EDID metadata mula sa simula ay hindi karaniwang magagawa, at ang paggamit ng isang umiiral na ay mas madali. Karaniwang posibleng makakuha ng EDID mula sa isang display device at iimbak ito sa SD card ng Raspberry Pi upang magamit ito ng KMS sa halip na kumuha ng EDID mula sa display device. Ang pinakamadaling opsyon dito ay upang matiyak na ang display device ay gumagana at nasa tamang AV input, at na ang Raspberry Pi ay nagsimula nang tama sa HDMI system. Mula sa terminal, maaari mo na ngayong kopyahin ang EDID sa a file gamit ang sumusunod na command: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Kung sa ilang kadahilanan ay wala ang EDID, maaari mong i-boot ang device sa isang non -KMS mode na nagtagumpay sa pag-boot sa desktop o console, pagkatapos ay kopyahin ang EDID na (sana) matagumpay na mabasa ng firmware sa isang file.

  1. Mag-boot sa legacy graphics mode.
    1. I-edit ang config.txt sa boot partition, siguraduhing patakbuhin ang iyong editor gamit ang sudo, at baguhin ang linyang nagsasabing dtoverlay=vc4-kms-v3d sa #dtoverlay=vc4-kms-v3d.
    2. I-reboot.
  2. Dapat na lumitaw ang desktop o login console.
    1. Gamit ang terminal, kopyahin ang EDID mula sa nakalakip na display device sa a file gamit ang sumusunod na utos:
  • tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/

Gamit ang a file-based EDID sa halip na tanungin ang display device I-edit ang /boot/cmdline.txt, siguraduhing patakbuhin ang iyong editor gamit ang sudo, at idagdag ang sumusunod sa kernel command line: drm.edid_firmware=myedid.dat Maaari mong ilapat ang EDID sa isang partikular na HDMI port gaya ng sumusunod: drm.edid_firmware=HDMI-A-1:myedid.dat Kung kinakailangan, mag-boot pabalik sa KMS mode sa pamamagitan ng paggawa ng sumusunod:

  1. I-edit ang config.txt sa boot partition, siguraduhing patakbuhin ang iyong editor gamit ang sudo, at baguhin ang linyang nagsasabing #dtoverlay=vc4-kms-v3d sa dtoverlay=vc4-kms-v3d.
  2. I-reboot.

TANDAAN
Kung gagamit ka ng a file-based EDID, ngunit mayroon pa ring mga problema sa hotplug, maaari mong pilitin ang pagtuklas ng hotplug sa pamamagitan ng pagdaragdag ng sumusunod sa kernel command line: video=HDMI-A-1:D.

Mga Dokumento / Mga Mapagkukunan

RaspberryPi KMS HDMI Output Graphics Driver [pdf] User Manual
KMS, HDMI Output Graphics Driver, KMS HDMI Output, Graphics Driver, KMS HDMI Output Graphics Driver, Driver

Mga sanggunian

Mag-iwan ng komento

Ang iyong email address ay hindi maipa-publish. Ang mga kinakailangang field ay minarkahan *