DRM アーキテクチャの概要 (1)

1. DRM (Direct Rendering Manager)の紹介

従来の Linux ディスプレイ デバイス ドライバを開発する場合、通常は FB ドライバ アーキテクチャが使用されます. グラフィックス カードのパフォーマンス アップグレード: ディスプレイ オーバーレイ (メニュー レベル), GPU アクセラレーション, ハードウェア カーソル, 従来の FB アーキテクチャはそれを十分にサポートできません. さらに,複数アプリのアクセス競合もうまく制御できません。このコンテキストで、DRM アプリケーションが誕生します。

DRM は、Linux カーネル内のグラフィックス カードとのやり取りを担当する管理フレームワークであり、ユーザー空間は、DRM が提供する API を簡単に使用して、3D レンダリング、ビデオ デコーディング、および GPU コンピューティングを実現できます。

1.1 DRM 開発の歴史

  • 1999 年、Precision Insight は、3DFX のグラフィック カードによりよく適応するために、XFree86 4.0 サーバー用の DRI ディスプレイ フレームワークを初めて開発しました. DRM コードの最初のバージョンが作成された後、次の数年で、DRM によってサポートされるグラフィック カードのリストが作成されました。継続的に更新されています。

  • 2008 年 10 月、Linux カーネル 2.6.27 は大幅なソース コードの再編成を受けました。DRM のソース コード全体が /drivers/gpu/drm/ ディレクトリに配置され、異なる GPU メーカーのコードもそれぞれのサブディレクトリに配置されました。

  • 2014 年 6 月、Atomic API が Linux 3.16 に追加され、多くのドライバーがこれらの新しい API を使用するように切り替えられました。

  • 2018 年には、atomic フレームワークに基づく 10 個の新しい DRM ドライバーが Linux カーネルに追加されました。

1.2 FB アーキテクチャと比較した DRM アーキテクチャの利点

DRM は現在 Linux の主流のグラフィックス ディスプレイ フレームワークです. 従来の FB アーキテクチャと比較して, DRM は複数のプログラムがビデオ ハードウェア リソースを同時に使用することを可能にし, 複数のプログラムのリソース要求とアクセスを管理します. 要約すると, DRM はより適応性がありますハードウェアと DRM の利点は、主に次の点に反映されています。

  • DRM はマルチレイヤー構成をネイティブでサポートしていますが、FB はマルチレイヤー構成をネイティブでサポートしていません。

  • FB は VSYNC、DMA-BUF、非同期更新、およびフェンス メカニズムをサポートしていませんが、DRM はそれらすべてをネイティブにサポートしています。

  • DRM は GPU とディスプレイ ドライバーを統合的に管理し、ソフトウェアのアップグレード、メンテナンス、および管理をより便利にします。

917e0274c21a7d36d69d2a2495b1aa68.png

1.3 DRM グラフィック表示フレームワーク

DRM によって検出された各 GPU は DRM デバイスとして使用され、デバイス ファイル /dev/dri/cardX が作成され、それに接続されます. 全体的なアーキテクチャの観点から、主に 3 つの主要な部分に分けられます。

  • libdrm (インターフェース ライブラリ)

基礎となるインターフェイスをカプセル化し、共通の API インターフェイスを上位層に提供します。主に、さまざまな IOCTL インターフェイスをカプセル化して、再利用とコード共有を容易にします。

  • KMS (カーネルモード設定)

通常の作業では、グラフィック カードまたはグラフィック アダプタのモードを設定する必要があります。これは、主に次の 2 つの側面に反映されます。

画面更新:表示バッファの切り替え、多層合成方式の制御、各層の表示位置。

表示パラメータの設定: 解像度、リフレッシュ レート、電源ステータス (スリープからの復帰) などを含みます。

  • GEM (グラフィックス実行マネージャー)

主にバッファの割り当てと解放の表示を担当するメモリ管理メソッドを提供します。

f51c2afd260f83da10e3d7eeff85c743.png

図 1.1 DRM グラフィック表示フレームワークの概要

画像ソース: https://en.wikipedia.org/wiki/Direct_Rendering_Manager#/media/File:DRM_architecture.svg

1.4 DRM グラフィック表示フレームワークには要素が含まれる

この章では、DRM フレームワークのいくつかの重要なモジュールの機能と、表示リンクにおけるそれらの役割を紹介します. 次の図は、DRM を画面表示に呼び出す APP のフローチャートを示しています.

3d0b13cca16dcc06645d26f50e83e8fc.png

図 1.2 DRM グラフィック表示フレームワークのブロック図

次の表は、DRM の KMS および GEM モデルのさまざまなコンポーネントの概要を示しており、アーキテクチャとプロセスの間の対応を深めるために、Qualcomm プラットフォーム コード レベル間の対応関係の説明によって補足されています。

