LoginSignup
1
0

More than 1 year has passed since last update.

Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(インストール編)

Last updated at Posted at 2021-05-03

はじめに

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

以下の URL に Ultra96/Ultra96-V2 用に Boot Loader(U-Boot 等)、DRM Lima をイネーブルにして DRM Xlnx に修正を加えた Linux Kernel、DDX Xlnx と DRI Lima を Debian Package としてインストール済みの Ubuntu 20.04 Desktop Root File System を用意しています。この記事ではインストール方法を説明します。

Boot Loader、Linux Kernel、Ubuntu 20.04 Desktop Root File System のビルドはとても面倒です。単に使ってみたいという方はどうぞ。

なお、現時点(2021年4月)では、Ubuntu 20.04 の gnome-shell が動作するところまで確認していますが、すべてのアプリケーションで動作を確認したわけでは無いことに注意してください。

概要

  • Hardware
    • Ultra96 : Xilinx Zynq UltraScale+ MPSoC development board based on the Linaro 96Boards specification.
    • Ultra96-V2 : updates and refreshes the Ultra96 product that was released in 2018.
  • Boot Loader
    • FSBL(First Stage Boot Loader for Ultra96/Ultra96-V2)
    • PMU Firmware(Platform Management Unit Firmware)
    • BL31(ARM Trusted Firmware Boot Loader stage 3-1)
    • U-Boot xilinx-v2019.2 (customized)
  • Linux Kernel Version v5.4.0
    • linux-xlnx tag=xilinx-v2020.2
    • Enable Device Tree Overlay with Configuration File System
    • Enable FPGA Manager
    • Enable FPGA Bridge
    • Enable FPGA Reagion
    • Enable ATWILC3000 Linux Driver for Ultra96-V2
    • Enable CIFS (Common Internet File System)
    • Enable Xilinx APF Accelerator driver
    • Enable Xilinx APF DMA engines support
    • Enable DRM Lima (Open-source reverse-engineered driver for Mali-4xx GPUs)
    • Fixed DRM Xlnx to support shared buffer with DRM Lima
  • Ubuntu20.04(focal) Desktop Root File System
    • Installed build-essential
    • Installed ubuntu-desktop
    • Installed lightdm
    • Installed ruby python python3
    • Installed DDX Xlnx for DRI3 and Lima
    • Installed DRI Lima for DDX Xlnx and DRM Xlnx

インストール

ダウンロード

githubから次のようにダウンロードしてください。現時点の最新バージョンは v2020.2-desktop-rc2 です。なお、いくつかのイメージファイルはかなり大きいので、Git LFS(Large File Storage)を使っています。お使いの環境に git-lfs がインストールされている必要があります。

shell$ git clone --depth=1 --branch v2020.2-desktop-rc2 git://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96
shell$ cd ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96
shell$ git lfs pull

ファイルの説明

  • target/Ultra96
    • boot/
      • boot.bin : Stage 1 Boot Loader
      • uEnv.txt : U-Boot environment variables for linux boot
      • image-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima : Linux Kernel Image (use Git LFS)
      • devicetree-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-ultra96.dtb : Linux Device Tree Blob for Ultra96
      • devicetree-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-ultra96.dts : Linux Device Tree Source for Ultra96
  • target/Ultra96-V2
    • boot/
      • boot.bin : Stage 1 Boot Loader
      • uEnv.txt : U-Boot environment variables for linux boot
      • image-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima : Linux Kernel Image (use Git LFS)
      • devicetree-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-ultra96v2.dtb : Linux Device Tree Blob for Ultra96-V2
      • devicetree-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-ultra96v2.dts : Linux Device Tree Source for Ultra96-V2
  • ubuntu20.04-desktop-rootfs.tgz : Ubuntu 20.04 Desktop Root File System (use Git LFS)
  • linux-image-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima_5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-1_arm64.deb
  • linux-headers-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima_5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-1_arm64.deb
  • libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0~20.04.1_arm64.deb : Debian Pacakge for DRI Lima
  • xserver-xorg-video-armsoc-xilinx_1.5-alpha8_arm64.deb : Debian Package for DDX Xlnx

SD-Card のフォーマット

  1. SD-Card のパーティション1を VFAT File System でファイルシステムを作ります。だいたい100MB〜300MBあれば充分です。
  2. SD-Card のパーティション2を ext4 File System でファイルシステムを作ります。

Linux での SD-Card のフォーマットは次の URL を参照してください。

SD-Card への書き込み

 0. SD-Card のマウント

ここではフォーマットした SD-Card のドライブが /dev/sdc だった場合の例を示します。

shell# mount /dev/sdc1 /mnt/usb1
shell# mount /dev/sdc2 /mnt/usb2

 1.1 Boot Partition のコピー(Ultra96 の場合)

SD-Card のパーティション1(この例では /mnt/usb1) にtarget/Ultra96/boot/ 下のファイルをコピーします。

shell# cp target/Ultra96/boot/* /mnt/usb1

 1.2 Boot Partition のコピー(Ultra96-V2 の場合)

SD-Card のパーティション1(この例では /mnt/usb1) にtarget/Ultra96-V2/boot/ 下のファイルをコピーします。

shell# cp target/Ultra96-V2/boot/* /mnt/usb1

 2. RootFS Partition の生成

