2022-11-28

dfx-mgrd, dfx-mgr-client をそれぞれ動作させることができ、 FPGA に bin を書き込んで dtbo で認識させて GPIO の動作を確認するところまでできた。

nerves_system_kr260 を利用するプロジェクト側の rootfs_overlay で用意しているリソース群を nerves_system_kr260 側で用意させることができれば使いやすくなる。次はこれかな。

耳の炎症からどうも 良性発作性頭位めまい症 になった可能性がある。

today i read

Xilinx/xmutil

xmulti はいくつかの実行バイナリのラッパー。今日の作業で関係するのは以下、

  • xmutil unloadppdfx-mgr-client -remove
  • xmutil loadapp [args]dfx-mgr-client -load [args]

Xilinx/dfx-mgr

デーモン, dfx-mgrd と クライアント, dfx-mgr-client からなる。

Once you compile petalinux by enabling the dfx-mgr recipe, you should have dfx-mgrd and dfx-mgr-client in /usr/bin of rootfs and libdfx-mgr.so in /usr/lib. The config file daemon.conf can be found in /etc/dfx-mgrd/. Config file is mandatory, refer the files section for details of it. A default daemon.conf will be copied by the recipe and the user is expected to update as required.

refs. https://github.com/Xilinx/dfx-mgr/blob/xilinx_v2022.1_update2/README.md

Ubuntu for Kria SOMs/ を grep

sudo grep -irn "dfx-mgrd" ./*
バイナリファイル ./bin/dfx-mgrd に一致しました
./etc/dfx-mgrd/daemon.conf:3:	"default_accel":"/etc/dfx-mgrd/default_firmware"
バイナリファイル ./lib/aarch64-linux-gnu/libdfx-mgr.so.1.0 に一致しました
./lib/systemd/system/dfx-mgr.service:7:Description=dfx-mgrd Dynamic Function eXchange
./lib/systemd/system/dfx-mgr.service:11:ExecStart=/usr/bin/dfx-mgrd
バイナリファイル ./usr/bin/dfx-mgrd に一致しました
バイナリファイル ./usr/lib/aarch64-linux-gnu/libdfx-mgr.so.1.0 に一致しました
./usr/lib/systemd/system/dfx-mgr.service:7:Description=dfx-mgrd Dynamic Function eXchange
./usr/lib/systemd/system/dfx-mgr.service:11:ExecStart=/usr/bin/dfx-mgrd

調査対象

以下であるため、

lrwxrwxrwx   1 root root     7  6月  9 19:08 bin -> usr/bin
lrwxrwxrwx   1 root root     7  6月  9 19:08 lib -> usr/lib

以下のみを調べれば良い。

  • /usr/bin/dfx-mgrd
  • /usr/lib/aarch64-linux-gnu/libdfx-mgr.so.1.0
  • /etc/dfx-mgrd/daemon.conf
  • /usr/lib/systemd/system/dfx-mgr.service

調査結果

ls -la ./usr/bin/dfx-mgrd
-rwxr-xr-x 1 root root 10168  6月  8 21:43 ./usr/bin/dfx-mgrd
ls -la ./usr/lib/aarch64-linux-gnu/libdfx-mgr.so.1*
lrwxrwxrwx 1 root root     17  6月  8 21:43 ./usr/lib/aarch64-linux-gnu/libdfx-mgr.so.1 -> libdfx-mgr.so.1.0
-rw-r--r-- 1 root root 146728  6月  8 21:43 ./usr/lib/aarch64-linux-gnu/libdfx-mgr.so.1.0
cat ./etc/dfx-mgrd/daemon.conf
{
	"firmware_location": ["/lib/firmware/xilinx"],
	"default_accel":"/etc/dfx-mgrd/default_firmware"
}
ls -la ./usr/lib/systemd/system/dfx-mgr.service
-rw-r--r-- 1 root root 405  5月 10  2022 ./usr/lib/systemd/system/dfx-mgr.service
cat ./usr/lib/systemd/system/dfx-mgr.service
#
# DFX manager daemon is used to demonstrate Dynamic Function eXchange (DFX)
# or partial reconfiguration feature on Xilinx Zynq UltraScale+ and newer.
# See: UG909 "Vivado Design Suite User Guide Dynamic Function eXchange"

[Unit]
Description=dfx-mgrd Dynamic Function eXchange
Documentation=https://github.com/Xilinx/dfx-mgr

[Service]
ExecStart=/usr/bin/dfx-mgrd

[Install]
WantedBy=multi-user.target

Xilinx/libdfx

dfx-mgr が利用するライブラリ。 dfx_cfg_load 等の関数が実装されている。

内部的に echo -n を使っており、 Nerves default の ash built-in echo だとエラーになる。

iex(6)> cmd "echo -n k26_starter_kits.dtbo /configfs/device-tree/overlays/k26-starter-kits_image_1/path"
-n k26_starter_kits.dtbo /configfs/device-tree/overlays/k26-starter-kits_image_1/path
0
[  230.236416] (NULL device *): Direct firmware load for -n k26_starter_kits.dtbo failed with error -2

refs. https://github.com/Xilinx/libdfx/blob/xilinx_v2022.1_update2/src/libdfx.c#L228-L231

busybox に オプションありの echo を追加することで動作させることができた。
※そもそも libdfx で -n オプションを使う必要や echo で書き込む必要があるのかというのはある。。