2017年1月26日木曜日

ド素人からはじめるFPGA ~ Ubuntu & Vivado環境構築 篇~

WindowsだとVivadoのインストールが完了すれば直ぐにFPGAの開発に取り掛かれますが、Linux環境では諸々設定しないと動きません。

私の場合は、手頃なWindowsでの開発環境が手元になく仮想化やデータベースの検証用に使っていたLinuxマシンを使用する事にしました。

これは、VivdoをLinux環境で使用するにあたり、問題が生じた点と解決法などを自分用に記録したものです。


まずは、以下が私の環境となります。

Host PC : Intel NUC5i3RY
Client PC : Mac mini
OS : Ubuntu Server 16.04.1 LTS
IDE : Vivado HLx 2016.4: WebPACK Edition + SDK
FPGA Board : Digilent Zybo Zynq-7000 ARM/FPGA SoC Trainer Board 


MacからリモートでLinuxマシンにアクセスしてVivadoを使用する事を前提とした環境となっています。

・Ubuntuのリモート環境設定

設定してある環境は、SSH ServerとXRDPです。
デスクトップはxfceやMATEなどに変更して軽量化してあります。

SSHは、MacにXQuartzなどをインストールしておけば、
~$ ssh -X ユーザー名@IPアドレス
でMac上のアプリの様にVivadoを起動して使用できます。
遅いですしウィンドウサイズも自由に変更し辛い(出来ないわけじゃない)ので、あまりオススメはしません。

と、ここまでは事前に組んであった環境の解説で、以降が本編となります。




・Vivadoのインストール

これは、解説が各所にあるので調べてインストールしてみましょう。

Vivado 2016.3インストール時と、Vivado 2016.4アップデート時はインストール完了後にVivado License Managerが起動してライセンス云々言われたんですが、この記録を取るための再確認で試した際には何も言われませんでした。何かしら変更あったのでしょうか?

・ケーブルドライバのインストール

これは以前にも書きましたが、ケーブルドライバはインストールしたVivadoのフォルダ上に入っているのでターミナルで下記コマンドを実行してインストールします。
~$ cd /opt/Xilinx/Vivado/2016.4/data/xicom/cable_drivers/lin64/install_script/install_drivers/
~$ sudo ./install_drivers
INFO: Installing cable drivers.
INFO: Script name = ./install_drivers
INFO: HostName = linuxマシンの名称
INFO: Current working dir = /opt/Xilinx/Vivado/2016.4/data/xicom/cable_drivers/lin64/install_script/install_drivers
INFO: Kernel version = 4.4.0-59-generic.
INFO: Arch = x86_64.
Successfully installed Digilent Cable Drivers
--File /etc/udev/rules.d/52-xilinx-pcusb.rules does not exist.
--File version of /etc/udev/rules.d/52-xilinx-pcusb.rules = 0000.
--Updating rules file.

INFO: Digilent Return code = 0
INFO: Xilinx Return code = 0
INFO: Return code = 0
INFO: Driver installation successful.
CRITICAL WARNING: Cable(s) on the system must be unplugged then plugged back in order for the driver scripts to update the cables.

・Vivado起動のための環境設定

Windows版と異なりLinux版では、PATHを通さないと起動すらしません。

エディタで"~/.bashrc"を開いて、最後の行に以下を付け加えておきます。

source /opt/Xilinx/Vivado/2016.4/settings64.sh
export SWT_GTK3=0

これで、Vivadoの起動は可能となりますが、使用にあたって諸問題が残っているので先にそちらを解消しておきます。

・Vivado Board Fileの準備

DigilentのHPからDLして
/opt/Xilinx/Vivado/2016.4/data/boards/board_files
へ入れれば完了です。

・ライブラリのインストール

Reference Operating System Setup Guide (Vivado 2015)
上記サイトはUbuntu 14.04 LTS、Vivado 2015.1を対象としておりバージョンは異なるのですが、基本的に行うべき対策は同じなので参考として進めます。

最初に"UG973"のリリースノートでも、
"Note: DocNav is a 32-bit application and requires the installation of 32-bit libraries on Linux in order to function."
と記載されているDocNavの32-bitライブラリをインストールします。

~$ sudo dpkg --add-architecture i386
~$ sudo apt update
~$ sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386

他にも不足しているライブラリがないか確認してみます。

