Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(Ubuntu Desktop ビルド編)







# はじめに


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



  * [概要編]
  * [DRM Lima 編]
  * [DRI Lima 編]
  * [共有バッファ編]
  * [ストライド問題編]
  * [インストール編]
  *  __Ubuntu Desktop ビルド編(この記事)__  



以下の URL に Ultra96/Ultra96-V2 用に Lima に対応した Ubuntu 20.04 Desktop Root File System を用意しています。



* https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96



この記事では Ubuntu 20.04 Desktop のRoot File System のビルド方法について説明します。



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




# 概要


Ubuntu 20.04 Desktop の Root File System をビルドするのは一筋縄ではいきませんでした。いろいろ試行錯誤した結果、次のように５ステップに分けてビルドしました。ちょっと面倒くさいです。他に良い方法があれば教えてください。



1. Ubuntu(18.04) がインストールされたPCでQEMU を動かして、その上で Ubuntu 20.04 の Conole 版(Desktop 無しの CUI オンリー版) をビルドする。
2. Ultra96 に 1. でビルドした Ubuntu 20.04 Console版をインストールする。
3. Ubuntu 20.04 Console 版をインストールした Ultra96 上で、DDX Xlnx の Debian パッケージをビルドする。
4. Ubuntu 20.04 Console 版をインストールした Ultra96 上で、DRI Lima の Debian パッケージをビルドする。
5. Ubuntu 20.04 Console 版をインストールした Ultra96 上で、1.でビルドした  Root File System を展開して chroot し、3.でビルドした Debian パッケージを含む Ubuntu 20.04 Desktop をインストールする。



ぶっちゃけ面倒くさいですが、Ubuntu なので、一度ビルドしてしまえばあとあと楽です。自分でビルドするのが面倒な人は前述の URL からダウンロードしてください。




# 1. Console 版のビルド



## ビルド環境の準備


Ubuntu 20.04 Console 版をビルドするためには、QEUM(arm64 版) がインストールされた Linux が必要です。


```console
shell$ apt-get install qemu-user-static debootstrap binfmt-support
```




Linux Kernel 用の Debian パッケージをダウンロードします。


```console
shell$ git clone --depth 1 -b build git://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96.git
shell$ cd ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96
shell$ git lfs pull

```





## 環境変数の設定



```console
shell$ export targetdir=ubuntu20.04-console-rootfs
shell$ export distro=focal
```





## ステージ１



```console
shell$ mkdir                                               $PWD/$targetdir
shell$ sudo debootstrap --arch=arm64 --foreign $distro     $PWD/$targetdir
shell$ sudo cp /usr/bin/qemu-aarch64-static                $PWD/$targetdir/usr/bin
shell$ sudo cp /etc/resolv.conf                            $PWD/$targetdir/etc
shell$ sudo cp scripts/build-ubuntu20.04-console-rootfs.sh $PWD/$targetdir
shell$ sudo cp linux-*.deb                                 $PWD/$targetdir
shell$ sudo mount -vt proc proc                            $PWD/$targetdir/proc
shell$ sudo mount -vt devpts devpts -o gid=5,mode=620      $PWD/$targetdir/dev/pts
```



## ステージ２


これ以降は QEMU(arm64版) と chroot を使って Root File System を構築します。


```console
shell$ sudo chroot $PWD/$targetdir
```




ここから、次の２種類の方法があります。



1. build-debian9-rootfs-with-qemu.sh を使って楽々構築
2. 一歩一歩コマンドを打ち込みつつ構築



どちらもやってることは同じなので、ここでは一歩一歩コマンドを打ち込む方法を説明します。


### 　APT の設定



```console
ubuntu20.04-rootfs# distro=focal
ubuntu20.04-rootfs# export LANG=C
ubuntu20.04-rootfs# /debootstrap/debootstrap --second-stage
```



```console
ubuntu20.04-rootfs# cat <<EOT > /etc/apt/sources.list
deb http://ports.ubuntu.com/ubuntu-ports focal main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports focal main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports focal-updates main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports focal-updates main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports focal-security main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports focal-security main restricted universe multiverse
EOT
```



```console
ubuntu20.04-rootfs# cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends
APT::Install-Recommends "0";
APT::Install-Suggests   "0";
EOT
```



### 　パッケージの更新



