はじめに
筆者は Ultra96/Ultra96-V2(ZynqMP) 向けに Debian GNU/Linux を提供しています1。提供している Debian GNU/Linux は CUI ベースですが、今回 GUI に対応するために X Window Systemを Ultra96/Ultra96-V2 で動くようにしました。
そこで Ultra96/Ultra96-V2 で X Window System を動かすための手順を幾つかのパートに分けて説明します。
X Window System の構造
X Window System を動かすためのグラフィックスタックは一般的に Fig.1のようになります。
グラフィックスタック
Fig.1 X Window System Graphics Stack
このグラフィックスタックをUltra96/Ultra96-V2(ZynqMP) に適応すると次のようになります。シェードがかかっているブロックが ZynqMP 独自の部分です。
Fig.2 X Window System Graphics Stack for ZynqMP
ZynqMP 独自に用意しなければならないモジュールは次の4つです。
- DRM Driver(ZynqMP Display Driver(xlns_drv))
- Video Driver(xserver-xorg-video-armsoc-xilinx)
- GPU(Mali) Kernel Module
- OpenGL Driver(LibMali)
以降の節でこれらモジュールを簡単に紹介します。
ZynqMP Display Driver(xlnx_drv)
ZynqMP の DisplayPort Controller を制御するためのカーネルモジュールです。このカーネルモジュールは User Space のプログラムに対して DRI(Direct Rendering Infrastructure) および fbdev(Linux Framebuffer Device) Interfaceを提供します。このカーネルモジュールとそれに対応したデバイスツリーはすでにZynqMP-FPGA-Linux に標準で組み込まれています。そのため、別途ビルドやインストールは必要ありません。
Fig.3 ZynqMP Display Driver(xlnx_drv)
Video Driver(xserver-xorg-video-armsoc-xilinx)
ZynqMP Display Driver に対応した X Window の DDX Driver(Video Driver) です。このドライバは Debian 10 が標準で提供するパッケージには含まれていません。別途追加する必要があります。このドライバの詳細は Video Driver 編 で説明します。
Fig.4 xserver-xorg-video-armsoc-xilinx
Mali Kernel Module
ZynqMP の GPU(Mali-400)を制御するためのカーネルモジュールです。このカーネルモジュールは ZynqMP-FPGA-Linuxには標準では組み込まれていません。ただし、デバイスツリーはすでに標準で組み込まれています。GPU を使って 3D レンダリングする場合はこのカーネルモジュールを新たにビルドして追加する必要があります。このカーネルモジュールを Debian Package にしてインストールする手順を Mali Driver 編 で説明します。
Fig.5 Mali Kernel Module
LibMali(User Space Libraries for Mali)
GPU(Mali-400) で 3D レンダリングするためのユーザー空間で動作するライブラリです。OpenGL ES 2.0に対応しています。GPU を使って 3D レンダリングする場合はこのライブラリが必要です。このライブラリは ARM よりバイナリで提供されています。このバイナリのライブラリを Debian Package にしてインストールする手順を LibMali 編 で説明します。
Fig.6 LibMali(User Space Libraries for Mali)
Debian Packages
ZynqMP-FPGA-Xserver
ZynqMP-FPGA-Linux で X Window System を構成するための Debian Package は以下の github で提供しています。
上のリポジトリで次の Debian Package を提供しています。
- xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb
- libegl1-zynqmp-dev_1.7-0_arm64.deb
- libegl1-zynqmp_1.7-0_arm64.deb
- libgbm-zynqmp-dev_1.7-0_arm64.deb
- libgbm1-zynqmp_1.7-0_arm64.deb
- libgles1-zynqmp-dev_1.7-0_arm64.deb
- libgles1-zynqmp_1.7-0_arm64.deb
- libgles2-zynqmp-dev_1.7-0_arm64.deb
- libgles2-zynqmp_1.7-0_arm64.deb
- libmali-zynqmp-dev_1.7-0_arm64.deb
- libmali-zynqmp_1.7-0_arm64.deb
- zynqmp-gpu-4.19.0-xlnx-v2019.1-zynqmp-fpga_0.1.2-0_arm64.deb
xf86-video-armsoc-xilinx
ZynqMP Display Driver に対応した X Window の DDX Driver(Video Driver) のDebian Package をビルドするためのリポジトリは以下にあります。
このリポジトリから以下の Debian Package をビルドすることが出来ます(このリポジトリには Debian Package は含まれません)。
- xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb
LibMali(User Space Librarys for Mali)
GPU(Mali-400) で 3D レンダリングするためのユーザー空間で動作するライブラリを Debian Package にするリポジトリは以下にあります。
このリポジトリから以下の Debian Package をビルドすることが出来ます(このリポジトリには Debian Package は含まれません)。
- libegl1-zynqmp-dev_1.7-0_arm64.deb
- libegl1-zynqmp_1.7-0_arm64.deb
- libgbm-zynqmp-dev_1.7-0_arm64.deb
- libgbm1-zynqmp_1.7-0_arm64.deb
- libgles1-zynqmp-dev_1.7-0_arm64.deb
- libgles1-zynqmp_1.7-0_arm64.deb
- libgles2-zynqmp-dev_1.7-0_arm64.deb
- libgles2-zynqmp_1.7-0_arm64.deb
- libmali-zynqmp-dev_1.7-0_arm64.deb
- libmali-zynqmp_1.7-0_arm64.deb
Mali Kernel Module
ZynqMP の GPU(Mali-400)を制御するためのカーネルモジュールを Debian Package にするリポジトリは以下にあります。
このリポジトリから以下の Debian Package をビルドすることが出来ます(このリポジトリには Debian Package は含まれません)。
- zynqmp-gpu-4.19.0-xlnx-v2019.1-zynqmp-fpga_0.1.2-0_arm64.deb
インストール
ZynqMP に対応した X Window System には大きく分けて次の3種類あります。
- fbdev のみ
- Video Driver のみ
- Video Driver + GPU
fbdev のみ
X Window System には fbdev(Linux Framebuffer Device) を使って表示するためのドライバが標準でついています。この場合のインストール方法は以下の記事を参照してください。
Video Driver のみ
ZynqMP Display Driver に対応した X Window の DDX Driver(Video Driver) を使って表示する方法です。ただし GPU によるレンダリングは含みません。この方法はインストールが比較的簡単なため、3D レンダリングを行わない場合はこちらのほうが良い場合があります。この場合のインストール方法は以下の記事を参照してください。
Video Driver + GPU
ZynqMP Display Driver に対応した X Window の DDX Driver(Video Driver)と GPU(Mali-400) を使って表示する方法です。この方法はインストールが比較的複雑です。この場合のインストール方法は以下の記事を参照してください。
ベンチマーク
Video Driver + GPU でベンチマークを走らせてみました。詳細は以下のページを参照してください。