はじめに
Ultra96V2ボードの環境構築をした際の備忘録です。
思い出しながら後から修正している部分もあるのでおかしいところがあったらご指摘頂ければ幸いです。
ボードの情報
回路図、BSP、ドキュメントなどは下記から入手できます。
- http://zedboard.org/product/ultra96-v2-development-board
- https://www.element14.com/community/community/designcenter/zedboardcommunity/ultra96?ICID=zedboardCMTY-side-navigation&
ikwzm 氏の Debianイメージ
イメージ本体
VirtualBoxとかでSDカードのパーティーション切るときは安定しない場合はUSBカードリーダーを2.0ポートにさすと無難な模様です(遅いですが)。
SD Association 公式の SDフォーマッタ使うと
パーティーションは先頭に4Mほど空領域ができるようです(クラスタとFlashのブロックの境界がそろいパフォーマンスが出るようです)。
VirtualBoxのUbuntuを使っていますが USBのSDカードリーダーを「デバイス」→「USB」で選ぶと、UbuntuからSDカードが見えるようになります。
私は Ubuntu から gparted を使ってGUIでパーティーション設定をしています。
gparted 右上のところでSDカードのマウントされているディスクを選んでください(この図では /dev/sdc でした)。
今回は FAT16 領域を "ULTRA96"、 ext4 領域を "rootfs" でラベルを付けています。
Ubuntuの場合、後のこの名前で /media/ の下に自動でマウントされるようなのでそのままやっています。
あとは手順通り
git clone -b v2019.2.1 https://github.com/ikwzm/ZynqMP-FPGA-Linux
cd ZynqMP-FPGA-Linux
git lfs pull
でイメージ取得して
sudo cp target/Ultra96-V2/boot/* /media/$USER/ULTRA96
sudo tar xzvf debian10-rootfs-vanilla.tgz -C /media/$USER/rootfs
sync
sudo mkdir /media/$USER/rootfs/home/fpga/debian
sudo cp linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb /media/$USER/rootfs/home/fpga/debian
sudo cp linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb /media/$USER/rootfs/home/fpga/debian
sudo cp fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb /media/$USER/rootfs/home/fpga/debian
sudo cp udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb /media/$USER/rootfs/home/fpga/debian
sudo cp u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb /media/$USER/rootfs/home/fpga/debian
sync
ファイルをコピーした後 sync しておくことをお勧めします。
sudo mkdir /media/$USER/rootfs/mnt/boot
sudo nano /media/$USER/rootfs/etc/fstab
として
/dev/mmcblk0p1 /mnt/boot auto defaults 0 0
を追加します。
UART (JTAGカードなど) もしくは、DisplayPort があれば、コンソール使えるようなので、後半の設定はUltra96上でやった方が楽かもしれません。
ちなみに私は DisplayPortは AMC-MDPHD を使っています。
JTAG用の修正
v2019.2版では最初から設定されているので不要ですが、v2019.1版では uEnv.txt に cpuidle.off=1 を追加すると良いようです。以下情報元です。
- http://nahitafu.cocolog-nifty.com/nahitafu/2018/10/ultrascalejtagl.html
- https://qiita.com/ikwzm/items/e5e906309a5974615d40
ネットワークの設定
こちらを参考に設定すれば WiFi も繋がるようです(私は諸事情からもっぱらUSB-LANで有線接続しています)。
Ultra96V2で debian 起動
Ultra96V2 に準備したSDカードを取り付け起動します。
ユーザーは fpga (パスワードもfpga)で login して、説明通り
時刻合わせ
この段階で WiFi が繋がっていれば自動で時刻合わせされるのですが、そうでない場合はここで一度手動で時刻を設定しないと、この後のパッケージのインストールで躓くことがあるようです。
sudo date -s "06/13 16:05 2021"
のような感じで時刻の設定が可能です(中の日付は書き換えてください)。
パッケージインストール
cd /home/fpga/debian
sudo dpkg -i linux-image-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb
sudo dpkg -i linux-headers-4.19.0-xlnx-v2019.2-zynqmp-fpga_4.19.0-xlnx-v2019.2-zynqmp-fpga-2_arm64.deb
sudo dpkg -i fclkcfg-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.3.0-1_arm64.deb
sudo dpkg -i udmabuf-4.19.0-xlnx-v2019.2-zynqmp-fpga_1.4.6-0_arm64.deb
sudo dpkg -i u-dma-buf-4.19.0-xlnx-v2019.2-zynqmp-fpga_2.1.3-0_arm64.deb
としておきます。
ホスト名設定
他にも Zybo など複数のボードを持っている人は hostname が同じだと紛らわしいので名前変更しています。
今回は
sudo nano /etc/hostname
として debian-fpga を debian-ultra96 に変更しました。
変更して再起動すると 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
にしておけばフルアクセスできます。
さらに [global] のセクションに
unix extensions = no
wide links = yes
を足すと、シンボリックリンクの先もアクセスできるようです。
ssh と X-Windowポート転送
TeraTermの「設定」->「SSHポート転送」で「リモートのXアプリケーションをXサーバーに表示する」をONにして、「設定」->「設定の保存」。TeraTerm再起動して、sshで接続します。
Windows側にはXmingなどを入れておきましょう。
sudo apt update
sudo apt upgrade
sudo apt install -y xauth
sudo apt install -y x11-apps
sshd_config は X11Forwarding yes とすればよいはずです。当初 xauth を入れ忘れていて嵌りました。ご注意ください。
xclock &
xeyes &
として動作確認します。
Zynq の場合各種の制御に sudo コマンドを付けてプログラムを実行することも多いと思います。
.profile に
export XAUTHORITY=$HOME/.Xauthority
を追加しておけば sudo でも X が使えるようになるようです。
Python設定
やりかけですが
sudo pip3 install jupyter
sudo pip3 install matplotlib
などpipでいろいろインストール可能です。
jupyter もきちんと設定すればPCから接続可能です。
OpenCV
今回は OpenCV3 を入れています。
私が以前使ったスクリプトを ここ に置いておきます。
適当なディレクトリに 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
OpenCV の imshow 関数で Xに画像表示したら
「Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files」というエラーが出たこといがあったのですが
sudo apt install at-spi2-core
としたら直ると書いてあったのでやってみたところ直りました。
USBカメラ
sudo apt install usbutils
C270を接続して試したところ lsusb では「Logitech, Inc. Webcam C270」と出てきました。
sudo apt install fswebcam
sudo fswebcam test.jpg
で、画像は test.jpg に取り込めました。
sudo を不要にするには
sudo usermod -a -G video username
sudo chmod a+rw /dev/video0
で行けそうです。
bootgen
PLを使うアプリで必要となるので bootgenも入れておきます。
git clone https://github.com/Xilinx/bootgen
cd bootgen/
make
sudo cp bootgen /usr/local/bin/
シャットダウン
シャットダウンする場合は
sudo shutdown -h now
もしくは
sudo poweroff
とすると 2019.2版から電源が落ちるようになっている模様です(素晴らしいです)。
(haltコマンドだと電源切れない?)
おしらせ
2020/10/30 にて Qrunch がサービス終了したので移転してきた記事となります。
一時退避場所:https://github.com/ryuz/qrunch_blog