aster_ismの工作室

FPGAとかマイコンとか

Windows用Vivado開発環境

毎回Vivadoの環境を構築するときに、どうだったかなぁと忘れてしまっているので個人向けのメモ。 概要としては、Surface Pro 4(Windows10)のHyper-V上のUbuntu 16.04に開発ツールをインストールする。

FPGA-PC間は下記のような接続構成を取る。

Hyper-V上からUSB-JTAGにアクセスできると一番いいのだが、簡単にできなかったのでWindows用のHardware Serverのみをインストールしている。 これによりUbuntu上のVivado/SDK等とFPGAは仮想ネットワークを介してアクセスが可能となる。

手順

  1. MobaXtermのインストール/Windowsの設定
  2. Hyper-Vの設定
  3. Ubuntuのインストール/設定
  4. Xilinxツールのインストール
  5. 動作確認

MobaXtermの設定/Windowsの設定

MobaXtermについて

MobaXtermは、 高機能なSSHクライアント?(機能が多すぎてこの表現は適切じゃない気がする)で、シリアル通信にも対応しています。今回の場合、SSHUbuntuに接続してGUIのVivadoも使いたい訳ですが、Xサーバの設定もMobaXtermの場合、特に弄ることもなく簡単にできるのでおすすめです。また、UART接続を含めターミナルをすべて1つのウインドウで管理できるのも便利なので使っている理由の1つです。無料版は設定のカスタマイズ、作成できるセッション数などに制限がありますが、今回の環境では無料版でも問題ありません。

Windowsの設定

Windows側の設定として、Windows<->Linuxのファイル共有を行うために、共有用のユーザとディレクトリ作成を行っておきます。

スタートメニューを右クリックして「コンピュータの管理」を開き、ローカルユーザとグループのユーザをクリック。 操作の他の操作から「新しいユーザー」を実行し、ユーザ名、パスワードを設定する。

共有フォルダの共有をクリック。他の操作から「新しい共有」を実行。共有するディレクトリを選択する。

先ほど作成したユーザに対してアクセス権を設定する。Windowsのアクセス権はよくわからないのですが、2種類あるらしい。 ファイル共有はNTFSアクセス権と共有アクセス権のどちらで設定?。ここと同じようにセキュリティ側にユーザを設定する。 追加でオブジェクト名に先ほど作成したユーザ名を入力して、名前の確認を実行、OK。 セキュリティとしては、読書きを行うので「変更」を設定。

これで共有用のユーザとフォルダが作成できた。

Hyper-Vの設定

Hyper-Vの有効化

Windows10のスタートメニューで「Hyper-V」と入力すると「設定」の「Windowsの機能の有効化と無効化」が表示されるので実行する。「Hyper-V」にチェックを入れて「OK」をクリックする。再起動後に「Windows管理ツール」に「Hyper-Vマネージャ」がスタートメニューに追加される。

仮想ネットワークスイッチの作成

基本的に自宅のネットワークはDHCPIPアドレスを設定しているため、毎回ホストOS-ゲストOS間で通信を行うのにIPアドレスが変わるのは困る。当然、DHCPからIPがもらえないオフライン状況でもゲストOSとの間で通信は行いたいので、ゲストOSにはNICを2つ作成し、その上で仮想スイッチを2つ使ってホストOS-ゲストOSをDHCPからIPをもらうネットワーク(External)と固定IPで接続するネットワーク(Internal)を作成する。

「仮想スイッチマネージャー」から2つのスイッチを作成する

スイッチが作成出来たら、「ネットワークと共有センター」を開いて、Internal側を固定IPに設定する。DHCPと被らない適当なIPを設定する。例では、192.168.128.1。

Ubuntuのインストール/設定

新規にOS用の仮想ハードディスクを作成する。基本的にOSをインストールするだけなので、20GBあれば十分。また、容量可変で作成すると実際に使用された分のみ使われるので良い。なお、ツールのインストールディレクトリやホームディレクトリはOSインストール後に別の仮想ハードディスクに設定する。 インストールメディアとして、Ubuntu Server 16.04を設定する。ネットワークワークアダプタを追加し、1つ目に「External」、2つ目に「Internal」を指定する。

