前回
前回はVivadoでプラットフォームを生成するところまでを解説しました。
今回は前回作成したXSAファイルを用いてPetaLinuxでLinuxカーネルを生成するところまでを解説しようと思います。
XRTのインストール (このプロセスは必要かどうかわからない)
高位合成を行う上では、プラットフォーム <-> カーネル間の通信のためにXilinx Runtime Library (XRT)が必要とのことなのでインストールを行います。
※x86_64 <-> PCIe環境の場合のみ必要なのかどうかわからないため、念の為インストールします。もしかしたら必要ありません。
XRTのgitからクローンします。
git clone https://github.com/Xilinx/XRT
次のコマンドでXRTをインストールするために必要なパッケージがインストールできます。
sudo <XRTを置いたフォルダ>/src/runtime_src/tools/scripts/xrtdeps.sh
次にbuildフォルダーに潜ってbuild.shを実行します。
cd build
./build.sh
はい、エラーが出ました。
CMake Error at CMakeLists.txt:6 (CMAKE_MINIMUM_REQUIRED):
CMake 3.5.0 or higher is required. You are running version 3.3.2
CMakeのバージョンとして3.5.0以上のものが必要なのに対し、3.3.2が使用されているようです。aptでインストールしたCMakeのバージョンが3.16.3でしたので別PATHのCMakeが使用されているようです。確認してみると、Xilinxをインストールしたフォルダに3.3.2のCMakeが存在しており、それが使用されていそうです。
$ whereis cmake
cmake: /usr/bin/cmake /usr/lib/x86_64-linux-gnu/cmake /usr/lib/cmake /usr/share/cmake /tools/Xilinx/Vitis/2021.1/tps/lnx64/cmake-3.3.2/bin/cmake /usr/share/man/man1/cmake.1.gz /usr/src/googletest/googletest/cmake
以上のエラーは.bashrc等にVitisのsettings64.shをsourceしている場合に起こるようです。
bashrc弄るの面倒なのでbuild.shを弄ります。
build.shの8行目を以下のように変更します。
CMAKE=cmake -> CMAKE=/usr/bin/cmake
気を取り直して再度build実行します。
./build.sh
上手くビルドできたら、次にXRTパッケージのインストールを行います。
cd Release
sudo apt install ./xrt_202210.2.13.0_20.04-amd64-xrt.deb
PetaLinuxプロジェクトの作成
ultra96v2フォルダにて、次のコマンドでPetaLinuxのプロジェクトを生成します。(ultra96v2_plnxフォルダを作成済みの方は一度削除してください)。
petalinux-create --type project --template zynqMP --name ultra96v2_plnx
cd ultra96v2_plnx
petalinux-config --get-hw-description=../ultra96v2_platform/ultra96v2_wrapper.xsa
Subsystem AUTo Hardware Settings -> Serial Settings
を開き、psu_uart_0からpsu_uart_1に変更します。
次に、DTG Settings -> MACHINE_NAME
をtempleteからavnet-ultra96-rev1に変更します。
次に、Image Packaging Configuration -> Root filesystem type
をEXT4 (SD/eMMC/SATA/USB)に変更します。
以上の設定を済ませたらExit -> OKで設定を終えます。
次にユーザーパッケージの追加を行います。XRTとOpenCL周りです。OpenCVは多分必要ありませんが一応追加。
ultra96v2_plnx/project-spec/meta-user/conf/user-rootfsconfig
に次の行を追記します。
CONFIG_xrt
CONFIG_xrt-dev
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev
次のコマンドを実行し、rootfsの設定を行います。
petalinux-config -c rootfs
user packages
を開いて全部にチェックを入れます。
Exit -> OKを押して設定を終えます。
次にカーネルの設定を行います。
petalinux-config -c kernel
次はお好みになりますが、JTAG使ってデバッグする場合は次の設定をオフにします (Idle状態のCPUとJTAGで通信するとハングアップしてしまうらしい)。
次に、Library routines -> Size in Mega Bytes
を256から1024に変更します (連続メモリ空間のサイズを上げる)。
※こちらは過去の他の方の解説記事で多くの方がしていたのでそれに倣っているだけですが、このような設定を行う詳しい理由はわかりません。知っている方いましたら教えてください。
カーネルの設定は以上になります。
なお、PetaLinux 2021.1では次のような問題があるためDP出力ができません。そのため、パッチを当てる必要があります。
ダウンロードしたファイルをultra96v2_plnx/project-spec/meta-user/recipes-bsp/device-tree/files
の中に格納します。
ultra96v2_plnx/project-spec/meta-user/recipes-bsp/device-tree/device-tree.bbappend
に追記します。
SRC_URI_append = " file://config file://system-user.dtsi file://0001-kernel-v2021.1-Sync-the-psgtr-node-from-U-boot.patch"
次にビルドします。
petalinux-build
ビルド中何度か止まるのでCtrl-Cでプロセス終了させて再度ビルド実行しました。
ビルドが完了したら以下のコマンドを実行してSDKを作成します。こちらはVitisプラットフォームを作成する際に必要になります。
petalinux-build --sdk
こちらも何故か何度もプロセスが固まるのでCtrl-Cで終了させ再度上記コマンドを実行しています。
次の記事
本記事は以上までとなります。次はVitisを用いてプラットフォームの構築を行いたいと思います。