組込みLinux XRT 2022.2 インストール

Vitis Application Acceleration開発をするには、VitisとPetaLinuxとXRTのインストールが必須の様なのでインストールしてみます。 2023.1の情報も追加しました。

XRTとは

Xilinx Runtimeの略で、Vitisで高位合成されてFPGAにロードされたバイナリを制御するRuntime。 高位合成されたFPGAバイナリのデバッグする時につかいます。

XRTが動作するのはホスト上です。 SoCの場合は、SoCのARMがホストで、ARMが無いFPGA(Virtex UltraScale+)部だけのAlevoの場合はuBuntu PC等がホストになります。 Ultra96V2はZynq UltraScale+ SoCなので、SoC内のARM Cortex-A53がホストになります。

XRTにはOpenCLライブラリ、低レイヤのライブラリ、Kernelドライバ、MicroBlazeのソースコード等が含まれています。 下の図はがXRTのアーキテクチャーを示しているそうで、コマンドラインユーティリティやAPI等、いろんなツールが組み込まれていて、必要に応じたツールを使える様です。

https://github.com/Xilinx/XRTから

インストール

  • Xilinx ダウンロードページから、
  • このページで『Vitis Embedded Platforms』のタブを選び、
  • ページの下の方にある、Xilinx Runtime -2022.2 の『uBuntu 20.04』をダウンロード(或いはXilinx Runtime 2023.1を選択)
  • ダウンロードされたディレクトリに行き、
  • ダウンロードされてxrt_バージョン.debファイルをしていして、aptコマンドでインストール
  • インストール場所は指定できず、/opt/xilinx/xrt/にインストールされます。
sudo apt install ./xrt_202220.2.14.354_20.04-amd64-xrt.deb

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'xrt' instead of './xrt_202220.2.14.354_20.04-amd64-xrt.deb'
The following packages were automatically installed and are no longer required:
  binutils-arm-linux-gnueabihf cpp-9-arm-linux-gnueabihf cpp-arm-linux-gnueabihf cryptsetup cryptsetup-bin
  cryptsetup-initramfs cryptsetup-run dropbear-initramfs fcitx-bin fcitx-data fcitx-frontend-all
  fcitx5-module-quickphrase-editor gcc-10-cross-base gcc-9-arm-linux-gnueabihf-base gcc-9-cross-base
  guile-2.0-libs libasan5-armhf-cross libatomic1-armhf-cross libc6-armhf-cross libfcitx-qt5-1
  libfcitx-qt5-data libgcc-9-dev-armhf-cross libgcc-s1-armhf-cross libgettextpo0 libgomp1-armhf-cross
  liblua5.2-0 libpresage-data libpresage1v5 libstdc++6-armhf-cross libtinyxml2.6.2v5 libubsan1-armhf-cross
  presage ubuntu-advantage-desktop-daemon
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  dkms libboost-program-options1.71.0 uuid-dev
Suggested packages:
  menu
The following NEW packages will be installed:
  dkms libboost-program-options1.71.0 uuid-dev xrt
