現在、Linuxカーネルバージョンlinux-imx-5.10.9を搭載したimx8mp evk開発ボードを使用しています。HDMIインターフェースを使用すると、デフォルトの出力が1080p@60pになっていることに気づきました。HDMI出力を4Kにするには、カーネルをどのように修正すればよいでしょうか?
わかりました。ありがとうございます。
問題の核心は、私たちが医療機器メーカーであるということです。以前のユーザーインターフェースはQTで開発しており、プラットフォームはIMX6とIMX7でした。現在、ハイエンド製品ラインではIMX8を使用しています。以前のコードはすべてFB(Framework Builder)ベースでした。今DRMに切り替えると、非常にコストがかかります…。さて、さらに調査して、ソースコードの該当部分を修正し、接続/切断されたディスプレイの数に応じて異なる数のFBXインスタンスを作成できるかどうか確認してみます。
デスクトップシステムではfb0は使用されず、代わりにdrmノードが使用されます。fb0は使用可能ですが、推奨しません。主流のアプローチはdrmフレームワークです。
カーネル内のfb0生成に関するソースコードには触れていません。BSPと全く同じです。ソースコードはDRMフレームワークを使って1つのfb0を生成するだけで、それだけです。接続された画面の数に関係なく、常に同じfbになります。
つまり、LVDSポートとHDMIポートが接続されていて、解像度が異なっているにもかかわらず、カーネルはLVDSの解像度に基づいてバッファを割り当てているのです。HDMIとLVDSは同じバッファをディスプレイに使用しているため、HDMIディスプレイに不具合が発生しているのでしょうか?これは困ったものです…
HDMIなら解像度が自動的に切り替わると思っていました。
-->DRM APIは異なるCRTCでのバッファ割り当てを許可していますが、fb0に直接書き込むと、表示の不一致という問題が発生します。アプリケーション層で割り当てるバッファは、LVDS解像度のバッファなど、特定の画面用です。バッファに書き込むと、基盤となるドライバは単にこのバッファをLCDコントローラに渡すだけで、ドライバ層はバッファの調整を行いません。そのため、解像度に関係なく、バッファの正確なサイズが表示されます。
デュアルスクリーン同時表示を実現したいと考えています。Qtはfb0に画像データを書き込み、fb0内の画像データを1200*768のLVDSと1920*1080のHDMIに同時に表示したいと考えています。これは不可能だと思いますか?現在、QtはEGFLSを使用しています。同時表示を実現するには、DRMによって生成されたcardXノードを直接操作するEGFLS-KMSを使用する必要がありますか?
私のLVDS画面は現在1200*768ですが、HDMIは最大1920*1080の解像度をサポートしています。つまり、LVDSとHDMIの両方を正しく表示するには、HDMIの解像度を手動で1200*768またはそれに近い解像度に設定する必要があるということですか?HDMIは解像度を自動的に切り替えると思っていました。HDMIディスプレイ設定では、現在の画面解像度は1920*1080で、HDMIに表示される画像は左上隅のみで、サイズはLVDSとほぼ同じです。
テスト済みで4Kを自動認識できます。
LVDS と HDMI は、同じ DRM フレームワークによって生成された同じ FB0 ノードを共有します。
解像度は1つしか設定できないのでしょうか?fb0を共有する場合、LVDSとHDMIの画面解像度は同じになりますか?
解決策はありますか?現在、別の問題が発生しています。LVDSとHDMIは、同じDRMフレームワークによって生成された同じFB0ノードを共有しています。LVDSとHDMIの両方を接続すると、HDMIに表示される画像サイズはLVDSと同じになり、HDMIディスプレイ全体を埋め尽くしません。何が起こっているのでしょうか?
私も同じ状況に遭遇しています。後で解決策をお伝えします。
L5.10.35_2.0.0 のデモイメージを書き込み、2K および 4K 画面で試してみましたが、1080p しか表示できません。
Modetest を使用すると、HDMI 出力の最大解像度は 1920x1080@60 であり、4K 解像度はありません。
HDMIディスプレイは適応型解像度を使用します。L5.10.35_2.0.0のデモ画像をお試しください。