```console
ubuntu20.04-rootfs# apt-get -y update
ubuntu20.04-rootfs# apt-get -y upgrade
```



### 　基本的なアプリケーションのインストール



```console
ubuntu20.04-rootfs# apt-get install -y locales dialog
ubuntu20.04-rootfs# dpkg-reconfigure locales
ubuntu20.04-rootfs# apt-get install -y net-tools openssh-server ntpdate resolvconf sudo less hwinfo ntp tcsh zsh file
```



### 　hostname の設定


ここでは ubuntu-fpga という名前をつけています。ここらへんはお好みに合わせてください。


```console
ubuntu20.04-rootfs# echo ubuntu-fpga > /etc/hostname
```



### 　root のパスワードの設定



```console
ubuntu20.04-rootfs# passwd
```


ここで rootのパスワードを何にするか聞かれるので適当に admin とか入力してください。

さらに、シリアルポートから root へのログインを許可しておきます。


```console
ubuntu20.04-rootfs# cat <<EOT >> /etc/securetty
# Seral Port for Xilinx Zynq
ttyPS0
EOT
```



### 　FPGA ユーザーの追加



```console
ubuntu20.04-rootfs# adduser fpga
```


ここで fpga ユーザーのパスワードを何にするか聞かれるので適当に fpga とか入力してください。

fpga ユーザーに sudo の実行許可を与えます。


```console
ubuntu20.04-rootfs# echo "fpga ALL=(ALL:ALL) ALL" > /etc/sudoers.d/fpga

```


sshd config の設定


```console
ubuntu20.04-rootfs# sed -i -e 's/#PasswordAuthentication/PasswordAuthentication/g' /etc/ssh/sshd_config

```



### 　Time Zone の設定



```console
ubuntu20.04-rootfs# dpkg-reconfigure tzdata
```


または Time Zone を 非インタラクティブに Asia/Tokyoに設定したい時は次のようにしてください。


```console
ubuntu20.04-rootfs# echo "Asia/Tokyo" > /etc/timezone
ubuntu20.04-rootfs# dpkg-reconfigure -f noninteractive tzdata
```





### 　fstab の設定



```console
ubuntu20.04-rootfs# cat <<EOT > /etc/fstab
none            /config         configfs        defaults        0       0
/dev/mmcblk0p1  /mnt/boot       auto            defaults        0       0
EOT
```


Configuration File System を /config にマウントしておきます。Configuration File System は Device Tree Overlay で使います。




### 　/lib/firmware の設定



```console
ubuntu20.04-rootfs# mkdir /lib/firmware
ubuntu20.04-rootfs# mkdir /lib/firmware/ti-connectivity
ubuntu20.04-rootfs# mkdir /lib/firmware/mchp
```



### 　各種アプリケーションのインストール



```console
ubuntu20.04-rootfs# apt-get install -y build-essential
ubuntu20.04-rootfs# apt-get install -y pkg-config
ubuntu20.04-rootfs# apt-get install -y curl
ubuntu20.04-rootfs# apt-get install -y git
ubuntu20.04-rootfs# curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
ubuntu20.04-rootfs# apt-get install -y git-lfs
ubuntu20.04-rootfs# apt-get install -y kmod
ubuntu20.04-rootfs# apt-get install -y flex bison
ubuntu20.04-rootfs# apt-get install -y u-boot-tools device-tree-compiler
ubuntu20.04-rootfs# apt-get install -y libssl-dev
ubuntu20.04-rootfs# apt-get install -y socat
ubuntu20.04-rootfs# apt-get install -y ruby rake ruby-msgpack ruby-serialport
ubuntu20.04-rootfs# apt-get install -y python3 python3-dev python3-setuptools python3-wheel python3-pip python3-numpy
ubuntu20.04-rootfs# pip3 install msgpack-rpc-python
```


必要なアプリケーションはここでインストールします。何をインストールするかはお好みで。




### 　Wireless tools and firmware のインストール


Ultra96 は WiFi と Bluetooth を持っています。通常は WiFi でネットワークに接続します。すぐに WiFi と Bluetooth が使えるようにこの段階で必要なパッケージと firmware をインストールしておきます。


```console
ubuntu20.04-rootfs# apt-get install -y wireless-tools
ubuntu20.04-rootfs# apt-get install -y wpasupplicant
```


