※完全に自分のメモ用です。説明を省略した部分が多いです。
はじめに
FPGAに触れる機会があり、Vivadoでの開発をそこそこやってみた。
Verilogに慣れてきたところで、Zybo Z7-10を弄ってみることにした、Zybo Z7-10はFPGAだけでなくCPUが搭載されており、ネットワークに接続して通信も可能。
ここまで聞いてLinuxを入れないことがあるだろうか。いやない。(反語)
いろいろ調べてみるとAMDデバイス用にLinuxディストリビューションが用意されていて、その名もPetaLinuxというらしい。今回の目標はPetaLinuxをZybo Z7-10上で動かしてみること。そのための手順を数カ月後に記憶喪失した自分に向けてメモしておく。
(追記) どうやらPetalinuxという名称はコンパイラの名前であって、FPGAに実装するLinuxの名前は"embedded linux"が正式名称らしい、ただこの呼び方はあまりにも抽象的すぎるので"Zynq linux"と呼ばれる場合もある。記事の修正が面倒なので本文中の"Petalinux"は"embedded linux"のことなのだと脳内変換しておいてください。
参考元の内容と、自分の環境でうまくいかなかった部分の補足を付け加えた内容です。細かいコマンドの意味などは殆ど書かずに手順だけかいています。
株式会社ピクセラ様のホームページを""大い""に参考にさせていただきました。本当にありがとうございます。画像付きで見やすい解説です。オススメです。
https://www.pixela.co.jp/products/pickup/dev/petalinux/p1_1_environment.htmlwww.pixela.co.jp
使用したソフトなどのバージョンを記載しておきます。
- VirtualBox 7.0.8
- Ubuntu 20.04.1
- PetaLinux 2022.1
- Vivado 2022.1
目次
Zybo Z7-10にLinuxを入れる
Virtual boxでUbuntu環境を構築してPetaLinuxをビルドしてZybo Z7-10でLinuxを起動します。
準備
必要なもの
- Zybo Z7-10 もしくは Zybo Z7-20
- AMDアカウント
- ホストPC (Windows11を想定)
- microSDカード (4GB以上)
- microSDカードリーダー (ホストPCに刺さるやつ)
- ACアダプタ (5.5mm-2.1mmピンで5V3Aが理想)
ACアダプターの入手難易度が高いので要注意。店頭で入手は難しいと思う。秋月に売ってるやつを買うのが無難。
akizukidenshi.com
ちなみにZyboボードは最後まで出てこないのでPCに接続する必要はないです。
VirtualBoxを入手する。
まずは下記のサイトに飛んで「VirtualBox 7.0.8 platform package」のWindows hostをDLする。ついでにExtension PackもDLする。
DLしたインストーラを起動してVirtualBoxとExtensionのインストールが完了したらUbuntuを入手する。
UbuntuのISOイメージのダウンロード
どうせなら日本語環境でUbuntuを使ってみたいので下記のサイトに飛んでUbuntu 20.04.1 LTSのISOイメージをDLする。
このサイト、何故かクリックだけではダウンロードできない。右クリックして、新しいウィンドウで開いてそのウィンドウをリロードするとDLが始まる。(私の環境が悪い可能性もある)
DLしたUbuntu20.04.1のISOイメージはわかり易い場所に入れておく。後ほど使うので場所がわからないのは避けたい。
Virtual boxでUbuntuを起動
VirtualBoxを起動すると右側のメニューに「新規」とあるのでクリック。
名前は適当で良い。Ubuntu20.04.1とかがオススメ。空白を入れるのはあまり良くない。
Folderは何でもいい。ここに今から作る仮想環境のUbuntuが格納される。
ISO Imageの右にある▽をクリックして「その他」をクリック。エクスプローラーが開くので先程DLした「ubuntu-ja-20.04.1-desktop-amd64.iso」を選択。次へ
Usernameをわかりやすい名前に設定する。今後コマンドで現れる"username"にはここで設定した名前を入力する。
Passwordの横にある目玉マークを押してパスワードを変更する。何度も入力するのでわかりやすいものにしておく。 次へ
メインメモリーを設定する。4096MBはあったほうがいいけど、ホストPCのメモリが16GB未満の場合は2048MB程度にしたほうが良い。ただし動作に時間がかかるので注意。
Processoursも設定する。4コアあれば十分だけど。やはりホストのCPUコア数を見て考えるべき。 次へ
次にDiskSizeを決めますが、200GB以上で設定すること。Vivadoのインストールで150GBの空きを要求されるので必須です。少なめに設定した場合は後ほど変更できるが、GPartedを使ってパーティションをリサイズする必要があるので初めから多めにとっておくのが無難。 次へ
一覧が表示されるので完了を押す。しばらく待てばUbuntuが起動して構築を数分間行う(自動)
デスクトップが表示されたら左のタスクバーからFirefoxとフォルダー意外全部削除しておくとよい。左下のアプリ一覧から端末(terminal)をお気に入り登録しておく。
コピペの設定
ホストからゲストにコピペができると嬉しい。なぜならコピペができるから。
Ubuntuを起動した状態で上部メニューの「デバイス」から「Guest Additions CDイメージの挿入…」を選択。
ポップアップが出るので「実行する」を選択。
パスワードを入力して認証するとターミナルが起動する。しばらく放置して「Press Return~」と表示されたらEnterを押して終了。
左のタスクバーにCDが表示されるので右クリックして「取り出す」を選択。
上部メニューの「仮想マシン」から「設定」を選択。
一般>高度>クリップボードの共有>ホストOSからゲストOSへ に設定。双方向でも良い。OKを押して設定完了するのを忘れずに。
上部メニューの「ファイル」から 閉じる>シャットダウン シグナルを送信 を実行。
次に起動するときにはコピペができるようになります。
大いに参考にしました。画像あるしこっち見たほうがいい!!
sudo権限を付与する
ターミナルを開いて次のコマンドを実行する。念の為断っておくが、先頭の$ はターミナルに入力しなくていい。
$ su
$ sudo visudo
nanoが開くので%sudoの下に
username ALL=(ALL) ALL
を書き加える。ctrl + X , y , Enterで保存して終了できる。
$ exit
でrootから抜ける。
$ sudo pwd
を実行してみる。パスワードが求められた後実行できたら成功。
PetaLinuxとVivadoのDL
先ほど作成したUbuntuを起動する。ここから先はUbuntu内での作業。
DL時に「You have chosen to open:」と表示されるので「Save File」にチェックを入れる。
Firefoxを使って
ここからPetaLinux2022.1 インストーラーをDLする。
同様に
ここから「ザイリンクス統合インストーラー2022.1:Linux用自己解凍型ウェブ インストーラー」をDL
何があってもPetaLinuxツールとVivadoのバージョンは合わせる
DLしたPetaLinuxツールと統合インストーラーは後ほど使う。おそらくダウンロードフォルダに入っているのでファイルを開いてホーム(/home/username)に移動しておく。
PetaLinuxの準備
PetaLinuxツールをインストール
権限を付与
$ chmod +x ./petalinux-v2022.1-04191534-installer.run
インストールを実行
$ ./petalinux-v2022.1-04191534-installer.run --dir ~/Petalinux
しばらく眺めてるとライセンスに承諾するか聞かれるのでEnterを押す。ライセンスを読んだらqで離脱してyを押してEnter。
承諾する必要があるライセンスは2つ。
PetaLinuxのパスを設定
$ source ~/Petalinux/settings.sh
WARNING出るけど
$ echo $PETALINUX
を実行して/home/username/Petalinuxと出ればOK
.bashrcにパスの設定を打ち込む
毎回sourceコマンドを打つのは面倒なのでターミナル起動時に自動実行してくれるように設定する。
$ nano ~/.bashrc
で、.bashrcを開く。
一番下の何もない行に
source ~/Petalinux/settings.sh
を追加する。(ctrl + X → y →Enterで完了)
これでPetalinux 開発環境のセットアップは完了
Vivadoのインストール
権限を付与
$sudo chmod +x Xilinx_Unified_2022.1_0420_0327_Lin64.bin
インストーラを実行
$sudo ./Xilinx_Unified_2022.1_0420_0327_Lin64.bin
GUIが開くので順番に入力していく。
- Next、アカウントのメアドとパスワードを入力してNext
- VivadoにチェックNext
- Vivado ML Standrdを選択Next
- Next
- ライセンスは全部Agree、Next
- Nextを押してOK押してInstallを実行。
容量が足りないとここで文字が赤く表示される。200GB用意しておけば余計なことをしない限り足りるはず。ここからの所要時間はメモリとコアの割当によるけどかなり掛かる。2時間ぐらいかかることもある。
Vivadoでプロジェクトの作成
Digilentボードファイルをインストールする。
https://github.com/Digilent/vivado-boards/archive/master.zip
zipを解凍したやつをホーム(/home/username)においておく
ZyboのボードファイルをVivadoのフォルダにつっこむ。
$ sudo mkdir ../../tools/Xilinx/Vivado/2022.1/data/boards/board_files
$ sudo cp -r vivado-boards-master/new/board_files/* ../../tools/Xilinx/Vivado/2022.1/data/boards/board_files
Create Project
ボードファイルをつっこんだらvivadoを再起動してcreate projectを選択する。設定は以下の通り。
- フォルダの場所はここではhome直下とした(デフォルト)
- プロジェクトの名前はproject_1(デフォルト)
- Default Partで左上のBordsを選択Vendorでdigilentinc.com
- Zybo Z7-10を選択
複数のwindowからなるGUIが出てきたらprojectの作成完了。
PetaLinux をビルドする
Vivadoを起動して"Create Project"を選択。
フォルダの場所はここではhome直下とした(デフォルト)
Default Partで左上のBordsを選択Vendorでdigilentinc.comを選び、Zybo Z7-10を選択
Vivadoでブロックデザインの作成
- AddSourceでCreateSourceを選択。名前はここでは"test"にした。
- 左のメニューからCreate Block Designを実行。名前はここではdesign_1にした。
- DiagramのAdd(+マーク)を押してZYNQ7 Prosessing Systemを選択,Run Block Automationをクリック
- M_AXI_GP0_ACLKとFCLK_CLK0をつなげる(直接クリック&ドラッグでつなげる)
- Sourcesタブの(ないならWindowから選択)design_1を右クリックしてCreate HDL Wrapperを行う。
- 左下のGenerate Bitstreamを実行。
- 実行が完了したらFileからExport、Export HardwareでInclude bitstreamにチェックを入れて実行
PetaLinux プロジェクト作成
プロジェクトを生成する。
$cd /home/username/project_1
$petalinux-create --type project --template zynq --name peta_project
$cd peta_project
$petalinux-config --get-hw-description=../design_1_wrapper.xsa
メニューが表示されるので
PetaLinuxをビルドする。
$petalinux-build
失敗してもめげずに再実行。数回やってダメならエラーの原因を特定して直しましましょう(適当)
[INFO] Successfully built projectと出れば成功!
USBを認識させる
参考にしました。
qiita.com
- ゲストOSをシャットダウンする。
- 認識させたいUSB端子をホストに指す。
- VirtualBoxのゲストOSの設定でUSBを選択
- 右のUSBに+のマークで認識させたいUSB端子を選択する。
- 追加したUSB端子を右クリックで編集。メーカー、製品名、シリアルNo.を削除してOK
- OKを押して認識させたいUSB端子を抜いてゲストOSを起動。
- その後認識させたいUSB端子を挿せば認識する。
PetaLinuxの実行
$ cd /home/username/project_1/peta_project
$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot
Bootimage generated successfullyが出れば成功。WARNINGは無視していい。
microSDカードのパーティション設定
今回は32GBのSDカードを使用。
SDカードの所在を確認する。
$lsblk
わからない場合はUSBを抜いてもう一度実行。前後の違いで判別できる。大抵sdbにある。
今回はsdbにあった場合の実行を記す。
fdiskを実行する。パーティションの編集ができる。
$sudo fdisk /dev/sdb
既存のパーティションを削除する。
"d"でパーティションを削除する。複数パーティションがある場合番号を聞かれる。全削除したいので1,2,3,...と1回ずつ行う。"i"を実行して「パーティションは何も設定されていません」と表示されれば完了。
新しいパーティションの設定
BOOT(200MB)とROOT(余りの部分に分ける。
- "n"を実行。パーティションの作成を行う。
- "p"を選択。
- "1"を選択。
- "2048"を入力
- "411648"を入力
- "n"を実行。
- "p"を選択。
- "2"を選択。
- 入力せずエンターを2回押す。
"w"で保存。$reboot で再起動する。
再起動後
$sudo fdisk /dev/sdb
で"i"を実行してパーティション1,2をチェックする。1が200MiBになってて、2も設定できてそうなら完了。
"w"でfdiskを完了。
$lsblk
を実行してsdbのツリーがsda1,sda2(デフォルトではこうなる)であることを確認する。今後はそれを前提にコマンドを実行する。異なる場合はその都度パスを変更する。
microSDカードに PetaLinux イメージを書き込む
いよいよmicroSDにマウントする。
$ sudo mkdir /home/username/BOOT
$ sudo mount /dev/sdb1 /home/username/BOOT
$ sudo mkdir /home/username/ROOT
$ sudo mount /dev/sdb2 /home/username/ROOT
$ cd /home/username/project_1/peta_project/images/linux/
$ sudo cp BOOT.BIN boot.scr image.ub /home/username/BOOT/
$ sudo tar xf rootfs.tar.gz -C /home/username/ROOT/
$ sync
これでSDカードにマウントは完了。Ubuntuを落としてSDカードリーダーを引っこ抜いて良い。
次の段階に移る前に、ボードとACアダプタを手元に用意する。
ボードのジャンパーピンをWALL-VU5VOとSD-QSPIでそれぞれショートさせる。
ACアダプタを接続してボードの電源スイッチをONにする。
必ずACアダプタのVとWを確認する。5Vで12.5W以上が必要だが、VやWが大きすぎると故障の原因となる。
ランプが光れば準備完了。
Linuxの起動
一旦ボードの電源をOFFにする。
ゲストOSのUbuntuを一旦終了する。
ボードとPCをUSB-micro USBケーブルでつなぐ。
Virtual Boxの設定を開き、USBを認識させる。
gtktermのインストールと設定
Ubuntuを起動し
dmesg | tail -f
を実行してボードとPCをつなぐUSBのポートを確認する。デフォルトでは /dev/tty/USB1
gtktermをインストールする。
$ sudo apt install gtkterm
gtktermを実行する。
$ sudo gtkterm
gtktermが起動したらConfigration > portを選択。
以下の設定に変更する。
- Portを/dev/tty/USB1
- Band Rateを115200
- Parityをnone
- Bitsを8
- Stopbitsを1
- Flow controlをnoneに設定。
OKで設定が完了。
PetaLinuxの起動
Zyboの電源をONする。
一斉に文字が流れてPetaLinuxが起動する。
peta_project login: が表示される。ログイン名はpetalinux。
パスワードを設定すれば完了。
$ echo Hello_World
と実行して"Hello_Worldと表示されれば成功!!お疲れ様でした。
(sudo権限は付与されてるけどrootに入れない。まだまだ検証が必要かも)