DRM 表示フレームワークを理解しました

DRM とは:

DRM の正式名称は DirectRenderingManager で、Linux の主流の表示フレームワークであり、マルチレイヤ構成をサポートし、ユーザーレイヤが GPU にアクセスして一元管理を実現するための統合 API (libdrm) を提供します。これは、複数のプログラムがビデオ カードにアクセスし、共同リソースを使用するという問題を解決するために作成されました。DRM は単純に 3 つのモジュールに分割できます。

  • libdrm:上位層に汎用APIを提供し、画像表示や画像処理のための各種ioctlインターフェースを下位層にカプセル化するライブラリです。もちろん、drmのioctlやフレームバッファを利用して画像を操作・表示することも可能です。
  • GEM: メモリ管理。主にディスプレイ バッファの割り当てと解放、ビデオ メモリの共有と処理 CPU、GPU メモリの同期を担当します。
  • KMS: カーネル モード設定。画面とパラメータ設定を更新し、グラフィックス カードの構成を完了し、ハードウェア GPU 操作をインターフェイス層でカプセル化するために使用されます。フレームバッファ、CRTC、プレーン、エンコーダ、コネクタ、その他のモジュールに抽象化できます。

DRM フレームワーク図:

KMS フレームワークは次のもので構成されます。

  • フレームバッファ: 表示された画像データを保存するメモリ領域。ドライバーとアプリケーション層の両方からアクセスでき、解像度、カラー モード (yuv、rgb) などの情報が保存されます。
  • crtc: 表示タイミングや解像度などの表示制御を行い、Framebuffer のデータをスキャンして読み出し、重畳された Plane の内容を Encoder に送信します。vop (Video Output Processor) では、lcdc コントローラーです。
  • プレーン: フレームバッファと同様、メモリの一部、ハードウェア イメージ レイヤーであり、イメージ レイヤーは 1 つ以上のプレーンで構成されます。携帯電話の異なるインターフェースを重ね合わせるのもこの原理です。飛行機には次の 3 種類があります。
    • DRM_PLANE_TYPE_PRIMARY: プライマリ レイヤ、背景または画像コンテンツを表示します。
    • DRM_PLANE_TYPE_OVERLAY: 表示オーバーレイ、スケーリング用
    • DRM_PLANE_TYPE_CURSOR: マウスの表示に使用されます
  • エンコーダ: エンコーダは、受信データをさまざまな信号 (mipi、edp、vga など) に変換します。
  • コネクタ: edp、hdmi、mipi などの特定の外部インターフェイスは物理ディスプレイ出力デバイスに接続され、EDID、ビデオ モードなどの出力デバイスの関連情報を保存します。

        一般的なプロセスは、ユーザーが表示されたデータをフレームバッファに入力し、libdrm インターフェイスを介して VOP デバイスに通知することです (crtc) VOP ドライバーは、フレームバッファとプレーンのデータを重ね合わせ、標準の LCDC タイミング シーケンスに変換します。そしてそれを特定の mipi、edp、vga、その他の信号に変換して、コネクタのディスプレイ出力に送ります。

KMS フレーム図:

おすすめ

転載: blog.csdn.net/weixin_42432281/article/details/124837273