Ultra96 に搭載されている WiFi Chip の firmware を TI のリポジトリからダウンロードして /lib/firmware/ti-connectivity にコピーします。


```console
ubuntu20.04-rootfs# git clone git://git.ti.com/wilink8-wlan/wl18xx_fw.git
ubuntu20.04-rootfs# cp wl18xx_fw/wl18xx-fw-4.bin /lib/firmware/ti-connectivity
ubuntu20.04-rootfs# rm -rf wl18xx_fw/
```


Ultra96 に搭載されている Bluetooth Chip の firmware を TI のリポジトリからダウンロードして /lib/firmware/ti-connectivity にコピーします。


```console
ubuntu20.04-rootfs# git clone git://git.ti.com/wilink8-bt/ti-bt-firmware
ubuntu20.04-rootfs# cp ti-bt-firmware/TIInit_11.8.32.bts /lib/firmware/ti-connectivity
ubuntu20.04-rootfs# rm -rf ti-bt-firmware
```


Ultra96-V2 に搭載されている WiFi Chip の firmware を Microchip のリポジトリからダウンロードして /lib/firmware/mchp にコピーします。


```console
ubuntu20.04-rootfs# git clone git://github.com/linux4wilc/firmware  linux4wilc-firmware  
ubuntu20.04-rootfs# cp linux4wilc-firmware/*.bin /lib/firmware/mchp
ubuntu20.04-rootfs# rm -rf linux4wilc-firmware  
```



### 　Network-Manager のインストール



```console
ubuntu20.04-rootfs# apt-get install -y network-manager
```



### 　その他のアプリケーションのインストール



```console
ubuntu20.04-rootfs# apt-get install -y samba
ubuntu20.04-rootfs# apt-get install -y avahi-daemon
ubuntu20.04-rootfs# apt-get install -y haveged
```



### 　Linux Kernel Module のインストール



```console
ubuntu20.04-rootfs# dpkg -i linux-image-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima_5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-1_arm64.deb
```



### 　Linux Kernel ヘッダーファイルのインストール



```console
ubuntu20.04-rootfs# dpkg -i linux-headers-5.4.0-xlnx-v2020.2-zynqmp-fpga-lima_5.4.0-xlnx-v2020.2-zynqmp-fpga-lima-1_arm64.deb
```



### 　Debian パッケージを /home/fpga/debian に移動



```console
ubuntu20.04-rootfs# mkdir              home/fpga/debian
ubuntu20.04-rootfs# mv *.deb           home/fpga/debian
ubuntu20.04-rootfs# chown fpga.fpga -R home/fpga/debian
```



### 　APT Cache の掃除


APT Cache に大量にダウンロードしたパッケージがキャッシュされていますが、そのままだと Root File System が大きくなるので、掃除して身軽にしておきます。


```console
ubuntu20.04-rootfs# apt-get clean
```



### 　後始末



```console
ubuntu20.04-rootfs# exit
shell$ sudo rm -f  $PWD/$targetdir/usr/bin/qemu-aarch64-static
shell$ sudo rm -f  $PWD/$targetdir/build-ubuntu20.04-console-rootfs.sh
shell$ sudo umount $PWD/$targetdir/proc
shell$ sudo umount $PWD/$targetdir/dev/pts
```



## ubuntu20.04-console-rootfs.tgz のビルド



```console
shell$ cd $PWD/$targetdir
shell$ sudo tar cfz ../ubuntu20.04-console-rootfs.tgz *
```





# 2. Console 版のインストール



## SD-Card への書き込み


基本的には[インストール編]で説明した内容と同じ要領で SD-Card に書き込みます。ただしRootFS Partition には、前章でビルドした ubuntu20.04-console-rootfs.tgz を使用します。


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



## システムコンソールをシリアルポートに変更


ディスプレイとキーボードでも作業できますが、シリアルポートを使いたい場合は、uEnv.txt の linux_boot_args_console に "console=ttyPS0,115200" を指定します。


```Shell
linux_boot_args_console=console=ttyPS0,115200
```



## ネットワークの設定


後述の DDX Xlnx や DRI Lima の Debian パッケージをビルドするためには Ultra96/Ultra96-V2 がインターネットに接続されていなければなりません。ネットワークの設定は nmcli コマンド(Network-Manager の CUI 版)を使って行います。Desktop 版がまだなので GUI 版は使えません。