作成した仮想OSを選択して、「接続」をクリック。その後「起動」する。

基本的なインストールは普通に行えば良いが、Petalinuxが日本語環境だと使えないので、Englishでインストールすることをオススメする。また、primary networkは eth0のExternal側を設定する。また、Open SSH Serverをインストールするようにする。

ログイン画面が表示されればインストール完了。

固定IPの設定とMobaXtermからの接続

インターフェイスの設定を編集

$ sudo vi /etc/network/interface

下記eth1の設定を追加する

    auto eth1
    iface eth1 inet static
      address 192.168.128.2
      netmask 255.255.255.0

インターフェイスの起動

$ sudo ifup eth1

eth1にIPが設定されているか確認する

$ ifconfig -a
    eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
              inet addr:192.168.1.102  Bcast:192.168.1.255  Mask:255.255.255.0
              ...(省略)...
    eth1      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
              inet addr:192.168.128.2  Bcast:192.168.128.255  Mask:255.255.255.0
              ...(省略)...

eth1 に固定IPで 192.168.128.2 が設定された。

MobaXtermから接続

IP等が正しく設定されていれば、Windows上のターミナルエミュレータからもアクセス可能となる。ターミナルエミュレータはXサーバやその他シリアル接続等がタブで管理できるMobaXtermが便利であるので、これを使用する。 http://mobaxterm.mobatek.net/

インストールしたら「Sesson」から「SSH」を選択して、接続先のPCの設定を行う(画像のIPは別のマシンのため上記設定と異なる)。 ※この際、「Advanced SSH Settings」の中の「Follow SSH path (experimental)」をチェックしておくと、cd 等で移動した際に、左に表示されるsftpのディレクトリも一緒に更新される。パスワードを入力して接続できればOK。

ここまでできたらとりあえず更新を行っておく。

$ sudo apt-get update
$ sudo apt-get upgrade -y
ツールインストール用・ホーム用ディスクの接続/共有フォルダのマウント

バックアップやツールの変更を容易にするため(Vivadoの色々なバージョンをSurfaceにインストールするのは容量的に厳しいので、仮想HDDごと外付けHDDに保存しており、必要な時にマウントしている)。 一旦、OSのシャットダウンを行って、OSをインストールした仮想ハードディスク同様に新規HDDを2つ作成し、SCSIコントローラに接続する。 この際、Vivado・SDK・Petalinux(sstate-cache含む)をインストールすると60GB近くなるので注意する。

最終的に下記のような接続になる。

コントローラ 場所 ディスクファイル
IDEコントローラ0 0 ubuntu.vhdx (OS用接続済)
IDEコントローラ1 0 DVDドライブ
SCSIコントローラ 0 home.vhdx
SCSIコントローラ 1 Xilinx2016.2.vhdx

再度OSを起動して、フォーマット等を行う。下記はツール用ディスク(/dev/sdc)の例。 フォーマット時にUUIDが表示されるので控えておく。

$ sudo fdisk /dev/sdc
    
    Welcome to fdisk (util-linux 2.27.1).
    
    Command (m for help): n
    Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1):
    First sector (2048-125829119, default 2048):
    Last sector, +sectors or +size{K,M,G,T,P} (2048-125829119, default 125829119):
    
    Created a new partition 1 of type 'Linux' and of size 60 GiB.
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    
$ sudo mkfs.ext4 /dev/sdc1
    mke2fs 1.42.13 (17-May-2015)
    Discarding device blocks: done
    Creating filesystem with 15728384 4k blocks and 3932160 inodes
    Filesystem UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624, 11239424
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
$ sudo mkdir /mnt/Xilinx
$ sudo mount /dev/sdb1 /mnt/Xilinx
$ sudo mkdir /mnt/Xilinx/2017.2
$ sudo chown aster_ism. /mnt/Xilinx/2017.2
$ cd /opt
$ sudo ln -s /mnt/Xilinx/2017.2 Xilinx

