3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ultra96/Ultra96-V2 向け Debian GNU/Linux で X Window を動かす(LibMali編)

Last updated at Posted at 2019-12-25

はじめに

筆者は 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 を動かすための手順を幾つかのパートに分けて説明します。

この記事では、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)

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 を作ることができませんでした。ご了承ください。

インストールの手順

具体的には次の手順でインストールします。

  1. Mali Driver のインストール
  2. X Window System のインストール
  3. libMali のインストール
  4. Video Driver(xserver-xorg-video-armsoc-xilinx) のインストール
  5. xorg.conf の編集
  6. 開発用パッケージのインストール(必要ならば)

なお、すでに 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を指定する必要があります。

/etc/X11/xorg.conf
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 でベンチマークを走らせてみました。詳細は以下のページを参照してください。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?