Ultra96V2 - Vitis 2020.1用 PlatformにはLinuxディストリビューションが必要です。
ここではYocto Projectを使用してZynqMP向けLinuxディストリビューションを構築します。
Yocto Projectは組み込み向けLinuxディストリビューションを構築するフレームワークです。
Xilinxが提供しているPetaLinuxもYocto Projectをベースに構築されています。
さて、ZynqMPでLinuxを起動するには最低限、次のソフトウェアが必要です。
u-bootはLinuxを起動するためだけに使われれており、ZynqMPの設定などは一切していないのでなんの役にもたっていません。
Linux Kernelの起動方法さえ知っていればu-bootはなくても問題ありません。
これはどこかで解説します。
まず、FSBLはVivadoプロジェクトを同時に生成したのでもう生成する必要はありません。
もし、Zynqの設定を変更したときにVivadoプロジェクトとともに再生成してください。
つまり、生成しなければいけないのは次の残り4つです。
まず、git://github.com/aquaxis/meta-ultra96
からUltra96V2用のMetaファイルをダウンロードします。
ダウンロード前にダウンロードするディレクトリは${HOME}/yocto/yocto_dunfell
にします。
私の場合は次のようにします。
$ mkdir -p /home/hidemi/yocto/yocto_dunfell
$ cd /home/hidemi/yocto/yocto_dunfell
展開するディレクトリを決めているのはYocto Project構築以降のVitis Platform生成で絶対Pathを使用しているところがあるのでその説明用です。
ダウンロードするBranch名はdunfell
です。
$ git clone git://github.com/aquaxis/meta-ultra96 -b dunfell
次にYocto ProjectのMetaファイルやOpenEmbedded、XilinxなどのMetaファイルを次のようにスクリプトを実行することでダウンロードします。
$ ./meta-ultra96/create_env.sh
ダウンロードとともにPMU FirmwareとLinuxディストリビューションをビルドする環境も整えます。
スクリプトの実行後、ディレクトリを確認すると次のディレクトリがあります。
build_pmu-firmwareとbuild_ultra96v2はそれぞれ、PMU FirmwareとLinuxディストリビューションをビルドするディレクトリです。
pokyはYocto ProjectMetaファイルなどが格納されています。
sourcesはOpenEmbedded、Xilinx、それとダウンロードしてきたmeta-ultra96のディレクトリがこのsourcesに移動します。
ZynqMP向けLinuxディストリビューションを構築するにはPMU Firmwareを用意して置かなければいけません。
まずはPMU Firmwareを次のようにビルドします。
$ cd poky
$ source ./oe-init-build-env ../build_pmu-firmware
$ bitbake pmu-firmware
ビルドが完了するとbuild_pmu-firmware
ディレクトリの配下にpmutmp
というディレクトリが生成されています。
この中にPMU Firmwareが含まれています。
ここでPMU Firmwareを取り出すとか面倒な作業はないので次に進みます。
ビルド時はbuild_pmu-firmware
ディレクトリに移動しているので次のように1つ上のディレクトリに戻ります。
cd ..
本命のLinuxディストリビューションを構築しましょう。
次のように環境を整えます。
$ cd ./poky
$ source ./oe-init-build-env ../build_ultra96v2
さきほど、生成したPMU Firmwareのpmutmpをlinkします。
$ ln -s ../build_pmu-firmware/pmutmp
ここでconf/local.conf
ファイルで自分好みのアプリを追加したりして自分好みのLinuxディストリビューションの設定を行います。
それが完了したらつぎのコマンドを実行するだけです。
$ bitbake core-image-minimal
ビルドが完了するとtmp/deploy/images/ultra96v2/
の配下にLinuxディストリビューションに必要なファイルができあがっています。
どのファイルをどうなのかは後ほど解説します。
Linuxディストリビューションの生成と対になして重要なのがSDKの生成です。
つぎのように実行してSDKを生成します。
$ bitbake core-image-minimal -c populate_sdk
ビルドが完了するとtmp/deploy/sdk/
にpoky-glibc-x86_64-core-image-minimal-aarch64-ultra96v2-toolchain-3.1.1.sh
というファイル名でSDKのインストーラが生成されます。
このインストーラを使用してSDKをインストールしましょう。
$ ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-aarch64-ultra96v2-toolchain-3.1.1.sh
インストールを実行するとインストールディレクトリを聞いてくるので/opt/poky/3.1.1_ultra96v2
としました。
これは続きの解説をしやすくするためなので適宜、置き換えてください。
Poky (Yocto Project Reference Distro) SDK installer version 3.1.1
=================================================================
Enter target directory for SDK (default: /opt/poky/3.1.1): /opt/poky/3.1.1_ultra96v2
You are about to install the SDK to "/opt/poky/3.1.1_ultra96v2". Proceed [Y/n]?
インストール後にSDKのオーナーを変更します。
これはVivado 2020.1でVitis 2020.1用Platform構築時にwarningが表示されるのを念のため、回避するためです。
$ sudo chown -R hidemi.hidemi /opt/poky/3.1.1_ultra96v2
Linuxディストリビューションが生成できればZynqMPを起動することができます。
build_ultra96v2
ディレクトリの配下にsd_card
というディレクトリが用意されています。
ここでmkbootbin.sh
を実行するとBOOT.BINを生成することが可能です。
$ cd sd_card
$ cp /home/hidemi/workspace/ultra96v2_vivado/fsbl.elf ./
$ source /opt/Xilinx/Vitis/2020.1/settings64.sh
$ ./mkbootbin.sh
実行するとBOOT.BINができます。
BOOT.BINができることが確認できたら次へ進みます。