ZyboでPetalinuxを動かしてみました。その際の手順をこちらにまとめておきます。
動作確認環境
- 開発環境(ホストPC)
-
Ubuntu 20.04 LTS(Windows 10 PC上のWSL)
- ツールバージョン
-
Vivado 2021.2
- FPGAボード
-
初代Zybo
- 動作させるPetalinuxのバージョン
-
Petalinux 2021.2
ZyboについてはDigilentのサイトに詳しいマニュアルが載っています。
https://digilent.com/reference/programmable-logic/zybo/start
また、動作確認を行うにあたってこちらの記事を参考にさせていただきました。
Petalinuxのインストール
Petalinuxのインストーラをダウンロードします。
Petalinuxについては日本語のリファレンスガイドが用意されています。
https://docs.xilinx.com/r/ja-JP/ug1144-petalinux-tools-reference-guide
リファレンスガイドには以下のように記載されています。
Petalinuxは、FPGA ベースのシステム オン チップ (SoC) デザインを開発するためのエンベデッド Linux ソフトウェア開発キット (SDK)です
PetalinuxとはLinuxのディストリビューションというわけではなく、開発環境全体の総称のようです。
ダウンロードしたインストーラを実行します。
$ mkdir -p ${HOME}/tools/petalinux
$ cd ${HOME}/tools/petalinux
$ chmod u+x petalinux-v2021.2-final-installer.run
$ ./petalinux-v2021.2-final-installer.run
何回かLicense Agreementについての確認がありますが、全てYesとします。
インストール先のディレクトリに「settings.sh」というスクリプトが生成されるので、これを「.bashrc」でログイン時に読み込むようにしておきます。
$ source ${HOME}/tools/petalinux/settings.sh >& /dev/null
これで次回のログイン時から「petalinux-create」「petalinux-config」等のコマンドが使えるようになりました。
プロジェクトの作成・ビルド
「petalinux-create」コマンドでプロジェクトを作成します。ZyboのようなZynq-7000シリーズを搭載したFPGAの場合は、templateオプションに「Zynq」と指定します。
$ petalinux-create --type project --template zynq --name <project_name>
$ cd <project_name>
VivadoでExportしたxsaファイル(Vivado上で作成したデザイン情報を含むファイル)を指定してコンフィグします。Vivado上での操作については、また別の記事にしたいと思います。
$ petalinux-config --get-hw-description=<path_to_xsa_file>
ターミナル上で以下のようなコンフィグ設定画面が表示されます。ここではデフォルト設定のまま<Exit>を選択しました。
最後にビルドを実行します。
$ petalinux-build
これでビルドが開始されます。ビルド完了まで数時間かかるので気長に待ちます。
ビルドが完了すると、images/linux以下にファイルが生成されます。生成されたファイルを使ってブートのためのバイナリ (BOOT.BIN) を生成します。
$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot
ブート用SDカードの作成
SDカード上にFAT32とext4のパーティションを作成します。SDカードの準備方法については、こちらの記事を参考にしてください。
SDカードの先頭の512MBをFAT32、それ以外の領域をext4としてパーティショニングを行い、FAT32の領域とext4の領域にそれぞれ生成したバイナリ等をコピーします。
$ cp images/linux/BOOT.bin <path_to_fat32>
$ cp images/linux/boot.scr <path_to_fat32>
$ cp images/linux/image.ub <path_to_fat32>
$ cp images/linux/rootfs.tar.gz <path_to_ext4>
コピーしたルートファイルシステムを展開し、SDカードをアンマウントします。
$ cd <path_to_ext4>
$ tar zxvf rootfs.tar.gz
$ sudo umount /dev/sdX1 # Xには「a」や「b」などのアルファベットが入ります
$ sudo umount /dev/sdX2
Zyboの起動
J11のMicro-USBコネクタでPCと接続しTeratermを起動します。シリアルポートを開きボーレートを「115200」に設定しておきます。Digilentのリファレンスマニュアルを見ながら、JP5のブートモードを選択するためのジャンパーピンを「micro SD Boot Mode」となるよう設定します。
SDカードをボードに差し込み、ボードに電源を投入するとTeraterm上に無事ブートメッセージが表示されました。