```console
shell# nmcli device wifi con <SSID> password <password>
```


\<SSID\> と \<password\> は各自の環境にあわせて変更してください。


# 3. DDX Xlnx Debian パッケージのビルド


DDX Xlnx は、ZynqMP で DRM(Direct Rendering Manager) Xlnx を動かすための DDX(Device Dependent X) ドライバです。また、[共有バッファ編]と[ストライド問題編]で説明したような変更が行われています。


## ビルド環境の準備


DDX Xlnx をビルドするためには、インターネットに接続している Ubuntu 20.04 がインストールされた ZynqMPが必要です。[インストール編]で紹介した Ubuntu 20.04 Desktop 版か、前章で紹介した Ubunt20.04 Console版がインストールされた Ultra96/Ultra96-V2 を用意してください。

用意した Ubuntu 20.04(on Ultra96/Ultra96-V2) に、ビルドに必要なパッケージをインストールします。


```console
fpga@ubuntu-fpga:~/work$ apt install libdrm-dev libudev-dev libxext-dev pkg-config x11proto-core-dev x11proto-fonts-dev x11proto-gl-dev x11proto-xf86dri-dev xutils-dev xserver-xorg-dev quilt dh-autoreconf debhelper
```



## ダウンロード


[共有バッファ編]と[ストライド問題編]で説明したような変更を反映した DDX Xlnx のソースコードを https://github.com/ikwzm/xf86-video-armsoc-xilinx からダウンロードします。まだ開発中のため、タグは v1.5-alpha8 のものを使います。


```console
fpga@ubuntu-fpga:~/work$ git clone --branch v1.5-alpha8 https://github.com/ikwzm/xf86-video-armsoc-xilinx
fpga@ubuntu-fpga:~/work$ cd xf86-video-armsoc-xilinx
```



## Configure と Makefile の生成



```console
fpga@ubuntu-fpga:~/work/xf86-video-armsoc-xilinx$ ./autogen.sh
     :
fpga@ubuntu-fpga:~/work/xf86-video-armsoc-xilinx$ make distclean
     :
```



## Debian パッケージのビルド



```console
fpga@ubuntu-fpga:~/work/xf86-video-armsoc-xilinx$ sudo debian/rules binary  
```


これで xserver-xorg-video-armsoc-xilinx_1.5-alpha2_arm64.deb ができるはずです。


```console
fpga@ubuntu-fpga:~/work/xf86-video-armsoc-xilinx$ dpkg --info ../xserver-xorg-video-armsoc-xilinx_1.5-alpha2_arm64.deb
```



# 4. DRI Lima Debian パッケージのビルド


DRI Lima はMesa の DRI(Direct Rendering Infrastructure)ドライバです。[DRI Lima 編] で説明したように、DRI Lima は Mesa の DRI ドライバを xlnx に対応するように修正したものです。修正内容に関しては [DRI Lima 編] を参照してください。


## ビルド環境の準備


Mesa をビルドするためには、インターネットに接続している Ubuntu 20.04 がインストールされた ZynqMPが必要です。[インストール編]で紹介した Ubuntu 20.04 Desktop 版か、前章で紹介した Ubunt20.04 Console版がインストールされた Ultra96/Ultra96-V2 を用意してください。

用意した Ubuntu 20.04(on Ultra96/Ultra96-V2) に、Mesa のビルドに必要なパッケージをインストールします。


```console
fpga@ubuntu-fpga:~/work$ sudo apt-get build-dep mesa
fpga@ubuntu-fpga:~/work$ sudo apt-get install cmake valgrind libunwind-dev libconfig-dev
```



## ダウンロード


 [DRI Lima 編] で説明した修正内容は https://github.com/ikwzm/mesa-xlnx にパッチファイルとして提供しています。


```console
fpga@ubuntu-fpga:~/work$ git clone --branch mesa-xlnx-20.2.6 https://github.com/ikwzm/mesa-xlnx
fpga@ubuntu-fpga:~/work$ cd mesa-xlnx
```


mesa-xlnx のディレクトリに Mesa のソースコードをダウンロードします。


```console
fpga@ubuntu-fpga:~/work/mesa-xlnx$ apt-get source mesa=20.2.6-0ubuntu0.20.04.1
fpga@ubuntu-fpga:~/work/mesa-xlnx$ cd mesa-20.2.6
```



## ソースコードの修正


