Petalinux2019.2によるzynq-7000ブート用SDカード作成
Vivado + Vitis + Petalinux (2019.2) を使って zynq-7000 用のブートSDカードを作る†
電気回路/zynq/Petalinux2018.3環境を整える と 電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成 でやったように、z-turn board 用の SD カード作成を 2019.2 でやりなおそうということ。
目次†
- Vivado + Vitis + Petalinux (2019.2) を使って zynq-7000 用のブートSDカードを作る
- Vitis のインストール on Windows 10
- vivado で z-turn 用のプロジェクトを作成し合成する
- Ubuntu 18.04.4 Desktop を VirtualBox にインストール
- PetaLinux 2019.2 のインストール
- PetaLinux プロジェクトの作成
- 設定&ビルド
- Vitis による fsbl 作成
- Ubuntu 18.04 LTS ルートファイルシステムを作成
- devicetree.dtd や uEnv.txt、ルートファイルシステム を分離する
Vitis のインストール on Windows 10†
ちょっと前までは vivado (ハードウェア開発環境) を入れると Xilinx SDK (ソフト開発環境) がついてきていたのだけれど、
最近は SDK が更新されなくなって、後継の Vitis を入れると vivado がついてくるみたい。
普通に入った。
vivado で z-turn 用のプロジェクトを作成し合成する†
z-turn board に付属の DVD からサンプルプロジェクトを取り出して、 それを変更していく形で作業を進める。
これは Zynq プロセッサ部の設定を流用するための手順。 さもないと回路図見ながら細かい設定をポチポチ試行錯誤しなきゃならなくなる。
電気回路/z-turn/基本事項#made65de からの手順で
- mys-xc7z020-trd.rar を解凍して mys-xc7z020-trd.xpr を開く
- 自動でプロジェクトのアップデートが行われる
- さらに、IP のアップグレードを促されるのでこれも実行 [Report Status] - [Upgrade Selected]
- Generate Output Products は Skip
- xlconcat_0 の空いてるピン In1[0:0] にダミーの割り込み信号線として定数 0 を繋ぐ
まで来たら、電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成#i8da51ff にあるように processing_system7_0 をダブルクリックして SDIO Clock の設定を 50MHz にする。その後、
- Generate Block Design
- Generate Bitstream (design_1_wrapper.bit)
を行う。
さらに 電気回路/zynq/Petalinux のビルド#a82e50cc の手順でハードウェア設定を Export する。 → design_1_wrapper.xsa (Export する際に design_1_wrapper ではなくもう少しまともな名前を付けるようにすると Vitis 上で見やすいのかもしれない?)
(この手順で、SDK を使ってた頃は design_1_wrapper.hdf なんてファイルが生成されたのだけれど、 Vitis になった今は design_1_wrapper.xsa なんていうファイルが生成されるようになっていた。)
- design_1_wrapper.bit にプログラマブルロジック (PL) 領域の設定が
- design_1_wrapper.xsa にプロセッサー (PS) 領域の設定が
出力されるので、これらを正しく ZYNQ に読み込ませ、Linux が立ち上がる SD カードを作るのが以下の作業。
最後にプロジェクトを上書き保存してから、[File]-[Project]-[Save As...] で本来つけたい名前でプロジェクトを保存する。
本当は Block Design の名前も design_1 じゃなくてもう少しまともなものにしておいた方が良さそうなのだけれど、https://forums.xilinx.com/t5/Design-Entry/How-to-rename-Block-Design/m-p/1072315/highlight/true#M23176 で見る限り名前を変えるには一旦 tcl スクリプトに Export して、元のデザインを消し、スクリプト内の名前を置き換えてから Import する必要があるらしく、結構面倒。
Ubuntu 18.04.4 Desktop を VirtualBox にインストール†
PetaLinux ツール の PetaLinux ツール資料リファレンスガイドUG1144 (v2019.2) より、Ubuntu 18.04.02 に対応していることを確認した。
- Virtualbox をインストール
- USB3.0 を使えるように VirtualBox Extension Pack も入れる(ダウンロード&ダブルクリック)
- Petalinux 2019.2 という Box を作成
- メモリ 8G
- ファイルサイズ 100G (可変)
- Ubuntu releases から 18.04 系列の最新の LTS である Ubuntu 18.04.4 Desktop をダウンロード&インストール
- 暗号化は無効で最小インストール
- VirtualBox の Guest Additions CD からドライバをインストール
- 画面サイズを大きくする
- ssh で繋いで作業できるように、VirtualBoxのネットワーク設定 NATとNATネットワーク設定について。 - Qiita を参考に、VirtualBox のネットワーク設定を NAT にしたままポートフォワーディングで 22 番を 1022 に出した。
PetaLinux 2019.2 のインストール†
etckeeper, openssh-server, jed に加えて、PetaLinux ツール資料リファレンスガイドUG1144 (v2019.2) で必須とされるパッケージを導入
LANG:console $ sudo apt install -y etckeeper openssh-server jed $ sudo apt install -y tofrodos iproute2 gawk make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential screen pax gzip python2.7 $ sudo apt autoremove -y
openssh-server を入れたので、ホスト Windows 10 上のターミナルソフトで localhost:1022 へ繋ぎに行けば VirtualBox 内の Ubuntu に入れる。
ダウンロード - PetaLinux から petalinux-v2019.2-final-installer.run をダウンロードし、
LANG:console $ sudo mkdir /opt/petalinux_2019.2 $ sudo chown takeuchi:takeuchi /opt/petalinux_2019.2 $ download/petalinux-v2019.2-final-installer.run /opt/petalinux_2019.2
これでインストール完了。
PetaLinux プロジェクトの作成†
電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成 の通りに、
LANG:console $ cd $ mkdir petalinux $ cd petalinux $ source /opt/petalinux_2019.2/settings.sh $ petalinux-create -t project --template zynq -n zturn_v2019.2 $ cd zturn_v2019.2 $ git init $ git add . $ git config --global user.email "osamu@big.jp" $ git config --global user.name "Osamu Takeuchi" $ git commit -m "newly created"
設定&ビルド†
vivado で作った design_1_wrapper.xsa を ~/petalinux/zturn_v2019.2/hw_platform/ に、 design_1_wrapper.bit を ~/petalinux/zturn_v2019.2/ にコピーして、
LANG:console $ petalinux-config --get-hw-description=hw_platform # ここで xsa が読まれる [Image Packaging Configuration]-[Copy final images to tftpboot] のチェックを外す Exit $ petalinux-build $ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga design_1_wrapper.bit --u-boot --force INFO: File in BOOT BIN: "/home/takeuchi/petalinux/zturn_v2019.2/images/linux/zynq_fsbl.elf" INFO: File in BOOT BIN: "/home/takeuchi/petalinux/zturn_v2019.2/design_1_wrapper.bit" INFO: File in BOOT BIN: "/home/takeuchi/petalinux/zturn_v2019.2/images/linux/u-boot.elf"
最後の --force はすでにファイルが存在するときに上書きできるようにつけている。
電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成#e5d26699 の手順で images/linux/BOOT.BIN と images/linux/image.ub とを SD カードに書き込んだところ、ちゃんとコマンドプロンプトが出るところまで進んだ。
Vitis による fsbl 作成†
このままだと 電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成#lfc4ab30 が理由で fsbl からのメッセージが表示されないので fsbl のコードに手を入れたいのだけれど、PetaLinux 上で fsbl をカスタマイズする方法がよくわからない。
そこで、Let's Vitis(5) - FSBLのビルド - ひでみのアイデア帳 のようにして Windows 10 側の Vitis で fsbl を作成する。
具体的には、
- Vitis を起動 (vivado の [Tools]-[Launch Vitis] からでも、単独でも同じ)
- [File]-[Switch Workspace]-[Other...] で作業フォルダに z-turn_2019.2 など適当な名前を付ける
- [File]-[Application Project] を選択
- Project Name に例えばべたに fsbl などと名付けて Next
- Create a new platform from hardware (XSA) ページの "+" アイコンをクリックして vivado で作った .xsa ファイルを読ませ Next
- CPU = ps7_cortexa9_0 / OS = standalone / Language = C / Generate boot components を check で Next
- テンプレート "Zynq FSBL" を選択して Finish
- ソースファイルに必要な変更を加える
- [Explorer] で [design_1_wrapper] にぶら下がってる platform.spr をダブルクリック
- 右側に現れた design_1_wapper タブの左側で [standalone on ps7_cortexa9_0] の下の [Board Support Package] を選択し、[Modify BSP Settings...] を押す ([zynq_fsbl] の方じゃないのか?とも思うのだけれど、fsbl.prj が参照している Domain はどうやら [zynq_fsbl] じゃなく [standalone on ps7_cortexa9_0] になっているようで・・・バグじゃないよね?)
- [standalone] ノードで stdin と stdout を ps7_uart_1 に変更する
(optional→ [Explorer]-[design_1_wrapper]-[ps7_cortexa9_0]-[standalone_domain]-[bsp]-[ps7_cortexa9_0]-[include]-[xparameters.h] を開いて、STDIN_BASEADDRESS, STDOUT_BASEADDRESS の設定が 0xE0000000 から 0xE0001000 に変わったことを確認する)
- 左下 [Assistant] の [fsbl_system]-[fsbl]-[Release] 上で右クリックし [Set Active]
- [Explorer]-[fsbl_system]-[fsbl] 上で右クリックし、[Property] から [C/C++ Build]-[Settings]-[Tool Settings]-[ARM v7 gcc compiler]-[Symbols]-[Define symbols (-D)] に FSBL_DEBUG_INFO を追加
- [Explorer]-[fsbl_system]-[fsbl] を選び [Project]-[Build] でビルドする
fsbl 自体は standalone なアプリケーションだというのがキモかも。
こうして作った fsbl.elf で BOOT.BIN を作り直したところ、fsbl からのメッセージも正しく表示されるようになった。
上記の形で design_1_wrapper.xsa (実は zip ファイル形式) を読み込むと、Vitis の作業フォルダに同名のフォルダができてそこに中身が解凍される。design_1_wrapper みたいな適当な名前付けにしてると困ったことになるのだけれど、そもそも Vitis には作業フォルダ内のプロジェクトがすべて一覧で表示されることになるので、おそらく1つの作業フォルダ内に複数の .xsa ファイルを読み込むのではなく、異なる .xsa ファイルには異なる作業フォルダを用意したほうがいいのだと想像してる。
vivado の方で設定等を変更して、Export Hardware をし直すと、Vitis の Eplorer 上で design_1_wrapper に (out of date) マークがつく。この場合には design_1_wrapper 上で右クリックから [Update Hardware Specification] すればいいはずなのだけれど・・・(Out of date) が消えないのは何で?あ、Build すれば消えるということは、Build が必要だというマークなのかな?
Ubuntu 18.04 LTS ルートファイルシステムを作成†
電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成#mf635800 の手順で。
SD カードの ext4 パーティションに入れた。
devicetree.dtd や uEnv.txt、ルートファイルシステム を分離する†
基本的に zynq の Linux 上で開発をやりたいので、 設定変更は SD カードの中を書き換えるだけで簡単に済ませられる形にしておきたい。
設定や開発中のコードを変更するたびに petalinux-build して SD カードに焼いて再起動なんてやってられるか、っていう話。
電気回路/zynq/Petalinux2018.3によるzynq-7000ブート用SDカード作成#ne1acba3 と同様の手順で devicetree.dtd や uEnv.txt、ルートファイルシステム を分離した。
まだカーネル設定はいじってない。
手順を後でもう少しちゃんと書くつもり。