67e5a27e63e43ed1e3b11946f33601fc.png

2. DRM ドライバー フレームワーク

2.1 DRM ドライバ オブジェクトの紹介

DRM 内のオブジェクトは、DRM フレームワークのコアです. 下の図の青い部分は物理ハードウェアの抽象化であり、茶色の部分はソフトウェアの抽象化です. GEM 構造は: drm_gem_object であり、残りは構造内にありますdrm_mode_object。

PS: drm_panel はオブジェクト カテゴリに属しません。これは、LCD ドライバーとエンコーダー ドライバーの間の結合を減らすためのコールバック関数の集まりです。

0d0873815f03479f2a11b83de3cd3f9e.png

図 2.1 DRM コア コンポーネントの紹介

2.2 DRM 抽象ハードウェアが DRM オブジェクトとどのように関連付けられるか

DRM オブジェクトを理解することは難しくありません.実際のハードウェアとこれらのオブジェクトをどのように関連付けるかが重要です.以下では MIPI DSI インターフェイスを例にソフトウェア アーキテクチャと DRM オブジェクトの対応を紹介します.

5a4a48de8293dc6a970295038bdd55ea.png

図 2.2 MIPI DSI インターフェースの典型的なハードウェア接続図

af6cc2c905ab276a26ab178c5fa1ca9b.png

図 2.3 ハードウェアと DRM オブジェクトの対応

その中で、コンポーネントの説明:

6278fb51d24e80d445767dae71e9bd07.png

3. DRMの簡単な例

DRM コードは非常に大きく、グラフィックス カードのロジックも非常に複雑であるため、DRM アーキテクチャを学習するには、DRM プロセスを実践を通じて理解し、半分の労力で 2 倍の結果を達成する必要があります。

以下では、モード設定のケースで DRM アーキテクチャのプロセスを分析します。モードセットの主なプロセスは次のとおりです。

31c3601f30bde81bc617d21c32fc8b2a.png

図 3.1 DRM Modeset プロセスの概要

3.1 DRM デバイスファイルを開く

DRM フレームワークが正常にロードされると、デバイス ファイル /dev/dri/card0 が作成され、上位層のユーザー アプリケーションは、このファイル ノードを介してグラフィックス カードのさまざまな操作を取得できます。

288dc23caafe67a9ad6e1cf342b97e43.png

3.2 グラフィックス カードのリソース ハンドルを取得する

DRMデバイスファイルを開いた後、以下の関数でグラフィックカードのリソースハンドルを取得し、グラフィックカードのリソースを操作します。

bde827b8c846f3e4078a5f3c4a79fd45.png

3.3 コネクタ ID を取得する

drmModeRes を取得したら、その接続オブジェクトを取得します。

f635338749315ad42a9a83a1e9e7c08c.png

3.4 FrameBuffer の作成

FrameBuffer を作成したら、メモリの一部をマップし、メモリをピクセル データで埋めます。

e8805bc2cff6f753c19967570493d25b.png

3.5 Crtc モードの設定

FB が正常に作成され、0 にクリアされます。任意のデータを入力できます。CRTC を設定した後、FB の内容を画面に表示できます。

CRTC モード設定関数: drmModeSetCrtc()、パラメータ: fd、crtc ハンドル、FB ハンドル、X\Y 座標など

8e6d7f0419c5559eb7cf3a5f31fb8dee.png

3.6 リソースのクリーンアップ (不要)

表示が完了した後、GUI は引き続き実行されます。通常、リソースのクリーンアップを実装する必要はありません。

37e51d3cf59bd9779681b4242841d80e.png

章のまとめ

この記事では、開発の歴史、駆動フレームワーク、および DRM アーキテクチャの簡単な例を紹介します. コード プロセスを整理するための要件と、後続の章でもこの部分について説明します.

さらに、DRM アーキテクチャは、ますます強力になっている最新のディスプレイ デバイスに準拠していますが、FB のサポートを必要とする古いデバイスやソフトウェアがまだたくさんあります.現在の DRM フレームワークには、FB デバイスをシミュレートするコードがあります.drivers/gpu/drm を参照してください. /xxx/drv .c ファイルは、デバイス ディレクトリ /dev/fb0 に表示されます。

参照

1.https://www.kernel.org/doc/html/latest/gpu/index.html 

Linux GPU ドライバー開発者ガイド

2. https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#kms-properties     

カーネルモード設定 (KMS)

d9815bbd5f6b15dada11f8635d39855c.gif

長押しでカーネル職人のWeChatをフォロー

Linux Kernel Black テクノロジー | 技術記事 | 注目のチュートリアル

おすすめ

転載: blog.csdn.net/feelabclihu/article/details/128046828