[DRI Lima 編] で説明した修正内容を Mesa のソースコードに反映します。


```console
fpga@ubuntu-fpga:~/work/mesa-xlnx/mesa-20.2.6$ patch -p1 < ../files/mesa-xlnx-20.2.6.diff
```



## Debian パッケージのビルド



```console
fpga@ubuntu-fpga:~/work/mesa-xlnx/mesa-20.2.6$ sudo debian/rules binary  
```


Mesa のパッケージをまるごと全部ビルドすることになるので、かなりの時間がかかります。ビルドした Debian パッケージ達の中に libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0.20.04.1_arm64.deb が含まれているはずです。これが DRI Lima 「だけ」を含んだ Debian パッケージです。


```console
fpga@ubuntu-fpga:~/work/mesa-xlnx/mesa-20.2.6$ dpkg --info ../libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0.20.04.1_arm64.deb
```



# 5. Desktop 版のビルド



## ビルド環境の準備


Ubuntu 20.04 Desktop 版の Root File System をビルドするためは、インターネットに接続している Ubuntu 20.04 がインストールされた ZynqMPが必要です。[インストール編]で紹介した Ubuntu 20.04 Desktop 版か、前章で紹介した Ubunt20.04 Console版がインストールされた Ultra96/Ultra96-V2 を用意してください。Ubuntu 20.04 Desktop 版の Root File System をビルドするためは、以下のファイルが必要です。

* 「1. Console 版のビルド」で作ったubuntu20.04-console-rootfs.tgz
* 「3. DDX Xlnx Debian パッケージのビルド」で作ったxserver-xorg-video-armsoc-xilinx_1.5-alpha2_arm64.deb
* 「4. DRI Lima Debian パッケージのビルド」で作った libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0.20.04.1_arm64.deb


## 環境変数の設定



```console
fpga@ubuntu-fpga:~/work$ export targetdir=ubuntu20.04-rootfs
fpga@ubuntu-fpga:~/work$ export distro=focal
```



## ステージ１


ubuntu20.04-console-rootfs.tgz を展開し、xserver-xorg-video-armsoc-xilinx_1.5-alpha2_arm64.deb とlibgl1-mesa-xlnx-dri_20.2.6-0ubuntu0.20.04.1_arm64.deb を展開先のディレクトリにコピーしておきます。


```console
fpga@ubuntu-fpga:~/work$ mkdir $PWD/$targetdir
fpga@ubuntu-fpga:~/work$ sudo tar xfz ubuntu20.04-console-rootfs.tgz -C $PWD/$targetdir 
fpga@ubuntu-fpga:~/work$ sudo cp  xserver-xorg-video-armsoc-xilinx_1.5-alpha2_arm64.deb $PWD/$targetdir/home/fpga/debian/
fpga@ubuntu-fpga:~/work$ sudo cp libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0.20.04.1_arm64.deb  $PWD/$targetdir/home/fpga/debian/
fpga@ubuntu-fpga:~/work$ sudo mount -vt proc proc                            $PWD/$targetdir/proc
fpga@ubuntu-fpga:~/work$ sudo mount -vt devpts devpts -o gid=5,mode=620      $PWD/$targetdir/dev/pts
```



## ステージ２


これ以降は chroot を使って Root File System を構築します。


```console
fpga@ubuntu-fpga:~/work$ sudo chroot $PWD/$targetdir
```





### 　Ubuntu Desktop パッケージのインストール



```console
ubuntu20.04-rootfs# apt-get install -y ubuntu-desktop
```



### 　DDX Xlnx Debian パッケージのインストール



```console
ubuntu20.04-rootfs# dpkg -i /home/fpga/debian/xserver-xorg-video-armsoc-xilinx_1.5-alpha8_arm64.deb
```



### 　DRI Lima Debian パッケージのインストール



```console
ubuntu20.04-rootfs# dpkg -i /home/fpga/debian/libgl1-mesa-xlnx-dri_20.2.6-0ubuntu0~20.04.1_arm64.deb
```



### 　xorg.conf の編集



```console
ubuntu20.04-rootfs#  cp cat <<EOT > /etc/X11
Section	"Device"
	Identifier	"ZynqMP"
	Driver		"armsoc"
	Option		"DRI"		"3"
	Option		"NoFlip"	"false"
	Option		"Debug"		"false"
EndSection
Section	"Screen"
	Identifier	"DefaultScreen"
	Device		"ZynqMP"
EndSection
EOT
```



