ZYBO-Z7 Debian環境構築メモ

# ZYBO-Z7 環境構築の備忘録

Digilent社の[Zybo Z7](https://reference.digilentinc.com/reference/programmable-logic/zybo-z7/start)用に Debian 環境を構築した際の備忘録です。

当初 Windows10環境に VirtualBox や VMware をいれて Ubuntu18.04 を使っていましたが、現在は手持ちマシンで WSL2 と相性が悪く VMware Workstation 16 Player を使っています。


## ikwzm氏のdebianイメージ
有難く使わせていただきます。
https://qiita.com/ikwzm/items/7e90f0ca2165dbb9a577
(2021/04/03 現在 v1.3.0 が最新とのことです)


```
git clone --depth=1 --branch v1.3.0 git://github.com/ikwzm/FPGA-SoC-Linux
cd FPGA-SoC-Linux
git lfs pull
```

## 初期イメージ作成

あとは以下に従って入れていきます。
https://github.com/ikwzm/FPGA-SoC-Linux/blob/master/doc/install/zynq-zybo-z7.md

VMware の場合 「Player(P) -> 「取り外し可能デバイス(R)」からUSBカードリーダーをVMwareに割り当てています。
（VirtualBox の場合は 「デバイス」->「USB」に同じ機能があります）


なお、この時USB3.0だと不安定だったので私は2.0のポートにSDカードリーダーを繋いでいます。

パーティーションの作り方はいろいろありますが、私は gparted を使ってディスクを作っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285930/e189d145-030e-cc8b-4cad-e0366326af09.png)

なお、先頭にある空き領域はSDカード内のフラッシュメモリのブロック境界をクラスタ境界に揃えてアクセス効率を上げるためのものです。

今回は FAT16 領域を "ZYBO-Z7"、 ext4 領域を "rootfs" でラベルを付けています。
Ubuntuの場合、後のこの名前で /media/<username> の下に自動でマウントされるようなのでそのままやっています。

あとは手順通り

```
sudo cp target/zynq-zybo-z7/boot/* /media/$USER/ZYBO-Z7/
sudo tar xfz debian10-rootfs-vanilla.tgz -C /media/$USER/rootfs
sync

sudo mkdir /media/$USER/rootfs/home/fpga/debian
sudo cp linux-image-5.4.105-armv7-fpga_5.4.105-armv7-fpga-0_armhf.deb     /media/$USER/rootfs/home/fpga/debian
sudo cp linux-headers-5.4.105-armv7-fpga_5.4.105-armv7-fpga-0_armhf.deb   /media/$USER/rootfs/home/fpga/debian
sudo cp dtbocfg-ctrl_0.0.5-1_all.deb                                      /media/$USER/rootfs/home/fpga/debian
sudo cp dtbocfg-5.4.105-armv7-fpga_0.0.9-1_armhf.deb                      /media/$USER/rootfs/home/fpga/debian
sudo cp fclkcfg-5.4.105-armv7-fpga_1.7.2-1_armhf.deb                      /media/$USER/rootfs/home/fpga/debian
sudo cp u-dma-buf-5.4.105-armv7-fpga_3.2.4-0_armhf.deb                    /media/$USER/rootfs/home/fpga/debian
sudo cp zptty-5.4.105-armv7-fpga_1.0.0-1_armhf.deb                        /media/$USER/rootfs/home/fpga/debian
sudo cp zynq-afi-5.4.105-armv7-fpga_0.0.1-0_armhf.deb                     /media/$USER/rootfs/home/fpga/debian
sync

```

ファイルをコピーした後、キャッシュされている内容を確実にSDカードに書き込むために sync しておくことをお勧めします。


# ZYBO起動
ZYBOに準備したSDカードを取り付け起動します。
ユーザーは fpga (パスワードもfpga)で login して、説明通り

```
cd debian
sudo dpkg -i linux-image-5.4.105-armv7-fpga_5.4.105-armv7-fpga-0_armhf.deb
sudo dpkg -i dtbocfg-5.4.105-armv7-fpga_0.0.9-1_armhf.deb
sudo dpkg -i fclkcfg-5.4.105-armv7-fpga_1.7.2-1_armhf.deb
sudo dpkg -i u-dma-buf-5.4.105-armv7-fpga_3.2.4-0_armhf.deb
sudo dpkg -i zptty-5.4.105-armv7-fpga_1.0.0-1_armhf.deb
sudo dpkg -i zynq-afi-5.4.105-armv7-fpga_0.0.1-0_armhf.deb
sudo dpkg -i dtbocfg-ctrl_0.0.5-1_all.deb

sudo lsmod
sudo systemctl status device-tree-overlay.service
```

