2021/11/6 追記:
udev ルール作成後に usermod
の記述を追加
続いて、必須な開発環境構築です。
これに限らず、FPGA の IDE は Mac に対応していません。Windows か Linux のみの対応であることがほとんどです。
個人的に Mac でやりたかったのですが、仕方ありません。ここでは仮想マシンを使った開発環境をします。
VirtualBox 上にインストールした Linux(僕の場合は Arch Linux) 上に環境構築するのですが、若干ハマったところがあったのでご紹介します。
これは Ubuntu や CentOS で試しても同様のハマり方をしたので、みなさんのお役に立てると思います。
環境
- ホストOS: macOS Mojave
- 仮想PC: VirtualBox + Vagrant
- ゲストOS: Arch Linux
環境構築
早速紹介していきます。Linux 版のインストール方法や IDE の使用方法はこの記事を参考にしました。
取り敢えず Vagrant + Arch Linux という点でのやり方を付け足しながら書いていこうかなと思います。
Ubuntu 等の機能モリモリディストリビューションで、かつ Vagrant を使わず仮想マシンのウィンドウ上で作業をするならばリンク先のみで良いんでしょうけど、今回はある意味特殊な環境なので解説を進めていきます。
インストール
取り敢えず OS のインストールをしましょう。Vagrant ならすべてコマンドでサクサクできて簡単です。
# まずはVagrant実行用の空ディレクトリを作る
$ mkdir vagrant
$ cd vagrant
$ vagrant box add archlinux/archlinux # VirtualBox に Arch Linux のゲストOSを追加
==> box: Loading metadata for box 'archlinux/archlinux'
box: URL: https://vagrantcloud.com/archlinux/archlinux
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
1) libvirt
2) virtualbox
Enter your choice: 2
$ vagrant init archlinux/archlinux # 起動用のVagrantfile生成
以上で、仮想マシンの準備が整いました。
ゲストOS側で準備
起動・アプデ
続いてデフォルトの状態から、IDE を起動できるように各種設定やライブラリのインストールをしていきたいと思います。以下は Vagrant を使う上での基本です。
$ vagrant up # 仮想マシン起動
$ vagrant ssh # SSH接続
ひとまずパッケージをアップデートしておきます。
[vagrant@archlinux ~]$ sudo pacman -Syu # パッケージをすべてアップデート
[vagrant@archlinux ~]$ reboot # とりあえず再起動。この後再度 vagrant ssh をする。
IDEをダウンロード・そのための環境構築
ダウンロードして、環境変数の設定をします。
まずはダウンロード。Arch Linux ではダウンロードソフトである wget
さえも入っていませんので、これを pacman
でインストールすることから始めます。
[vagrant@archlinux ~]$ sudo pacman -S wget
[vagrant@archlinux ~]$ wget http://cdn.gowinsemi.com.cn/Gowin_V1.9.3Beta_linux.tar.gz
そうしたら展開先ディレクトリを用意して展開します。
[vagrant@archlinux ~]$ mkdir gowin
[vagrant@archlinux ~]$ tar vxf Gowin_V1.9.3Beta_linux.tar.gz -C gowin
続いて IDE 用の環境変数準備です。ついでにパス通しましょうか。これにより、コマンド名のみを入力するだけで IDE を起動できます。
[vagrant@archlinux ~]$ echo 'export LM_LICENSE_FILE=27020@45.33.107.56' >> ~/.bashrc
[vagrant@archlinux ~]$ echo 'export PATH="gowin/IDE/bin:$PATH"' >> ~/.bashrc
[vagrant@archlinux ~]$ exec bash
続いてライブラリのインストールです。とりあえず fontconfig
だけでいいっぽい。
[vagrant@archlinux ~]$ sudo pacman -S fontconfig
よし、じゃあ実行してみましょう。
[vagrant@archlinux ~]$ gw_ide
gw_ide: symbol lookup error: /usr/lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
あれ??どうやら fontconfig
が認識されているようですが、libfontconfig
とのバージョンが合わないため整合性が取れていないようです。ここが一番ハマりました。
ちなみに、現状どうなっているんでしょう。取り敢えず libfreetype
の様子を見てみましょう。ldd
を使うと、実行するバイナリが必要とするライブラリファイル、およびその参照先がわかります。
[vagrant@archlinux ~]$ ldd gowin/IDE/bin/gw_ide | grep freetype
libfreetype.so.6 => /home/vagrant/gowin/IDE/bin/../lib/libfreetype.so.6 (0x0000003e25a00000)
むむ、どうやら先程展開した IDE のファイル中に、謎に libfreetype
が同梱されているようです。なんだかよくわからないし、これがコンフリクトを起こしていたら困るので、適当にリネームしてしまいます。ちなみにこれは他の Linux OS を使う人にも必須の操作だと思います。
[vagrant@archlinux ~]$ mv gowin/IDE/lib/libfreetype.so.6{,.old}
これでええやろ、と実行。なんと成功してしまいました(ライブラリに関するエラーは出ていない)。
[vagrant@archlinux ~]$ gw_ide
gw_ide: cannot connect to X server
このエラーは...
X Serverのインストール
Linux で GUI 環境を提供する X Server が入っていないので、このようなエラーが出るのは当たり前です。
とはいえ、この対処法はだいたい手順が決まっているので、気軽に解決できます。以下のように。
[vagrant@archlinux ~]$ sudo pacman -S xorg-server xorg-xinit xorg-xauth
[vagrant@archlinux ~]$ sudo pacman -S vim # お好きなテキストエディタ。僕はVim派だ。
[vagrant@archlinux ~]$ sudo vim /etc/ssh/sshd_config
# X11Forwardingのところのコメントを解除し、noをyesに変える
[vagrant@archlinux ~]$ sudo systemctl restart sshd # sshdを再起動
[vagrant@archlinux ~]$ exit # 一旦ログアウト
通常、ネットワーク経由でサーバー等に接続する際は再度 ssh 接続すればこれで解決できますが、今回は Vagrant を使っているため、話が異なります。
どこで得た情報か忘れましたが、一旦ホストOS(Mac等) に戻って以下のおまじないを Vagrantfile
に追加で記載すれば Vagrant 側で X11 に対応出来るらしいです。
config.ssh.forward_x11 = true
config.ssh.forward_agent = true
そしたら ssh 接続してみましょう。なお Mac の場合は XQuartz という X11 用のクライアントアプリをインストールする必要があります。ググってくだされ。
$ vagrant ssh
Last login: Tue Dec 24 04:37:21 2019 from 10.0.2.2
/usr/bin/xauth: file /home/vagrant/.Xauthority does not exist
$ gowin/IDE/bin/gw_ide # 取り敢えず起動するはず
初回起動時にエラーで怒られますが、一応起動できたはずです。これらのエラーは次回以降出ませんのでご安心あれ。
しかしながら GUI 用(?)のフォントを入れていないため、文字が潰れてすごいことになっていると思います。なので追加でインストール。そして再度 IDE を実行します。
[vagrant@archlinux ~]$ sudo pacman -S otf-ipafont
[vagrant@archlinux ~]$ gw_ide
ふぅ。これでやっとまともに IDE が起動できたはずです。ここから IDE の設定に移ります。Sipeed の Floating Server によってライセンスを使用しますので、以下のように設定してください。これは必須です。
Use Floating License Server を選んで、Serverに45.33.107.56, Portに10559を入力する。そうして再度 IDE を立ち上げると、スプラッシュスクリーン表示後にこのようなメイン画面が出ます。
ここまで来たら一応開発環境の導入完了です。
VirtualBoxでUSBを認識させる
続いて、VirtualBox 側で USB デバイスをゲストに認識させることが出来るように Extension をインストールします。まずは先立ってそれ用のファイルを作成しておきましょう。これは後で使います。
次のファイルを /etc/udev/rules.d/50-tang-nano.rules
に配置。
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ATTRS{product}=="Sipeed-Debug", GROUP="users", MODE="0666"
そしたら取り敢えず VM を終了です。
$ vagrant halt
このサイトを参考に Extension Pack をインストールしてください。詳細は省きますよ。
終わったら、Tang Nano を PC に接続、VirtualBox の VM マネージャーウィンドウ上で arch_default_... を右クリックして設定ウィンドウを出しましょう。
こんな感じでUSB デバイスを追加します。
そして VM をスタート。
$ vagrant up
$ vagrant ssh
Arch Linux側でUSBへのアクセス権限をなんとかする
先程保存したファイルを適用すれば、一般ユーザーでも USB デバイス(この場合は Tang Nano のこと)に sudo
なしでアクセスすることができます。
先程のルールは users グループに属するユーザーに権限を付与するものなので、自分がそのグループに入っていない場合は追加する必要があります。
# 自分がusersグループに入っているか確認
$ getent group users
users:x:985:
# ユーザー"vagrant" が含まれていないので追加
$ sudo usermod -aG users vagrant
$ getent group users
users:x:985:vagrant
これが終わったらプログラマで確認。
[vagrant@archlinux ~]$ sudo modprobe -r ftdi_sio
[vagrant@archlinux ~]$ cd gowin/Programmer/bin
[vagrant@archlinux ~]$ ./programmer_cli --channel 0 --device GW1N-1 --operation_index 0
"Read Device Codes" starting on device-1...
ID code is: 0x0900281B
User code is: 0x0000496F
Status code is: 0x0001F020
Cost 0.58 second(s)
この modprobe
だけはデバイスの付け外し、マシンの再起動時に実行する必要があります。
〆
お疲れ様でした。次はいよいよLチカです。