### 　LightDM のインストール


現状、Gnome 標準の Display Manager は何故か動作しません(現在原因究明中)。そこで LightDM を Display Manager としてインストールします。


```console
ubuntu20.04-rootfs# apt install -y libpam-gnome-keyring libpam-kwallet5
ubuntu20.04-rootfs# apt install -y lightdm lightdm-settings slick-greeter
```



### 　サスペンドを無効にする


現状、Ultra96/Ultra96-V2 では、一度サスペンドモードに入ると復帰する手段がありません。そのため、Gnome Desktop でサスペンドに入らないようにする必要があります。具体的には次のように systemctl で mask してしまいます。サスペンドモードを無効にする方法は wiki.debian.org/Suspend にありました。


```console
ubuntu20.04-rootfs# systemctl mask sleep.target suspend.target hybrid-sleep.target
```



### 　Upower Service のワークアラウンド



```console
ubuntu20.04-rootfs# sed -i -e 's/PrivateUsers=yes/#PrivateUsers=yes/g'             /usr/lib/systemd/system/upower.service
ubuntu20.04-rootfs# sed -i -e 's/RestrictNamespaces=yes/#RestrictNamespaces=yes/g' /usr/lib/systemd/system/upower.service
```



### 　Gtk アプリケーションクラッシュのワークアラウンド


Gtk アプリケーションがクラッシュすることがあります。詳細は以下の URL を参照してください。

* https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/159


```console
ubuntu20.04-rootfs# update-mime-database /usr/share/mime
ubuntu20.04-rootfs# /usr/lib/aarch64-linux-gnu/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --update-cache
```





### 　APT Cache の掃除


APT Cache に大量にダウンロードしたパッケージがキャッシュされていますが、そのままだと Root File System が大きくなるので、掃除して身軽にしておきます。


```console
ubuntu20.04-rootfs# apt-get clean
```



### 　後始末



```console
ubuntu20.04-rootfs# exit
fpga@ubuntu-fpga:~/work$ sudo rm -f  $PWD/$targetdir/usr/bin/qemu-aarch64-static
fpga@ubuntu-fpga:~/work$ sudo umount $PWD/$targetdir/proc
fpga@ubuntu-fpga:~/work$ sudo umount $PWD/$targetdir/dev/pts
```



## ubuntu20.04-desktop-rootfs.tgz のビルド



```console
shell$ cd $PWD/$targetdir
shell$ sudo tar cfz ../ubuntu20.04-desktop-rootfs.tgz *
```





# 参考


* https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu20.04-Lima-Ultra96
* https://github.com/ikwzm/mesa-xlnx
* https://github.com/ikwzm/xf86-video-armsoc-xilinx 



[概要編]: https://qiita.com/ikwzm/items/642df8c14fd3a9e782b6 "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(概要編)』@Qiita"
[DRM Lima 編]: https://qiita.com/ikwzm/items/91adfcf05e767d33be70 "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(DRM Lima 編)』@Qiita"
[DRI Lima 編]: https://qiita.com/ikwzm/items/ec29ae456ead67438733 "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(DRI Lima 編)』@Qiita"
[共有バッファ編]: https://qiita.com/ikwzm/items/ed2ce2d8bb90391d7c65 "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(共有バッファ編)』@Qiita"
[ストライド問題編]: https://qiita.com/ikwzm/items/5c4c0114c15cfba8e95b "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(ストライド問題編)』@Qiita"
[インストール編]: https://qiita.com/ikwzm/items/4dfb8f06ddf9d59e310c "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(インストール編)』@Qiita"
[Ubuntu Desktop ビルド編]: https://qiita.com/ikwzm/items/21a59e68d30ad9faad6a "『Ultra96/Ultra96-V2 向け Ubuntu20.04で Lima を動かしてみた(Ubuntu Desktop ビルド編)』@Qiita"
[Lima]: https://gitlab.freedesktop.org/lima/web "Lima Website"
[DRI]: https://dri.freedesktop.org/wiki "Mesa 3D and Direct Rendering Infrastructure wiki"
[DRI(Direct Rendering Infrastructure)]: https://dri.freedesktop.org/wiki "Mesa 3D and Direct Rendering Infrastructure wiki"