RaspberryPi KMS Pemacu Grafik Output HDMI
Kolofon
2020-2023 Raspberry Pi Ltd (dahulunya Raspberry Pi (Trading) Ltd.) Dokumentasi ini dilesenkan di bawah lesen Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0). tarikh binaan: 2023-02-10 versi binaan: githash: c65fe9c-clean
Notis Penafian Undang-undang
DATA TEKNIKAL DAN KEBOLEHPERCAYAAN UNTUK PRODUK RASPBERRY PI (TERMASUK LEMBARAN DATA) SEPERTI YANG DIUBAHSUAI DARI SEMASA KE SEMASA (“SUMBER”) DISEDIAKAN OLEH RASPBERRY PI LTD (“RPL”) “SEBAGAIMANA ADANYA” DAN MANA-MANA WARANTI NYATA ATAU TERSIRAT, TIDAK TERMASUK, KEPADA, WARANTI TERSIRAT KEBOLEHPERDAGANGAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU ADALAH DITOLAK. SEJAUH MAKSIMUM YANG DIBENARKAN OLEH UNDANG-UNDANG YANG BERKENAAN DALAM APA PUN RPL TIDAK AKAN BERTANGGUNGJAWAB ATAS SEBARANG KEROSAKAN LANGSUNG, TIDAK LANGSUNG, SAMPINGAN, KHAS, TEladan ATAU AKIBAT (TERMASUK, TETAPI TIDAK TERHAD KEPADA, PEROLEHAN PEROLEHAN PERKHIDMATAN PENGGANTIAN, DIRI PENGGANTIAN; , ATAU KEUNTUNGAN; ATAU GANGGUAN PERNIAGAAN) WALAUPUN AGAMA AGAMA ADANYA DAN ATAS MANA-MANA TEORI LIABILITI, SAMA ADA DALAM KONTRAK, LIABILITI KETAT ATAU TORT (TERMASUK KECUAIAN ATAU LAIN-LAIN) YANG TIMBUL DALAM MANA-MANA CARA KELUAR DARIPADA PENGGUNAAN SUMBER YANG DIPERCAYAKAN, KEROSAKAN TERSEBUT. RPL berhak untuk membuat sebarang penambahbaikan, penambahbaikan, pembetulan atau sebarang pengubahsuaian lain pada SUMBER atau mana-mana produk yang diterangkan di dalamnya pada bila-bila masa dan tanpa notis lanjut. RESOURCES bertujuan untuk pengguna mahir dengan tahap pengetahuan reka bentuk yang sesuai. Pengguna bertanggungjawab sepenuhnya untuk pemilihan dan penggunaan SUMBER dan sebarang aplikasi produk yang diterangkan di dalamnya. Pengguna bersetuju untuk menanggung rugi dan memastikan RPL tidak berbahaya terhadap semua liabiliti, kos, kerosakan atau kerugian lain yang timbul daripada penggunaan RESOURCES.RPL memberi kebenaran kepada pengguna untuk menggunakan RESOURCES semata-mata bersama produk Raspberry Pi. Semua penggunaan lain SUMBER adalah dilarang. Tiada lesen diberikan kepada mana-mana RPL lain atau hak harta intelek pihak ketiga yang lain. AKTIVITI BERISIKO TINGGI. Produk Raspberry Pi tidak direka bentuk, dikilangkan atau dimaksudkan untuk digunakan dalam persekitaran berbahaya yang memerlukan prestasi selamat yang gagal, seperti dalam pengendalian kemudahan nuklear, navigasi pesawat atau sistem komunikasi, kawalan trafik udara, sistem senjata atau aplikasi kritikal keselamatan (termasuk sokongan hayat). sistem dan peranti perubatan lain), di mana kegagalan produk boleh membawa kepada kematian, kecederaan peribadi atau kerosakan fizikal atau alam sekitar yang teruk ("Aktiviti Berisiko Tinggi"). RPL secara khusus menafikan sebarang waranti tersurat atau tersirat kesesuaian untuk Aktiviti Berisiko Tinggi dan tidak menerima liabiliti untuk penggunaan atau kemasukan produk Raspberry Pi dalam Aktiviti Berisiko Tinggi. Produk Raspberry Pi disediakan tertakluk kepada Syarat Standard RPL. Peruntukan RPL bagi RESOURCES tidak mengembangkan atau mengubah suai Terma Standard RPL termasuk tetapi tidak terhad kepada penafian dan waranti yang dinyatakan di dalamnya.
Sejarah versi dokumen
Skop dokumen
Dokumen ini digunakan untuk produk Raspberry Pi berikut
pengenalan
Dengan pengenalan pemacu grafik KMS (Tetapan Mod Kernel), Raspberry Pi Ltd beralih daripada kawalan perisian tegar warisan sistem output video dan ke arah sistem grafik sumber yang lebih terbuka. Walau bagaimanapun, ini telah datang dengan set cabarannya sendiri. Dokumen ini bertujuan untuk membantu dengan sebarang isu yang mungkin timbul apabila berpindah ke sistem baharu. Kertas putih ini menganggap bahawa Raspberry Pi menjalankan OS Raspberry Pi, dan dikemas kini sepenuhnya dengan perisian tegar dan kernel terkini.
Terminologi
DRM: Direct Rendering Manager, subsistem kernel Linux yang digunakan untuk berkomunikasi dengan unit pemprosesan grafik (GPU). Digunakan dengan kerjasama FKMS dan KMS.
DVI: Pendahulu kepada HDMI, tetapi tanpa keupayaan audio. Kabel dan penyesuai HDMI ke DVI tersedia untuk menyambungkan peranti Raspberry Pi ke paparan yang dilengkapi DVI.
EDID: Data Pengenalan Paparan Lanjutan. Format metadata untuk peranti paparan untuk menerangkan keupayaannya kepada sumber video. Struktur data EDID termasuk nama pengilang dan nombor siri, jenis produk, saiz paparan fizikal dan pemasaan yang disokong oleh paparan, bersama-sama dengan beberapa data yang kurang berguna. Sesetengah paparan boleh mempunyai blok EDID yang rosak, yang boleh menyebabkan masalah jika kecacatan tersebut tidak dikendalikan oleh sistem paparan.
FKMS (vc4-fkms-v3d): Tetapan Mod Kernel Palsu. Walaupun perisian tegar masih mengawal perkakasan peringkat rendah (contohnyaampdan, port Antara Muka Multimedia Definisi Tinggi (HDMI), Antara Muka Bersiri Paparan (DSI), dll), perpustakaan Linux standard digunakan dalam kernel itu sendiri. FKMS digunakan secara lalai dalam Buster, tetapi kini ditamatkan dan memihak kepada KMS dalam Bullseye.
HDMI: Antara Muka Multimedia Definisi Tinggi ialah antara muka audio/video proprietari untuk menghantar data video yang tidak dimampatkan dan data audio digital yang dimampatkan atau tidak dimampatkan.
HPD: Palam panas mengesan. Wayar fizikal yang ditegaskan oleh peranti paparan yang disambungkan untuk menunjukkan ia hadir.
KMS: Tetapan Mod Kernel; lihat https://www.kernel.org/doc/html/latest/gpu/drm-kms.html untuk maklumat lanjut. Pada Raspberry Pi, vc4-kms-v3d ialah pemacu yang melaksanakan KMS, dan sering dirujuk sebagai "pemandu KMS". Tindanan grafik warisan: Tindanan grafik yang dilaksanakan sepenuhnya dalam gumpalan perisian tegar VideoCore yang didedahkan oleh pemacu framebuffer Linux. Tindanan grafik warisan telah digunakan dalam kebanyakan peranti Raspberry Pi Ltd sehingga baru-baru ini; ia kini secara beransur-ansur digantikan oleh (F)KMS/DRM.
Sistem HDMI dan pemacu grafik
Peranti Raspberry Pi menggunakan standard HDMI, yang sangat biasa pada monitor LCD dan televisyen moden, untuk output video. Raspberry Pi 3 (termasuk Raspberry Pi 3B+) dan peranti terdahulu mempunyai port HDMI tunggal, yang mampu menghasilkan output 1920 × 1200 @60Hz menggunakan penyambung HDMI bersaiz penuh. Raspberry Pi 4 mempunyai dua port HDMI mikro, dan mampu menghasilkan output 4K pada kedua-dua port. Bergantung pada persediaan, port HDMI 0 pada Raspberry Pi 4 mampu sehingga 4kp60, tetapi apabila menggunakan dua peranti output 4K anda dihadkan kepada p30 pada kedua-dua peranti. Tindanan perisian grafik, tanpa mengira versi, bertanggungjawab untuk menyoal siasat peranti HDMI yang dilampirkan untuk sifatnya dan menyediakan sistem HDMI dengan sewajarnya. Timbunan Legacy dan FKMS kedua-duanya menggunakan perisian tegar dalam pemproses grafik VideoCore untuk menyemak kehadiran dan sifat HDMI. Sebaliknya, KMS menggunakan sumber terbuka sepenuhnya, pelaksanaan sisi ARM. Ini bermakna asas kod untuk kedua-dua sistem adalah berbeza sepenuhnya, dan dalam beberapa keadaan ini boleh mengakibatkan tingkah laku yang berbeza antara kedua-dua pendekatan. Peranti HDMI dan DVI mengenal pasti diri mereka kepada peranti sumber menggunakan sekeping metadata yang dipanggil blok EDID. Ini dibaca oleh peranti sumber daripada peranti paparan melalui sambungan I2C, dan ini telus sepenuhnya kepada pengguna akhir kerana ia dilakukan oleh timbunan grafik. Blok EDID mengandungi banyak maklumat, tetapi ia digunakan terutamanya untuk menentukan resolusi mana yang disokong oleh paparan, jadi Raspberry Pi boleh disediakan untuk mengeluarkan resolusi yang sesuai.
Cara HDMI ditangani semasa but
Apabila pertama kali dihidupkan, Raspberry Pi melalui beberapa stages, dikenali sebagai but stages:
- Yang pertama-stage, pemuat but berasaskan ROM memulakan GPU VideoCore.
- Detik-stage pemuat but (ini ialah bootcode.bin pada kad SD pada peranti sebelum Raspberry Pi 4, dan dalam SPI EEPROM pada Raspberry Pi 4):
- Pada Raspberry Pi 4, detik-stagpemuat but akan memulakan sistem HDMI, menyoal siasat paparan untuk mod yang mungkin, kemudian menyediakan paparan dengan sewajarnya. Pada ketika ini paparan digunakan untuk menyediakan data diagnostik asas.
- Paparan diagnostik pemuat but (07 Dis 2022 dan seterusnya) akan memaparkan status sebarang paparan yang dilampirkan (sama ada Hotplug Detect (HPD) hadir dan sama ada blok EDID telah dipulihkan daripada paparan).
- Perisian tegar VideoCore (start.elf) dimuatkan dan dijalankan. Ini akan mengambil alih kawalan sistem HDMI, membaca blok EDID daripada sebarang paparan yang dilampirkan dan menunjukkan skrin pelangi pada paparan tersebut.
- But kernel Linux
- Semasa but kernel, KMS akan mengambil alih kawalan sistem HDMI daripada perisian tegar. Sekali lagi blok EDID dibaca dari mana-mana paparan yang dilampirkan, dan maklumat ini digunakan untuk menyediakan konsol dan desktop Linux.
Masalah dan gejala yang mungkin berlaku
Simptom kegagalan yang paling biasa dialami apabila berpindah ke KMS ialah but pada mulanya baik, dengan skrin pemuat but dan kemudian skrin pelangi muncul, diikuti selepas beberapa saat dengan paparan menjadi hitam dan tidak hidup semula. Titik di mana paparan menjadi hitam sebenarnya adalah titik semasa proses but kernel apabila pemacu KMS mengambil alih menjalankan paparan daripada perisian tegar. Raspberry Pi sedang berjalan dalam semua aspek kecuali untuk output HDMI, jadi jika SSH didayakan maka anda sepatutnya boleh log masuk ke peranti melalui laluan itu. LED akses kad SD hijau biasanya akan berkelip sekali-sekala. Ia juga mungkin bahawa anda tidak akan melihat keluaran HDMI sama sekali; tiada paparan pemuat but, dan tiada skrin pelangi. Ini biasanya boleh dikaitkan dengan kerosakan perkakasan.
Mendiagnosis kesalahan
Tiada output HDMI sama sekali
Ada kemungkinan peranti itu tidak dibut sama sekali, tetapi ini di luar bidang kuasa kertas putih ini. Dengan mengandaikan bahawa tingkah laku yang diperhatikan adalah masalah paparan, kekurangan output HDMI semasa mana-mana bahagian proses but biasanya disebabkan oleh kerosakan perkakasan. Terdapat beberapa pilihan yang mungkin:
- Kabel HDMI rosak
- Cuba kabel baharu. Sesetengah kabel, terutamanya yang sangat murah, mungkin tidak mengandungi semua talian komunikasi yang diperlukan (cth palam panas) untuk Raspberry Pi berjaya mengesan paparan.
- Port HDMI rosak pada Raspberry Pi
- Jika anda menggunakan Raspberry Pi 4, cuba port HDMI yang lain.
- Port HDMI rosak pada monitor
- Kadangkala port HDMI pada monitor atau TV boleh haus. Cuba port lain jika peranti mempunyai satu.
- Jarang sekali, peranti paparan hanya boleh memberikan data EDID apabila dihidupkan atau apabila port yang betul dipilih. Untuk menyemak, pastikan peranti dihidupkan dan port input yang betul dipilih.
- Peranti paparan tidak menegaskan talian pengesan palam panas
Keluaran awal, kemudian skrin menjadi hitam
Jika paparan muncul tetapi kemudian padam semasa but kernel Linux, terdapat beberapa kemungkinan penyebab, dan ini biasanya berkaitan dengan masalah membaca EDID daripada peranti paparan. Seperti yang dapat dilihat daripada bahagian di atas yang berkaitan dengan jujukan but, EDID dibaca pada beberapa titik yang berbeza semasa proses but, dan setiap bacaan ini dilakukan oleh perisian yang berbeza. Pembacaan akhir, apabila KMS mengambil alih, dijalankan oleh kod kernel Linux huluan yang tidak diubah, dan ini tidak mengendalikan format EDID yang rosak serta perisian perisian tegar yang lebih awal. Inilah sebabnya mengapa paparan boleh berhenti berfungsi dengan betul sebaik sahaja KMS mengambil alih. Terdapat beberapa cara untuk mengesahkan sama ada KMS gagal membaca EDID, dan dua daripadanya adalah seperti berikut.
Semak skrin diagnostik pemuat but (Raspberry Pi 4 sahaja)
NOTA
Diagnostik pemuat but memerlukan pemuat but terkini. Anda boleh menaik taraf kepada versi terkini menggunakan arahan ini: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader Keluarkan kad SD dan but semula Raspberry Pi. Tekan ESC pada skrin Pasang OS, dan skrin diagnostik akan muncul pada peranti paparan. Harus ada garisan pada paparan yang bermula dengan paparan: — contohnyaample:
- paparan: DISP0: HDMI HPD=1 EDID=ok #2 DISP1: HPD=0 EDID=tiada #0
Output daripada Raspberry Pi 4 ini menunjukkan bahawa sistem mengesan paparan HDMI pada port HDMI 0, pengesan palam panas ditegaskan dan EDID telah dibaca OK. Tiada apa-apa ditemui pada port HDMI 1.
Semak sama ada sistem KMS mengesan EDID
Untuk menyemak ini, anda perlu log masuk ke peranti Raspberry Pi melalui SSH daripada komputer lain. SSH boleh didayakan apabila mencipta imej kad SD dengan Raspberry Pi Imager, menggunakan pilihan Tetapan Lanjutan. Mendayakan SSH pada kad SD yang telah diimej adalah sedikit lebih rumit: anda perlu menggunakan komputer lain untuk menambah file dinamakan ssh kepada partition boot. Gantikan kad SD dalam Raspberry Pi asal dan kuasakannya. Ini sepatutnya membolehkan SSH, dengan alamat IP yang diperuntukkan oleh DHCP. Setelah log masuk, taip yang berikut pada gesaan terminal untuk memaparkan kandungan mana-mana EDID yang dikesan (anda mungkin perlu menukar HDMI-A-1 kepada HDMI-A-2 bergantung pada port HDMI mana pada Raspberry Pi peranti paparan disambungkan kepada): cat /sys/class/drm/card?-HDMI-A-1/edid Jika tiada folder bernama kad?-HDMI-A-1 atau serupa, kemungkinan besar tiada EDID boleh dibaca daripada paparan peranti.
NOTA
Dalam kes di mana EDID berjaya dibaca, terdapat maya yang berguna file dalam folder yang sama, dipanggil mod, yang apabila dipaparkan menunjukkan semua mod yang mungkin EDID mendakwa peranti menyokong.
Mitigasi
Hotplug mengesan kegagalan Jika kedua-dua perisian tegar dan KMS gagal menemui monitor yang dilampirkan, ia boleh menjadi kegagalan pengesanan palam panas — iaitu, Raspberry Pi tidak mengetahui peranti telah dipalamkan, jadi ia tidak menyemak EDID. Ini mungkin disebabkan oleh kabel yang buruk, atau peranti paparan yang tidak menegaskan palam panas dengan betul. Anda boleh memaksa pengesan hotplug dengan mengubah baris arahan kernel file (cmdline.txt) yang disimpan dalam partition but kad SD Raspberry Pi OS. Anda boleh mengedit ini file pada sistem lain, menggunakan apa sahaja editor yang anda suka. Tambahkan yang berikut pada penghujung cmdline.txt file: video=HDMI-A-1:1280×720@60D Jika anda menggunakan port HDMI kedua, gantikan HDMI-A-1 dengan HDMI-A-2. Anda juga boleh menentukan resolusi dan kadar bingkai yang berbeza, tetapi pastikan anda memilih resolusi yang disokong oleh peranti paparan.
NOTA
Dokumentasi pada tetapan baris arahan kernel untuk video boleh didapati di sini: https://www.kernel.org/doc/Documentation/fb/modedb.txt
AMARAN
Tindanan grafik yang lebih lama menyokong penggunaan entri config.txt untuk menetapkan pengesan palam panas, tetapi pada masa penulisan ini tidak berfungsi dengan KMS. Ia mungkin disokong dalam keluaran perisian tegar masa hadapan. Entri config.txt ialah hdmi_force_hotplug dan anda boleh menentukan port HDMI tertentu yang digunakan oleh hotplug menggunakan sama ada hdmi_force_hotplug:0=1 atau hdmi_force_hotplug:1=1. Ambil perhatian bahawa tatanama untuk KMS merujuk kepada port HDMI sebagai 1 dan 2, manakala Raspberry Pi menggunakan 0 dan 1.
masalah EDID
Sebilangan kecil peranti paparan tidak dapat mengembalikan EDID jika ia dimatikan, atau apabila input AV yang salah dipilih. Ini boleh menjadi isu apabila Raspberry Pi dan peranti paparan berada pada jalur kuasa yang sama, dan peranti Raspberry Pi but lebih cepat daripada paparan. Dengan peranti seperti ini, anda mungkin perlu menyediakan EDID secara manual. Lebih luar biasa, sesetengah peranti paparan mempunyai blok EDID yang diformat dengan teruk dan tidak boleh dihuraikan oleh sistem EDID KMS. Dalam keadaan ini, adalah mungkin untuk membaca EDID daripada peranti dengan resolusi yang serupa dan menggunakannya. Dalam kedua-dua kes, arahan berikut menetapkan cara membaca EDID daripada peranti paparan dan mengkonfigurasi KMS untuk menggunakannya, bukannya KMS cuba menyoal siasat peranti itu secara langsung.
Menyalin EDID ke a file
Mencipta a file mengandungi metadata EDID dari awal biasanya tidak boleh dilaksanakan, dan menggunakan yang sedia ada adalah lebih mudah. Secara umumnya adalah mungkin untuk mendapatkan EDID daripada peranti paparan dan menyimpannya pada kad SD Raspberry Pi supaya ia boleh digunakan oleh KMS dan bukannya mendapatkan EDID daripada peranti paparan. Pilihan paling mudah di sini adalah untuk memastikan peranti paparan berfungsi dan berfungsi serta pada input AV yang betul, dan Raspberry Pi telah memulakan sistem HDMI dengan betul. Dari terminal, anda kini boleh menyalin EDID ke a file dengan arahan berikut: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat Jika atas sebab tertentu EDID tidak hadir, anda boleh but peranti dalam bukan -Mod KMS yang berjaya dalam but ke desktop atau konsol, kemudian salin EDID yang perisian tegar akan (mudah-mudahan) berjaya membaca ke file.
- But ke mod grafik lama.
- Edit config.txt dalam partition but, pastikan anda menjalankan editor anda menggunakan sudo dan tukar baris yang mengatakan dtoverlay=vc4-kms-v3d kepada #dtoverlay=vc4-kms-v3d.
- But semula.
- Desktop atau konsol log masuk kini sepatutnya muncul.
- Menggunakan terminal, salin EDID daripada peranti paparan yang dilampirkan ke a file dengan arahan berikut:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
Menggunakan a file-based EDID dan bukannya menyoal siasat peranti paparan Edit /boot/cmdline.txt, pastikan anda menjalankan editor anda menggunakan sudo, dan tambah yang berikut pada baris arahan kernel: drm.edid_firmware=myedid.dat Anda boleh menggunakan EDID pada port HDMI khusus seperti berikut: drm.edid_firmware=HDMI-A-1:myedid.dat Jika perlu, but semula ke mod KMS dengan melakukan perkara berikut:
- Edit config.txt dalam partition but, pastikan anda menjalankan editor anda menggunakan sudo dan tukar baris yang mengatakan #dtoverlay=vc4-kms-v3d kepada dtoverlay=vc4-kms-v3d.
- But semula.
NOTA
Jika anda menggunakan a file-based EDID, tetapi masih mempunyai masalah dengan hotplug, anda boleh memaksa pengesanan hotplug dengan menambahkan yang berikut pada baris arahan kernel: video=HDMI-A-1:D.
Dokumen / Sumber
![]() |
RaspberryPi KMS Pemacu Grafik Output HDMI [pdf] Manual Pengguna KMS, Pemacu Grafik Output HDMI, Output HDMI KMS, Pemacu Grafik, Pemacu Grafik Output HDMI KMS, Pemacu |