としておきます。
（以前まで udmabuf という名称だったドライバが u-dma-buf に変更されていますので古くからのユーザーの方は注意が必要なようです。）


## ホスト名設定

他にも Ultra96 など複数のボードを持っている人は hostname が同じだと紛らわしいので名前変更しています。

今回は

```
sudo nano /etc/hostname
```

として debian-fpga を debian-zybo-z7 に変更しました。

変更して再起動すると sudo するたびに「sudo: unable to resolve host」と出たので
https://qiita.com/ogomr/items/89e19829eb8cc08fcebb
にならって

```
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
```

としております。


## ユーザー作成

fpga というユーザー名でもいいのですが、github を使う場合などもあるので自分の名前でユーザーも作ります。

```
sudo adduser <username>
```

でユーザーを作ります

sudo権限もつけておきます。

```
sudo gpasswd -a <username> sudo
```


## Samba設定

Windowsからの利用が楽なように Samba の設定をします。

```
sudo pdbedit -a <username>
sudo nano /etc/samba/smb.conf
sudo systemctl restart smbd nmbd
```

smb.conf は [homes] セクションで

```
read only = no
```

にしておけばフルアクセスできます。

## ssh と X-Windowポート転送
TeraTermの「設定」->「SSHポート転送」で「リモートのXアプリケーションをXサーバーに表示する」をONにして、「設定」->「設定の保存」。TeraTerm再起動して、sshで接続。
Windows側には[Xming](https://ja.osdn.net/projects/sfnet_xming/)などを入れておく。

```
sudo apt update
sudo apt -y upgrade

sudo apt install -y xauth
sudo apt install -y x11-apps
```

sshd_config は X11Forwarding yes とすればよいはずだ。xauth を入れ忘れないように注意。

```
xclock &
xeyes &
```

として動作確認します。


## VS code の接続準備

.ssh/authorized_keys を準備しておけば後でVS code が繋がります。

作り方は[こちら](https://blog.masahiko.info/entry/2019/06/15/202003)を参考にさせて頂きました。


## OpenCV

今回は OpenCV3 を入れています。

私が以前使ったスクリプトを [ここ](https://github.com/ryuz/local_data/blob/master/setting/build_opencv3.sh) に置いておきます。

適当なディレクトリに build_opencv3.sh を置いて

```
sudo apt-get install -y cmake libeigen3-dev  
sudo apt-get install -y libgtk-3-dev qt5-default freeglut3-dev libvtk6-qt-dev  
sudo apt-get install -y libtbb-dev  
sudo apt-get install -y libjpeg-dev libpng++-dev libtiff-dev libopenexr-dev  libwebp-dev  
sudo apt-get install -y libhdf5-dev  
sudo apt-get install -y wget unzip  

sudo ./build_opencv3.sh
```

## bootgen

PLを使うアプリで必要となるので bootgenも入れておきます。

```
git clone https://github.com/Xilinx/bootgen
cd bootgen/
make
sudo cp bootgen /usr/local/bin/
```

## /dev/uio のパーミッション

/etc/udev/rules.d/70-uio.rules などのファイルを作って

```
SUBSYSTEM=="uio", GROUP="users", MODE="0666"
SUBSYSTEM=="udmabuf", GROUP="users", MODE="0666"
```

とすると、DeviceTree overlay 時に自動で権限が変わるようです。
私は udmabuf も一緒に記述してしまいました。

## git のバージョンアップ

初期状態の apt でインストールできる git のバージョンが古く git switch などが使えないので backports を設定して更新します。
ついでに tab で補完できるようにしておきます。

```
echo 'deb http://deb.debian.org/debian buster-backports main' | sudo tee -a /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports git
sudo apt install bash-completion
```


# おしらせ
2020/10/30 にて Qrunch がサービス終了したので移転してきた記事となります。
一時退避場所：https://github.com/ryuz/qrunch_blog