0 upgraded, 4 newly installed, 0 to remove and 20 not upgraded.
Need to get 442 kB/26.2 MB of archives.
After this operation, 120 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 /home/ichiri/Downloads/xrt_202220.2.14.354_20.04-amd64-xrt.deb xrt amd64 2.14.354 [25.7 MB]
Get:2 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 dkms all 2.8.1-5ubuntu2 [66.8 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu focal/main amd64 libboost-program-options1.71.0 amd64 1.71.0-6ubuntu6 [342 kB]
Get:4 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 uuid-dev amd64 2.34-0.1ubuntu9.3 [33.6 kB]
Fetched 442 kB in 3s (176 kB/s)  
Selecting previously unselected package dkms.
(Reading database ... 212667 files and directories currently installed.)
Preparing to unpack .../dkms_2.8.1-5ubuntu2_all.deb ...
Unpacking dkms (2.8.1-5ubuntu2) ...
Selecting previously unselected package libboost-program-options1.71.0:amd64.
Preparing to unpack .../libboost-program-options1.71.0_1.71.0-6ubuntu6_amd64.deb ...
Unpacking libboost-program-options1.71.0:amd64 (1.71.0-6ubuntu6) ...
Selecting previously unselected package uuid-dev:amd64.
Preparing to unpack .../uuid-dev_2.34-0.1ubuntu9.3_amd64.deb ...
Unpacking uuid-dev:amd64 (2.34-0.1ubuntu9.3) ...
Selecting previously unselected package xrt.
Preparing to unpack .../xrt_202220.2.14.354_20.04-amd64-xrt.deb ...
Unpacking xrt (2.14.354) ...
Setting up dkms (2.8.1-5ubuntu2) ...
Setting up uuid-dev:amd64 (2.34-0.1ubuntu9.3) ...
Setting up libboost-program-options1.71.0:amd64 (1.71.0-6ubuntu6) ...
Setting up xrt (2.14.354) ...
Unloading old XRT Linux kernel modules
rmmod: ERROR: Module xocl is not currently loaded
rmmod: ERROR: Module xclmgmt is not currently loaded
Invoking DKMS common.postinst for xrt
Loading new xrt-2.14.354 DKMS files...
Building for 5.15.0-67-generic
Building initial module for 5.15.0-67-generic
Done.

xocl.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.15.0-67-generic/updates/dkms/

xclmgmt.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.15.0-67-generic/updates/dkms/

depmod.....................

DKMS: install completed.
Finished DKMS common.postinst
Loading new XRT Linux kernel modules
Installing MSD / MPD daemons
| Components                   |      Status        |
|------------------------------|--------------------|
| XOCL & XCLMGMT Kernel Driver | Success            |
| XRT USERSPACE                | Success            |
| MPD/MSD                      | Success            |
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...

簡単でした。 Successとなりました。 PCIe用のxoclは自動でインストールされていますが、Zynq等SoC用のzoclはインストールされていませんね。 PetaLinuxでビルドする際にrootfsのmenuconfigとデバイスツリーに記述して取り込まないといけないようです。

2023.1

以下のメッセージが出てきました。

MOKというのが生成されので、uBuntuのシステムFirmwareに登録しないといけないようです。 登録する時と、登録後再起動したときログインパスワードを聞いてくるので入力しなければ、サードパーティーのドライバが使用できな可能性があるようです。 上記画面から進むには『ESC』。

画面の通りパスワードを2回入れると以下のように表示されました。 MOKは登録されましたが,xclmgmtとxoclは立ち上がりませんでした。 多分modprobeをsudo実行しないといけないと思います。

/<pre>++++
writing new private key to &apos;/var/lib/shim-signed/mok/MOK.priv&apos;
-----
Done.

xocl.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.15.0-72-generic/updates/dkms/

xclmgmt.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.15.0-72-generic/updates/dkms/

depmod...

DKMS: install completed.
Finished DKMS common.postinst
Loading new XRT Linux kernel modules
modprobe: ERROR: could not insert 'xclmgmt': Operation not permitted
modprobe: ERROR: could not insert 'xocl': Operation not permitted
Installing MSD / MPD daemons
| Components                   |      Status        |
|------------------------------|--------------------|
| XOCL & XCLMGMT Kernel Driver | Success            |
| XRT USERSPACE                | Success            |
| MPD/MSD                      | Success            |
Setting up g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mo
de
Setting up build-essential (12.8ubuntu1.1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
</pre>

参考

まだ使い方を分っていないので、今後のヒントになりそうなことを書き留めています。xclmgmtまだ使い方を分っていないので、今後のヒントになりそうなことを書き留めています。

xbutil(Xilinx Board Utility)

XRTに含まれるコマンドラインユーティリティ。 xbutilを使う前に、bashでは以下のsetup.shを実行する必要がある。

$ source /opt/xilinx/xrt/setup.sh

Xilinx Board Utility コマンドライン構文

$ xbutil <command> [options]

//コマンド部はコマンドと引数が必要なコマンド場合は引数も必要。
 <command [commandArgs]>
// 以下はオプション
 [--help] [--version] [--verbose] [--batch] [--force]

// xclbinのロード
// xclLoadXclBinでは、xclbinをロードするioctlを実行している。
// ドライバでは、xclbinのBITSTREAMをFPGAに書き込む処理などを実行
fd = open(XCLBIN, O_RDONLY);
xclbin = (struct axlf *)mmap(NULL, xclbin_size, PROT_READ,
          MAP_PRIVATE, fd, 0);
ret = xclLoadXclBin(dev_handle, (const struct axlf *)xclbin);

アンインストール方法

PetaLinuxはアンインストール出来ませんが、XRTはアンインストール出来ました。

$ sudo apt remove xrt

//
$ sudo apt --installed | grep xrt    //<---xrtがインストールされているか確認
$ sudo apt --installed | grep xilinx //<--- インストールされた運用プラットフォームパッケージのリスト
$ sudo apt remove ./<xrt_package_name>  //<---運用プラットフォームのアンインストール

その他

xrt.ini

コメント