Ultra96V2 - Vitis 2020.1 platform(2) - Yocto Project

Ultra96V2 - Vitis 2020.1用 PlatformにはLinuxディストリビューションが必要です。

ここではYocto Projectを使用してZynqMP向けLinuxディストリビューションを構築します。

Yocto Projectは組み込み向けLinuxディストリビューションを構築するフレームワークです。

Xilinxが提供しているPetaLinuxもYocto Projectをベースに構築されています。

さて、ZynqMPでLinuxを起動するには最低限、次のソフトウェアが必要です。

  • FSBL
  • PMU Firmware
  • ATF
  • Linux Kernel
  • Linux RootFS

u-bootはLinuxを起動するためだけに使われれており、ZynqMPの設定などは一切していないのでなんの役にもたっていません。

Linux Kernelの起動方法さえ知っていればu-bootはなくても問題ありません。

これはどこかで解説します。

まず、FSBLはVivadoプロジェクトを同時に生成したのでもう生成する必要はありません。

もし、Zynqの設定を変更したときにVivadoプロジェクトとともに再生成してください。

つまり、生成しなければいけないのは次の残り4つです。

  • PMU Firmware
  • ATF
  • Linux Kernel
  • Linux RootFS

Ultra96V2用Metaファイルのダウンロード

まず、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
  • poky
  • sources

build_pmu-firmwareとbuild_ultra96v2はそれぞれ、PMU FirmwareとLinuxディストリビューションをビルドするディレクトリです。

pokyはYocto ProjectMetaファイルなどが格納されています。

sourcesはOpenEmbedded、Xilinx、それとダウンロードしてきたmeta-ultra96のディレクトリがこのsourcesに移動します。

PMU Firmwareの生成

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ディストリビューションの生成

本命の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ディストリビューションに必要なファイルができあがっています。

どのファイルをどうなのかは後ほど解説します。

SDKの生成

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

BOOT.BINの生成

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ができることが確認できたら次へ進みます。

write: 2020/06/12/ 00:00:00