Zybo Z7-10にLinuxを入れる

※完全に自分のメモ用です。説明を省略した部分が多いです。

はじめに

 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



 使用したソフトなどのバージョンを記載しておきます。


目次

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する。

www.virtualbox.org




 DLしたインストーラを起動してVirtualBoxとExtensionのインストールが完了したらUbuntuを入手する。


UbuntuのISOイメージのダウンロード

 どうせなら日本語環境でUbuntuを使ってみたいので下記のサイトに飛んでUbuntu 20.04.1 LTSのISOイメージをDLする。

 このサイト、何故かクリックだけではダウンロードできない。右クリックして、新しいウィンドウで開いてそのウィンドウをリロードするとDLが始まる。(私の環境が悪い可能性もある)

 DLしたUbuntu20.04.1のISOイメージはわかり易い場所に入れておく。後ほど使うので場所がわからないのは避けたい。

www.ubuntulinux.jp


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を押して設定完了するのを忘れずに。

 上部メニューの「ファイル」から 閉じる>シャットダウン シグナルを送信 を実行。

 次に起動するときにはコピペができるようになります。




大いに参考にしました。画像あるしこっち見たほうがいい!!

onoredekaiketsu.com



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を使って

https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/embedded-design-tools/2022-1.html

ここからPetaLinux2022.1 インストーラーをDLする。

 同様に

https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/vivado-design-tools/2022-1.html

 ここから「ザイリンクス統合インストーラー2022.1:Linux用自己解凍型ウェブ インストーラー」をDL

何があってもPetaLinuxツールとVivadoのバージョンは合わせる

 DLしたPetaLinuxツールと統合インストーラーは後ほど使う。おそらくダウンロードフォルダに入っているのでファイルを開いてホーム(/home/username)に移動しておく。

dashをbashにする。

 ターミナルで

$sudo dpkg-reconfigure dash

 ダイアログが出るので「いいえ」を選択。

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が開くので順番に入力していく。

  1. Next、アカウントのメアドとパスワードを入力してNext
  2. VivadoにチェックNext
  3. Vivado ML Standrdを選択Next
  4. Next
  5. ライセンスは全部Agree、Next
  6. Nextを押してOK押してInstallを実行。

 容量が足りないとここで文字が赤く表示される。200GB用意しておけば余計なことをしない限り足りるはず。ここからの所要時間はメモリとコアの割当によるけどかなり掛かる。2時間ぐらいかかることもある。

ダウンロードケーブル (プログラマー) のドライバ・インストール

$ cd /tools/Xilinx/Vivado/2022.1/data/xicom/cable_drivers/lin64/install_script/install_drivers

$ sudo ./install_drivers

 CRITICAL WARNING出るけど無視

パスの設定

$source /tools/Xilinx/Vivado/2022.1/settings64.sh

 先程と同様にbashに書き込む

$ nano ~/.bashrc

 一番下の行に

source /tools/Xilinx/Vivado/2022.1/settings64.sh

$ vivado

と入力すればvivadoが起動する。インストール完了。

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でブロックデザインの作成
  1. AddSourceでCreateSourceを選択。名前はここでは"test"にした。
  2. 左のメニューからCreate Block Designを実行。名前はここではdesign_1にした。
  3. DiagramのAdd(+マーク)を押してZYNQ7 Prosessing Systemを選択,Run Block Automationをクリック
  4. M_AXI_GP0_ACLKとFCLK_CLK0をつなげる(直接クリック&ドラッグでつなげる)
  5. Sourcesタブの(ないならWindowから選択)design_1を右クリックしてCreate HDL Wrapperを行う。
  6. 左下のGenerate Bitstreamを実行。
  7. 実行が完了したら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

 メニューが表示されるので

  1. Image Packaging Configurationを選択
  2. Root filesystem type ~ --->を選択
  3. EXT4(SD/eMMC/SATA/USB)を選択
  4. SaveしてOK,EXIT、その後Exitを2回押して完了。

PetaLinuxをビルドする。

$petalinux-build

 失敗してもめげずに再実行。数回やってダメならエラーの原因を特定して直しましましょう(適当)

[INFO] Successfully built projectと出れば成功!


USBを認識させる

 参考にしました。
qiita.com

  1. ゲストOSをシャットダウンする。
  2. 認識させたいUSB端子をホストに指す。
  3. VirtualBoxのゲストOSの設定でUSBを選択
  4. 右のUSBに+のマークで認識させたいUSB端子を選択する。
  5. 追加したUSB端子を右クリックで編集。メーカー、製品名、シリアルNo.を削除してOK
  6. OKを押して認識させたいUSB端子を抜いてゲストOSを起動。
  7. その後認識させたい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(余りの部分に分ける。

  1. "n"を実行。パーティションの作成を行う。
  2. "p"を選択。
  3. "1"を選択。
  4. "2048"を入力
  5. "411648"を入力
  1. "n"を実行。
  2. "p"を選択。
  3. "2"を選択。
  4. 入力せずエンターを2回押す。

 "w"で保存。$reboot で再起動する。

 再起動後

$sudo fdisk /dev/sdb

 で"i"を実行してパーティション1,2をチェックする。1が200MiBになってて、2も設定できてそうなら完了。
 "w"でfdiskを完了。


$lsblk

 を実行してsdbのツリーがsda1,sda2(デフォルトではこうなる)であることを確認する。今後はそれを前提にコマンドを実行する。異なる場合はその都度パスを変更する。


パーティションファイルシステムを設定する。

$ sudo mkfs.vfat /dev/sdb1
$ sudo mkfs.ext4 /dev/sdb2

(ちょっとだけ時間がかかるので焦らずに待つ)


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に入れない。まだまだ検証が必要かも)