SD-Card のパーティション2(この例では /mnt/usb2) に ubuntu20.04-desktop-rootfs.tgz の中身を展開します。

shell# tar xfz ubuntu20.04-desktop-rootfs.tgz -C /mnt/usb2

 3. SD-Card のアンマウント

shell# umount /mnt/usb1
shell# umount /mnt/usb2

Ultra96/Ultra96-V2のセットアップ

  1. Ultra96/Ultra96-V2 の SD-Card スロットに SD-Card をセットします。
  2. Ultra96/Ultra96-V2 の mini Display Port コネクタにモニターを接続します。
  3. Ultra96/Ultra96-V2 の USB ポートにキーボードとマウスを接続します。

Ubuntu 20.04 の開始

  1. Ultra96/Ultra96-V2 の電源スイッチをオンにします。
  2. 数秒後にディスプレイモニターに Ubuntu のログイン画面が出ます。
  3. User Name に fpga、Password に fpga を入力してログインします。

Lima の無効化

提供したシステムはあくまでも開発中のため、Lima を有効にしたことで動作しない場合が十分考えられます。この章では Lima を無効化する方法を説明します。

DRI Lima の無効化

libGL は環境変数 LIBGL_ALWAYS_SOFTWARE に 1 を設定すると DRI Lima によるレンダリングを行わずにソフトウェアによるレンダリングを行います。

 アプリケーション毎の DRI Lima の無効化

ターミナルから起動するようなアプリケーションは、次の例のように環境変数 LIBGL_ALWAYS_SOFTWARE に 1 を設定して起動すると良いでしょう。

shell$ LIBGL_ALWAYS_SOFTWARE=1 glmark2 

 Desktop の DRI Lima の無効化

Ubuntu 20.04 の Desktop は gnome-shell を使っています。Desktop 全体で DRI Lima を無効化するためには、gnome-shell の起動時に前述の 環境変数 LIBGL_ALWAYS_SOFTWARE に 1 を設定します。

gnome-shell は systemd の機構を使って起動しています。したがって、gnome-shell に環境変数を設定するためには systemd の設定ファイルを使います。具体的には、次のような /etc/systemd/user/gnome-shell-x11.service.d/override.conf を用意します。

/etc/systemd/user/gnome-shell-x11.service.d/override.conf
[Service]
Environment="LIBGL_ALWAYS_SOFTWARE=1"

 DDX Xlnx の DRI3 対応の無効化

もしかしたら DDX Xlnx を DRI3 対応にしたことによる問題が発生するかもしれません。その場合は、DRI Lima を無効化するだけではダメで、DDX Xlnx の DRI3 対応を止めなければなりません。その場合は、/etc/X11/xorg.conf の Section "Device" の Option "DRI" を "2" に変更します。なお、DRI Lima は DRI3 でないとアプリケーションごと落ちてしまうので、DDX Xlnx を DRI2 にした場合は、前述のように DRI Lima を無効化するか、あるいは DRI Lima をアンインストールしておく必要があります。

/etc/X11/xorg.conf
Section "Device"
        Identifier      "ZynqMP"
        Driver          "armsoc"
        Option          "DRI"               "2"
        Option          "NoFlip"            "false"
        Option          "Debug"         "false"
EndSection

 DRI Lima のアンインストール

libGL は対応する DRI ドライバが無ければ自動的にソフトウェアによるレンダリングを行います。いっそのこと DRI Lima をアンインストールしてしまう手もあります。

shell# dpkg --remove libgl1-mesa-xlnx-dri

備考

GUI と CUI の切り替え

提供したシステムは GUI (Ubuntu 20.04 Desktop) が起動します。CUI と GUI の切り替えは、ランレベルをブート時にカーネルにわたすパラメーターで指定することで行います。カーネルパラメーターは uEnv.txt で指定できます。

 CUI でのブート

uEnv.txt の linux_boot_args_systemd に "systemd.unit=multi-user.target" を指定します。

linux_boot_args_systemd=systemd.unit=multi-user.target

 GUI でのブート

uEnv.txt の linux_boot_args_systemd に "systemd.unit=graphical.target" を指定します。

linux_boot_args_systemd=systemd.unit=graphical.target

 デフォルトでのブート

デフォルトのランレベルは Ubuntu が起動してからも変更できます。デフォルトのランレベルでブートする場合は、uEnv.txt の linux_boot_args_systemd を空にします。

linux_boot_args_systemd=systemd.unit=

システムコンソールの切り替え

提供したシステムはデフォルトではディスプレイモニターとキーボードがシステムコンソールになっています。Ultra96/Ultra96-V2 には USB-Serial があり、こちらをシステムコンソールにすることができます。

システムコンソールの切り替えはブート時にカーネルにわたすパラメーターで指定することで行います。カーネルパラメーターは uEnv.txt で指定できます。

 シリアルポートへの切り替え

uEnv.txt の linux_boot_args_console に "console=ttyPS0,115200" を指定します。ttyPS0 は Ultra96/Ultra96-V2 の USB-Serial のデバイス名です。ボーレートなどを指定することができます(例では115200)。

linux_boot_args_console=console=ttyPS0,115200

 ディスプレイ+キーボードへの切り替え

uEnv.txt の linux_boot_args_console に "console=tty1" を指定します。

linux_boot_args_console=console=tty1

参考

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