はじめに
筆者は 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 を動かすための手順を幾つかのパートに分けて説明します。
- 概要編
- Video Driver 編
- Mali Driver 編
- LibMali 編 (この記事)
- fbdev 編
- glmark2 編
この記事では、LibMaliの Debian Package をビルドする手順、および ZynqMP-FPGA-Linux に libMali を含んだ X Window System をインストールする手順を説明します。
LibMali (User Space Libraries for Mali) とは
libMali とはGPU(Mali-400) で 3D レンダリングするためのユーザー空間で動作するライブラリです。OpenGL ES 2.0に対応しています。GPU を使って 3D レンダリングする場合はこのライブラリが必要です。このライブラリは ARM よりバイナリで提供されています。
Fig.1 LibMali(User Space Libraries for Mali)
Debian Package のビルド手順
この章では、libMali の Debian Package を作るための手順を説明します。
なお、ここで説明する手順で生成したリポジトリは以下の URL に用意しています。リポジトリを作るのが面倒な人は以下のリポジトリを使ってください。
なお、libMali は Xilinx 社がバイナリーで提供しているライブラリです。ソースコードによる提供ではありません。この記事では、バイナリーで提供されているライブラリを Debian Package にする手順を説明するものです。Debian Package にするのは、パッケージ化することで Debian にインストールしやすくするためです。
また、ビルド済みの libMaliの Debian Package を以下のリポジトリに用意しています。ビルドが面倒な人はこちらをお使いください。
-
https://github.com/ikwzm/ZynqMP-FPGA-Xserver
- 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
リポジトリを作る
shell$ mkdir libmali-zynqmp
shell$ cd libmali-zynqmp
shell$ git init
バイナリーライブラリを得る
バイナリーライブラリーは、Xilinx 社が提供しているライブラリを使います。次の Web ページを参照してソフトウェアライセンスに同意した上で mali-400-userspace.tar をダウンロードしてください。
また、以下の方法でダウンロードすることも出来ます。ただしソフトウェアライセンスに同意してください。
shell$ wget https://www.xilinx.com/publications/products/tools/mali-400-userspace.tar
--2019-12-08 21:39:58-- https://www.xilinx.com/publications/products/tools/mali-400-userspace.tar
-UUU:----F1 Readme.md<libmali-zynqmp> 49% L37 Git-master (Fundamental) ---
HTTP request sent, awaiting response... 200 OK
Length: 572887040 (546M) [application/x-tar]
Saving to: ‘mali-400-userspace.tar’
mali-400-userspace. 100%[==================>] 546.35M 1.27MB/s in 9m 2s
2019-12-24 16:54:47 (1.01 MB/s) - ‘mali-400-userspace.tar’ saved [572887040/572887040]
mali-400-userspace.tar からmali/rel-v2019.1/r8p0-01rel0 を取り出します。
shell$ tar xf mali-400-userspace.tar mali/rel-v2019.1/r8p0-01rel0.tar
shell$ tar xf mali/rel-v2019.1/r8p0-01rel0.tar
Debian Package を作るためのファイルを追加する
debian ディレクトリを作って、以下のファイルを追加します。ここではこれらのファイルの説明はしません。詳細はhttps://github.com/ikwzm/libmali-zynqmp を参照してください。
-
debian/
- README.Debian
- README.source
- changelog
- compat
- control
- copyright
- libegl1-zynqmp-dev.install
- libegl1-zynqmp-dev.links
- libegl1-zynqmp.install
- libegl1-zynqmp.links
- libgbm-zynqmp-dev.dirs
- libgbm-zynqmp-dev.install
- libgbm-zynqmp-dev.links
- libgbm1-zynqmp.install
- libgbm1-zynqmp.links
- libgles1-zynqmp-dev.install
- libgles1-zynqmp.install
- libgles1-zynqmp.links
- libgles2-zynqmp-dev.install
- libgles2-zynqmp-dev.links
- libgles2-zynqmp.install
- libgles2-zynqmp.links
- libmali-zynqmp-dev.dirs
- libmali-zynqmp-dev.install
- libmali-zynqmp-dev.links
- libmali-zynqmp.install
- libmali-zynqmp.links
- rules
pkgconfig 用のファイルを追加する
libMali の開発用の Debian Package (libgbm-zynqmp-dev_1.6-3_arm64.debおよび libmali-zynqmp-dev_1.6-3_arm64.deb) には pkgconfig のためのファイルも含まれます。インストールするpkgconfig 用のファイルを追加します。ここではこれらのファイルの説明はしません。詳細はhttps://github.com/ikwzm/libmali-zynqmp を参照してください。
-
pkgconfig/
- OpenCL.pc.cmake
- egl.pc.cmake
- gbm.pc.cmake
- glesv2.pc.cmake
- mali.pc.cmake
- wayland-egl.pc.cmake
CMakeLists.txt を追加する
Debian Package をビルドする際 cmake を使います。そのための CMakeLists.txt を追加します。
Debian Package をビルドする
前節までで説明した手順で作ったリポジトリを以下のURL に用意しています。リポジトリをつくるのが面倒な人はこのリポジトリをクローンしてください。
debian/rule binary を実行して Debian Package をビルドします。ビルドしたパッケージは一つ上のディレクトリに作られます。
shell$ sudo debian/rule binary
:
後略
-
../
- 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
インストール
Debian Packageの紹介
この章では libMali を含んだ X Window System を ZynqMP-FPGA-Linux にインストールする手順を説明します。
なお、ビルド済みのDebian Package を以下のリポジトリに用意しています。こちらをインストールしてもかまいません。
-
https://github.com/ikwzm/ZynqMP-FPGA-Xserver
- 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.1-0_arm64.deb
- xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb
注意点
libMali の Debian Package をインストールする際、インストールする順番が重要です。というのもlibMali の Debian Package は、 X Window System が標準でインストールされる Debian Package の内容を一部上書きするからです。筆者が Debian Package にあまり詳しくないため、どうしても一発でインストールできるような Debian Package を作ることができませんでした。ご了承ください。
インストールの手順
具体的には次の手順でインストールします。
- Mali Driver のインストール
- X Window System のインストール
- libMali のインストール
- Video Driver(xserver-xorg-video-armsoc-xilinx) のインストール
- xorg.conf の編集
- 開発用パッケージのインストール(必要ならば)
なお、すでに X Window System がインストールされている場合は、後述の手順で一度 X Window System をアンインストールしておかなければなりません。
1. Mali Driver のインストール
Mali Driver とは ZynqMP に搭載されている GPU(Mali-400) を制御するための Kernel Module です。Mali Driver のインストールに関しては次の記事を参照してください。
2. X Window System のインストール
X Window System をインストールします。
shell$ apt install x-window-system-core
:
後略
3. libMaliのインストール
X Window System をインストール した後に libMali をインストールします。libMaliの Debian Package を以下の順番でインストールします。
shell$ sudo dpkg -i libmali-zynqmp_1.7-0_arm64.deb
Selecting previously unselected package libmali-zynqmp:arm64.
(Reading database ... 85064 files and directories currently installed.)
Preparing to unpack libmali-zynqmp_1.7-0_arm64.deb ...
Unpacking libmali-zynqmp:arm64 (1.7-0) ...
Setting up libmali-zynqmp:arm64 (1.7-0) ...
Processing triggers for libc-bin (2.28-10) ...
shell$ sudo dpkg -i libegl1-zynqmp_1.7-0_arm64.deb
Selecting previously unselected package libegl1-zynqmp:arm64.
(Reading database ... 85072 files and directories currently installed.)
Preparing to unpack libegl1-zynqmp_1.7-0_arm64.deb ...
Unpacking libegl1-zynqmp:arm64 (1.7-0) ...
Replacing files in old package libegl1:arm64 (1.1.0-1) ...
Setting up libegl1-zynqmp:arm64 (1.7-0) ...
shell$ sudo dpkg -i libgles1-zynqmp_1.7-0_arm64.deb
Selecting previously unselected package libgles1-zynqmp:arm64.
(Reading database ... 85076 files and directories currently installed.)
Preparing to unpack libgles1-zynqmp_1.7-0_arm64.deb ...
Unpacking libgles1-zynqmp:arm64 (1.7-0) ...
Setting up libgles1-zynqmp:arm64 (1.7-0) ...
shell$ sudo dpkg -i libgles2-zynqmp_1.7-0_arm64.deb
Selecting previously unselected package libgles2-zynqmp:arm64.
(Reading database ... 85081 files and directories currently installed.)
Preparing to unpack libgles2-zynqmp_1.7-0_arm64.deb ...
Unpacking libgles2-zynqmp:arm64 (1.7-0) ...
Setting up libgles2-zynqmp:arm64 (1.7-0) ...
shell$ sudo dpkg -i libgbm1-zynqmp_1.7-0_arm64.deb
Selecting previously unselected package libgbm1-zynqmp:arm64.
(Reading database ... 85086 files and directories currently installed.)
Preparing to unpack libgbm1-zynqmp_1.7-0_arm64.deb ...
Unpacking libgbm1-zynqmp:arm64 (1.7-0) ...
Replacing files in old package libgbm1:arm64 (18.3.6-2) ...
Setting up libgbm1-zynqmp:arm64 (1.7-0) ...
4. Video Driver(xserver-xorg-video-armsoc-xilinx) のインストール
Video Driver(xserver-xorg-video-armsoc-xilinx) とは ZynqMP に対応したX Window Serverの DDX Driver(Video Driver) のことです。詳細は以下の記事を参照してください。
dpkg を使って xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb
をインストールします。
shell$ sudo dpkg -i xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb
(Reading database ... 66644 files and directories currently installed.)
Preparing to unpack xserver-xorg-video-armsoc-xilinx_1.4-1_arm64.deb ...
Unpacking xserver-xorg-video-armsoc-xilinx (1.4-1) over (1.4-1) ...
Setting up xserver-xorg-video-armsoc-xilinx (1.4-1) ...
Processing triggers for man-db (2.8.5-2) ...
5. xorg.conf の編集
/etc/X11/xorg.conf の Device セクションの Driver プロパティに armsocを指定する必要があります。
Section "Device"
Identifier "ZynqMP"
Driver "armsoc"
Option "DEBUG" "true"
EndSection
Section "Screen"
Identifier "DefaultScreen"
Device "ZynqMP"
EndSection
6. 開発用パッケージのインストール(必要ならば)
もし必要ならば、開発用の Debian Package をインストールします。
shell$ sudo dpkg -i libmali-zynqmp-dev_1.7-0_arm64.deb
Selecting previously unselected package libmali-zynqmp-dev:arm64.
(Reading database ... 85097 files and directories currently installed.)
Preparing to unpack libmali-zynqmp-dev_1.7-0_arm64.deb ...
Unpacking libmali-zynqmp-dev:arm64 (1.7-0) ...
Setting up libmali-zynqmp-dev:arm64 (1.7-0) ...
shell$ sudo dpkg -i libegl1-zynqmp-dev_1.7-0_arm64.deb
Selecting previously unselected package libegl1-zynqmp-dev:arm64.
(Reading database ... 85101 files and directories currently installed.)
Preparing to unpack libegl1-zynqmp-dev_1.7-0_arm64.deb ...
Unpacking libegl1-zynqmp-dev:arm64 (1.7-0) ...
Setting up libegl1-zynqmp-dev:arm64 (1.7-0) ...
shell$ sudo dpkg -i libegl1-zynqmp-dev_1.7-0_arm64.deb
(Reading database ... 85110 files and directories currently installed.)
Preparing to unpack libegl1-zynqmp-dev_1.7-0_arm64.deb ...
Unpacking libegl1-zynqmp-dev:arm64 (1.7-0) over (1.7-0) ...
Setting up libegl1-zynqmp-dev:arm64 (1.7-0) ...
shell$ sudo dpkg -i libgles2-zynqmp-dev_1.7-0_arm64.deb
Selecting previously unselected package libgles2-zynqmp-dev:arm64.
(Reading database ... 85110 files and directories currently installed.)
Preparing to unpack libgles2-zynqmp-dev_1.7-0_arm64.deb ...
Unpacking libgles2-zynqmp-dev:arm64 (1.7-0) ...
Setting up libgles2-zynqmp-dev:arm64 (1.7-0) ...
shell$ sudo dpkg -i libgbm-zynqmp-dev_1.7-0_arm64.deb
Selecting previously unselected package libgbm-zynqmp-dev:arm64.
(Reading database ... 85119 files and directories currently installed.)
Preparing to unpack libgbm-zynqmp-dev_1.7-0_arm64.deb ...
Unpacking libgbm-zynqmp-dev:arm64 (1.7-0) ...
Setting up libgbm-zynqmp-dev:arm64 (1.7-0) ...
アンインストール
筆者の勉強不足のせいで Debian Package の依存関係が乱れています。そのためパッケージの更新やアンインストールの際、失敗することがあるかもしれません。そうなった場合は X Window System を一度アンインストールした方がうまくいきます。ここでは、X Window System をアンインストールする手順を示します。
1. xserver-xorg-core をpurge
まずは xserver-xorg-core を purge します。
shell$ sudo apt purge xserver-xorg-core
:
後略
2. autopurge する
xserver-xorg-core に依存していたパッケージを autopurge を使って取り除きます。
shell$ sudo apt autopurge
:
後略
3. libMali をアンインストールする
libmali-zynqmp および libgbm1-zynqmp をアンインストールします。
shell$ sudo dpkg --purge libgbm1-zynqmp
(Reading database ... 55745 files and directories currently installed.)
Removing libgbm1-zynqmp:arm64 (1.6-3) ...
shell$ sudo dpkg --purge libmali-zynqmp
(Reading database ... 55741 files and directories currently installed.)
Removing libmali-zynqmp:arm64 (1.6-3) ...
Purging configuration files for libmali-zynqmp:arm64 (1.6-3) ...
Processing triggers for libc-bin (2.28-10) ...
起動
root でログインしてstartx で起動してみます。
shell# startx &
:
後略
ディスプレイに X Windows が映れば成功です。
ベンチマーク
Video Driver + GPU でベンチマークを走らせてみました。詳細は以下のページを参照してください。