こんな感じでツールのHDDをマウントする。ホームディレクトリも同様、ただし既にファイルが作成されているのであれば、マウント後にコピーする。

Windows側で作成した共有フォルダをマウントする。touchなどでファイルの読書きができることを確認する。

$ sudo apt-get install cifs-utils
$ sudo mkdir /mnt/windows
$ sudo mount -t cifs -o username=hyperv,password=*****,uid=1000,gid=1000 //192.168.128.1/share /mnt/windows
$ touch /mnt/windows/hoge

マウントが問題なければ /etc/fstab に記載する。 共有フォルダのパスワードを書くのは微妙ですが、共有用専用のアカウントなので、とりあえず直書き。 仮想HDDのUUIDはフォーマット時に控えたものを使用。

UUID=xxxxxxxxxxxxxxxx /home     ext4    defaults        0       0
UUID=xxxxxxxxxxxxxxxx /mnt/Xilinx     ext4    defaults        0       0
//192.168.192.1/share /mnt/windows cifs username=hyperv,password=*****,uid=1000,gid=1000 0 0

再起動して、問題なくマウントされるかを確認する。

Xilinxツールのインストール

依存ツールのインストール

まずは、依存関係があるツールをインストールしておく。 gist.github.com

Vivado/SDKインストール

インストールファイルを展開後、バッチインストールのコンフィグファイルを作成・編集する。 SDKのインストール、デバイスの有無等を選択して、インストールの実行。

$ tar zxvf <media>/Xilinx_Vivado_SDK_2017.1_0415_1.tar.gz
$ cd Xilinx_Vivado_SDK_2017.1_0415_1
$ ./xsetup -b ConfigGen 
$ vi install_config.txt

$ ./xsetup --agree XilinxEULA,3rdPartyEULA,WebTalkTerms --batch Install --config install_config.txt
Petalinux インストール

PetaLinuxのインストーラを実行する。途中下記3つライセンスの確認がでるので、qでライセンス条項の画面を消し、yで同意する。 「Xilinx End User License Agreement」「Webtalk Terms and Conditions」「Third Party End User License Agreement」

$ ./petalinux-v2017.2-final-installer.run /opt/Xilinx/Petalinux/2017.2
    INFO: Checking installer checksum...
    INFO: Extracting PetaLinux installer...
    INFO: Installing PetaLinux...
    INFO: Checking PetaLinux installer integrity...
    INFO: Extracting Installation files...
    
    LICENSE AGREEMENTS
    
    PetaLinux SDK contains software from a number of sources.  Please review
    the following licenses and indicate your acceptance of each to continue.
    
    You do not have to accept the licenses, however if you do not then you may
    not use PetaLinux SDK.
    
    Use PgUp/PgDn to navigate the license viewer, and press 'q' to close
    
    Press Enter to display the license agreements
    Do you accept Xilinx End User License Agreement? [y/N] > y
    Do you accept Webtalk Terms and Conditions? [y/N] > y
    Do you accept Third Party End User License Agreement? [y/N] > y
    INFO: Checking installation environment requirements...
    INFO: Checking free disk space
    ...(省略)...
    INFO: PetaLinux Yocto SDK for microblaze has been successfully installed.
    INFO: PetaLinux SDK has been installed to /opt/Xilinx/Petalinux/2017.2//.
Hardware Serverのインストール

Windows用のHardware Serverをダウンロードしてインストールする。

なお、自分の環境では「管理者として実行」を行わないとケーブルドライバをインストールするとブルースクリーンとなる。 また、下記、環境変数を設定しないと永遠とVisual C++ランタイムのインストールが促される

XIL_PA_NO_REDIST_CHECK = 1 

MobaXtermにHardware Server起動用のセッションを作成する。

動作確認

Vivado/SDK/Petalinux等を実行できるか確認する(GUIも含む)。

JTAG接続

ボードのUSBドライバをインストールする。 ボードを接続し、Hardware ServerをMobaXterm上で立ち上げておく。 VivadoのHardware Managerを起動し、Open New Target...を行う。 IPにWindowsの固定IPを設定して、デバイス情報が取得できるか確認する。