1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZynqMP 向け Ubuntu22.04で Lima を動かしてみた(概要編)

Last updated at Posted at 2022-10-10

はじめに

Lima とは Mali-400/450 用のオープンソースなグラフィックドライバです。筆者は Lima を ZynqMP 向け Ubuntu 22.04 で試験的に動かしてみました。動かすのに少々苦労したので、その方法を何回かに分けて説明します。

この記事では、Lima を動かすための予備知識として、DRI(Direct Rendering Infrastructure) を説明した後、Lima を動かすために必要な DRI コンポーネントについて説明します。

DRIとは

Lima の説明をする前に、まず、DRI(Direct Rendering Infrastructure) の説明をします。

DRI は Linux 上でハードウェアアクセラレーションによる3Dグラフィックを可能にするためのソフトウェアアーキテクチャです。具体的には、DRI は Linux カーネル、Xウィンドウシステム、3D グラフィックハードウェア、および OpenGL ベースのレンダリングエンジンを調整します。DRI に関する詳しい情報は以下の URL を参照してください。

DRI コンポーネント

DRI は単一のソフトウェアではなく、いくつかのコンポーネントで構成されています。

Fig.1 DRI Components

Fig.1 DRI Components


 libGL

OpenGL ベースのプログラムは libGL ライブラリとリンクする必要があります。libGL は OpenGL API のエントリーポイントだけでなく、GLX インターフェースも実装しています。

ダイレクトレンダリングを使用する場合、libGL は適切な DRI ドライバをロードしてOpenGL ライブラリへの呼び出しを直接 DRI ドライバにディスパッチします。

 DRI ドライバ

DRI ドライバは基本的に、OpenGL コマンドシーケンスをハードウェアコマンドに変換し、Linux カーネルのDRMドライバを使用してコマンドをハードウェアに送信します。DRI ドライバは、DRM がカーネル空間で必要なことをすべて実行する間、ユーザー空間で可能な限り多くの処理を行います。

 DRM ドライバ

DRM(Direct Rendering Manager) ドライバは DRI の Linuxカーネル部分のコンポーネントです。 GPU にアクセスするためのインターフェース(DRM API) を提供します。また、KMS(Kernel Mode Setting) をサポートする場合もあります。KMS はカーネル空間側でディスプレイの解像度や色深度を設定するモジュールです。

 X-Server DRI 拡張

Xorg が提供する X-Server は DRI に対応するための拡張機能(extension) を持っています。DRI 拡張機能は他の DRI コンポーネント(libGL や DRMドライバ)間の通信に使用されます。

Lima とは

Limaは ARMのMali-400/450組み込みGPUをサポートするオープンソースのグラフィックスドライバーです。Lima に関する詳しい情報は以下の URL を参照してください。

Fig.2 のシェードをかけた部分が示すように、Limaは 大きくわけて DRM Lima と DRI Lima の二つで構成されています。DRM Lima は Linux カーネルのDRMドライバです。DRI Lima はMesa(オープンソースな OpenGL 実装)のDRIドライバです。

Fig.2 DRM Lima and DRI Lima

Fig.2 DRM Lima and DRI Lima


DRM Lima は linuxカーネル5.2で、DRI Lima は Mesa 19.1でそれぞれのメインラインにアップストリームされました。

Lima を動かすための DRI コンポーネント

ZynqMP + Ubuntu 22.04 で Lima を動かすためには、前述の DRM Lima と DRI Lima を追加するだけではダメでした。DRM Xlnx と DDX armsoc-xlnx にも手を入れなければなりませんでした。

Fig.3 DRI Components for running Lima

Fig.3 DRI Components for running Lima


つまり、ZynqMP + Ubuntu 22.04 で Lima を動かすためには次の4つのコンポーネントが関わってきます。(似たような名称が並んでいて紛らわしい反面、語呂が良い)

  1. DRM Lima - Linux DRM(Direct Rendering Manager) Driver for Lima
  2. DRI Lima - Mesa DRI(Direct Rendering Infrastructure) Driver for Lima
  3. DRM Xlnx - Linux DRM(Direct Rendering Manager) Driver for Xlnx
  4. DDX Xlnx - Xorg DDX(Device Dependent X) Driver for armsoc-xlnx

Mali GPUはレンダリング専用であり、ディスプレイの制御用ではないことに注意してください。ZynqMP にはディスプレイ出力を制御するための独自のディスプレイエンジン(zynqmp_dpsub)があります。したがって、Mali GPUによってレンダリングされたコンテンツをディスプレイに表示するには、zynqmp_dpsub を制御するDRM Xlnx が必要です。

X-Server の DRI 拡張に対応するためには、DDX ドライバが DRI に対応している必要があります。具体的には、DRMドライバが提供するバッファを他の DRI コンポーネントと共有するための仕組みを提供していなければなりません。この仕組みには DRI2 と DRI3 があるのですが、Lima の場合は DRI3 でなければ動作しませんでした。ここらへんの詳細は共有バッファ編およびストライド問題編で説明します。

参考

ブートイメージ

以下の URL にLima に対応した Ultra96/Ultra96-V2/KV260 向け Ubuntu22.04 のブートイメージを提供しています。使ってみたい人は注意事項を確認のうえインストールしてみてください。

旧記事

この記事は次の記事を加筆修正したものです。

その他

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?