~$ ldd /opt/Xilinx/DocNav/docnav 
linux-gate.so.1 =>  (0xf77b4000)
libQtWebKit.so.4 => /opt/Xilinx/DocNav/libQtWebKit.so.4 (0xf60f7000)
libQtXml.so.4 => /opt/Xilinx/DocNav/libQtXml.so.4 (0xf60af000)
libQtGui.so.4 => /opt/Xilinx/DocNav/libQtGui.so.4 (0xf5599000)
libQtNetwork.so.4 => /opt/Xilinx/DocNav/libQtNetwork.so.4 (0xf543c000)
libQtCore.so.4 => /opt/Xilinx/DocNav/libQtCore.so.4 (0xf5141000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf5109000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf4f92000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf4f3c000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf4f1f000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf4d69000)
libfontconfig.so.1 => not found
libfreetype.so.6 => not found
libXext.so.6 => not found
libX11.so.6 => not found
libXrender.so.1 => not found
libgthread-2.0.so.0 => not found
libglib-2.0.so.0 => not found
libpng12.so.0 => not found
libz.so.1 => not found
libfreetype.so.6 => not found
libgobject-2.0.so.0 => not found
libSM.so.6 => not found
libICE.so.6 => not found
libXrender.so.1 => not found
libfontconfig.so.1 => not found
libXext.so.6 => not found
libX11.so.6 => not found
libz.so.1 => not found
libz.so.1 => not found
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf4d60000)
libgthread-2.0.so.0 => not found
libglib-2.0.so.0 => not found
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf4d56000)
/lib/ld-linux.so.2 (0x56631000)

"not found"の箇所がライブラリがない事を意味するので、

~$ apt-cache search <regular_expression>

で不足ライブラリを調べてインストールしておきます。

~$ sudo apt install libfontconfig1:i386 libxext6:i386 libice6:i386 libxrender1:i386 libsm6:i386 libglib2.0-0:i386

まとめて書いてありますが、個別でないとインストール出来ないものあるようですので確認しましょう。

不足分がなくなればDocNavのライブラリインストールは終了です。

同様に"Vivado"、"SDK"、"Vivado_HLS"も確認してみました。
※"not found"の箇所だけ記載

/opt/Xilinx/Vivado/2016.4/bin/unwrapped/lnx64.o/vivado
librdi_commonmain.so => not found
libboost_signals.so => not found
librdi_common.so => not found
libtcmalloc.so.4 => not found

/opt/Xilinx/SDK/2016.4/bin/unwrapped/lnx64.o/rdi_xsdk
librdi_commonversion.so => not found
libboost_filesystem.so => not found
libboost_program_options.so => not found
librdi_common.so => not found

/opt/Xilinx/Vivado_HLS/2016.4/bin/unwrapped/lnx64.o/vivado_hls
librdi_common.so => not found
librdi_commonmain.so => not found

ただ、こちらは各"/opt/Xilinx/Vivado or SDK or Vivado_HLS/2016.4/lib/lnx64.o/"のフォルダの中にライブラリは存在しているのでインストールする必要はなさそうです。

次に、Vivado 2016.4と、Ubuntu 16.04とでバージョン差異があるため不具合が出るライブラリを事前に修正しておきます。

対象となるのは、たちまち以下の4つです。

/opt/Xilinx/Vivado/2016.4/ids_lite/ISE/lib/lin64/libstdc++.so.6
/opt/Xilinx/Vivado/2016.4/lib/lnx64.o/libstdc++.so.6
/opt/Xilinx/SDK/2016.4/lib/lnx64.o/libstdc++.so.6
/opt/Xilinx/Vivado_HLS/2016.4/lib/lnx64.o/libstdc++.so.6

上の3つを下記のUbuntu 16.04の最新のファイルに置き換えます。

/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21

置き換えはこんな感じで。

mv /opt/Xilinx/Vivado/2016.4/ids_lite/ISE/lib/lin64/libstdc++.so.6 /opt/Xilinx/Vivado/2016.4/ids_lite/ISE/lib/lin64/libstdc++.so.6.org
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /opt/Xilinx/Vivado/2016.4/ids_lite/ISE/lib/lin64/libstdc++.so.6
mv /opt/Xilinx/Vivado/2016.4/lib/lnx64.o/libstdc++.so.6 /opt/Xilinx/Vivado/2016.4/lib/lnx64.o/libstdc++.so.6.org
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /opt/Xilinx/Vivado/2016.4/lib/lnx64.o/libstdc++.so.6
mv /opt/Xilinx/SDK/2016.4/lib/lnx64.o/libstdc++.so.6 /opt/Xilinx/SDK/2016.4/lib/lnx64.o/libstdc++.so.6.org
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /opt/Xilinx/SDK/2016.4/lib/lnx64.o/libstdc++.so.6
mv /opt/Xilinx/Vivado_HLS/2016.4/lib/lnx64.o/libstdc++.so.6 /opt/Xilinx/Vivado_HLS/2016.4/lib/lnx64.o/libstdc++.so.6.org
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /opt/Xilinx/Vivado_HLS/2016.4/lib/lnx64.o/libstdc++.so.6:q"q

私は面倒なのでバッチにして、

~$ sudo modlib.sh

で、まとめて更新しました。

思い当たる箇所は一通り対応した感じなので、今後エラーが出ればまた追加していきます。

0 件のコメント:

コメントを投稿