KV260自作プラットフォームつくる
FPGAとかHDLとかHLSとか全然わからないけど、手順書見ながら俺様プラットフォームを作ってみる。基本Xilinxのドキュメントを見ながらやる。
役立つblog
インストールが必要なのはVivado、Vitis、petalinuxで、こいつらはVivadoのインストーラをXilinxのダウンロードページからとってきて使う。良くも悪くもないインストーラ。
FPGAというか、kriaをどうやって使うかとかそのへんの考え方は時間があったら後でまとめる。
まず、デバイスというか、ハードウェアのデザインをする。このときのハードウェアっていうのはチップとかクロックとか割り込みとかのこと。
Petalinux install
sudo apt update && sudo apt install -y \ python3 gawk gcc git make net-tools libncurses5-dev tftpd \ zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget \ diffstat chrpath socat xterm autoconf libtool tar unzip \ texinfo zlib1g-dev gcc-multilib build-essential screen pax gzip \ device-tree-compiler
ls -l /bin/sh sudo dpkg-reconfigure dash # Select "No" to use bash
をやってからインストーラでpetalinuxをインストール。
英語版
- Custom Kria SOM Platform Creation Example - 2023.2 English - XD101
- Step 2: Create the Vitis platform - 2023.2 English - XD101
ZynqMP用共通イメージ。これ探すのめっちゃ苦労した。
Petalinuxでコケる
ここで
petalinux-build
すると、レポジトリのデフォルトブランチがmasterからmainに変わってて、レポジトリをフェッチできないって怒られるので、yoctoの設定ファイルを書き換える。
vi components/yocto/layers/poky/meta/recipes-extended/cracklib/cracklib_2.9.8.bb
でエディタを立ち上げて、その中の、 SRC_URI のブランチ指定してるとこをmasterからmainに書き換える。こんな感じにしとく。
#SRC_URI = "git://github.com/cracklib/cracklib;protocol=https;branch=master \ # file://0001-packlib.c-support-dictionary-byte-order-dependent.patch \ # file://0002-craklib-fix-testnum-and-teststr-failed.patch \ # " SRC_URI = "git://github.com/cracklib/cracklib;protocol=https;branch=main \ file://0001-packlib.c-support-dictionary-byte-order-dependent.patch \ file://0002-craklib-fix-testnum-and-teststr-failed.patch \ "
Vivado install
Vivado2024.2でやるとき
xmutilであれこでするときにコケる
xmutilはdxf-mgrのラッパーで、Pythonでラッピングしているらしい。vaddをロードしようとすると、こういうぶっきらぼうなエラーメッセージが出てくる。
$ sudo xmutil loadapp vadd vadd: load Error: -1
他のエラーの場合はドライバの不整合とか、もうすこ手がかりがあるっぽい。
- [Q&A] 【kv260】vadd実行できず[XRT] ERROR: No devices found - Qiita
- The 6th AI Edge Contest (Implementation Contest 4) | SIGNATE - Data Science Competition
- AMD Customer Community
- FPGAの部屋 kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる15
Known issuesにはそれらしきものは載ってないが、多分Vivadoの問題じゃない。
xmutilとdfx-mgrのレポジトリ。
VitisでOpenSSLのバージョンがうまくいかないやつ
Vitis走らしてて
/opt/petalinux/2024.2/sysroots/x86_64-petalinux-linux/usr/bin/../libexec/git-core/git-remote-https: /tools/Xilinx/Vitis/2024.2/lib/lnx64.o/libssl.so.3: version `OPENSSL_3.2.0' not found (required by /opt/petalinux/2024.2/sysroots/x86_64-petalinux-linux/usr/lib/libcurl.so.4)
こういうエラーが出る。
ちなみにOpenSSLのバージョンは3.0だった。
OpenSSLの3.2をクローンしてビルドしてパス通して対応する。
まずOpenSSLをクローンしてビルドする。git cloneとビルドは適当な作業ディレクトリでやる。たとえば ~/tmpとかでおk。
git clone https://github.com/openssl/openssl.git cd openssl git checkout openssl-3.2.0 ./config --prefix=/opt/openssl/3.2.0 make sudo make install
パス通す。
>||
export LD_LIBRARY_PATH=/opt/openssl/3.2.0/lib:$LD_LIBRARY_PATH
|
そしてOpenSSLのバージョンが3.2になってるか確認する。
openssl version
パス通す。
ldd /opt/petalinux/2024.2/sysroots/x86_64-petalinux-linux/usr/lib/libcurl.so.4 export OPENSSL_DIR=/opt/openssl/3.2.0 export LD_LIBRARY_PATH=/opt/openssl/3.2.0/lib:$LD_LIBRARY_PATH
xsctとかVitisに強制的にOpenSSL3.2つかわすようにリンクさす。
sudo ln -sf /opt/openssl/3.2.0/lib/libssl.so.3 /tools/Xilinx/Vitis/2024.2/lib/lnx64.o/libssl.so.3 sudo ln -sf /opt/openssl/3.2.0/lib/libcrypto.so.3 /tools/Xilinx/Vitis/2024.2/lib/lnx64.o/libcrypto.so.3
xsctいい感じに使う。
xsaからdevice treeつくるときにxsctでエラーが出る *
xsct% createdts -hw kv260_hardware_platform/kv260_hardware_platform.xsa -zocl -out . -platform-name mydevice -git-branch xlnx_rel_v2024.2 -overlay -compile INFO: DTG repo already exists at /home/nsakairi/vitis_ws/device-tree-xlnx INFO: [Hsi 55-2053] elapsed time for repository (/tools/Xilinx/Vitis/2024.2/data/embeddedsw) loading 1 seconds hsi::open_hw_design: Time (s): cpu = 00:00:06 ; elapsed = 00:00:06 . Memory (MB): peak = 866.070 ; gain = 134.738 ; free physical = 706 ; free virtual = 9695 INFO: Creating platform mydevice at . Opening the hardware design, this may take few seconds. INFO: Populating the default qemu data for the domain "device_tree_domain" from the install location /tools/Xilinx/Vitis/2024.2/data/emulation/platforms/zynqmp/sw/a53_standalone/qemu/ WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0" WARNING: Clock pin "s_axi_aclk" of IP block "axi_intc_0" is not connected to any of the pl_clk" zocl:true ext_platform: intr_ctrl_len:1 WARNING: psu_usb_xhci_0: No reset found WARNING: label 'usb0' found in existing tree INFO: Generating device tree WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0" WARNING: Clock pin "s_axi_aclk" of IP block "axi_intc_0" is not connected to any of the pl_clk" zocl:true ext_platform: intr_ctrl_len:1 WARNING: psu_usb_xhci_0: No reset found WARNING: label 'usb0' found in existing tree Building the BSP Library for domain - device_tree_domain on processor psu_cortexa53_0 make: Nothing to be done for 'all'. In file included from zynqmp.dtsi:18, from system-top.dts:9: include/dt-bindings/interrupt-controller/arm-gic.h:9:50: error: no include path in which to search for dt-bindings/interrupt-controller/irq.h 9 | #include <dt-bindings/interrupt-controller/irq.h> | ^
dt-bindings/interruptがみつからないというけど、 source /tools/Xilinx/Vivado/2024.2/settings.shとsource /tools/Xilinx/Vitis/2024.2/settings.shをしたあとで、DTC_INCLUDE_PATHを見てみると実際にパスが通ってて、
$ echo $DTC_INCLUDE_PATH ./device-tree-xlnx/device_tree/data/kernel_dtsi/2024.2/include/dt-bindings/
中身を見てみると、
$ ls $DTC_INCLUDE_PATH/interrupt-controller/ arm-gic.h irq.h
でirq.hが入ってる。
同じエラー事例を探すとAMDのコミュニティに同じエラーで困ってる人が見つかるが、まだ解決してない。
xsctのなかでdt-bindings/interruptのパスが通ってないし、通せないからこのエラーが起きてて、色々と調べると--compileオプションがついてて、デバイスツリーをコンパイルするときにこのエラーが出てるっぽいので、コンパイルオプションを外してみるとデバイスツリー作るとこまではできた。
$ xsct rlwrap: warning: your $TERM is 'xterm-256color' but rlwrap couldn't find it in the terminfo database. Expect some problems. ****** Software Commandline Tool (XSCT) v2024.2.0 **** SW Build 5239620 on Fri Nov 08 16:21:51 MST 2024 ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. ** Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. Warning: XSCT is deprecated and will be removed in future releases. We recommend using the new Python command-line tool for project management and debugging: - Run "vitis -i" for interactive mode. - Run "vitis -s <script>" for script mode. xsct% createdts -hw kv260_hardware_platform/kv260_hardware_platform.xsa -zocl -out . -platform-name mydevice -git-branch xlnx_rel_v2024.2 -overlay INFO: DTG repo already exists at /home/nsakairi/vitis_ws/device-tree-xlnx INFO: [Hsi 55-2053] elapsed time for repository (/tools/Xilinx/Vitis/2024.2/data/embeddedsw) loading 0 seconds hsi::open_hw_design: Time (s): cpu = 00:00:06 ; elapsed = 00:00:06 . Memory (MB): peak = 866.070 ; gain = 134.738 ; free physical = 2383 ; free virtual = 9898 INFO: Creating platform mydevice at . Opening the hardware design, this may take few seconds. INFO: Populating the default qemu data for the domain "device_tree_domain" from the install location /tools/Xilinx/Vitis/2024.2/data/emulation/platforms/zynqmp/sw/a53_standalone/qemu/ WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0" WARNING: Clock pin "s_axi_aclk" of IP block "axi_intc_0" is not connected to any of the pl_clk" zocl:false ext_platform: WARNING: psu_usb_xhci_0: No reset found WARNING: label 'usb0' found in existing tree INFO: Generating device tree WARNING: no s_axi_aclk for clockwizard IP block: " clk_wiz_0" WARNING: Clock pin "s_axi_aclk" of IP block "axi_intc_0" is not connected to any of the pl_clk" zocl:true ext_platform: intr_ctrl_len:1 WARNING: psu_usb_xhci_0: No reset found WARNING: label 'usb0' found in existing tree Building the BSP Library for domain - device_tree_domain on processor psu_cortexa53_0 make: Nothing to be done for 'all'. INFO: Device tree generation successful
xsctをexitして、mydevideディレクトリを覗いてみる。
$ ls mydevice/psu_cortexa53_0/device_tree_domain/bsp/ include Makefile pcw.dtsi pl-custom.dtsi pl.dtsi pl-final.dts system.dts system.mss system-top.dts zynqmp-clk-ccf.dtsi zynqmp.dtsi
system.dtsとsystem.dtsiができてるが、system.dtbはできてないのがわかる。
Petalinuxのupgradeできないやつ
ここで、petalinux-upgradeするとチュートリアルのURLが間違ってるのでupgradeできない。
ここから諸々ダウンロードするので、コマンドを修正して実行する。
petalinux-upgrade -u "http://petalinux.xilinx.com/sswreleases/rel-v2024.2/sdkupdate/" -p "aarch64"
KV260でAIくんやってみる
これは随時更新していきます。
とりあえずこれなぞってる。Smart cameraやってる。
沼ったとこ
XSAつくるときにプロセス数を制限しないとパソコンが固まる
Ubuntu24.04LTSで、論理CPU 8コアのi5使ってるけど、これで、普通にmakeすると途中で止まる。
チュートリアルのこのセクション:
Build the Vivado Design — Kria™ KV260 2022.1 documentation
$ make xsa /tools/Xilinx/Vivado/2024.2/bin/vivado -mode batch -notrace -source scripts/main.tcl -tclargs -jobs 8 ... kv260_ispMipiRx_vcu_DP_axi_ic_vcu_dec_imp_s00_regslice_0_synth_1: /home/nsakairi/projects/kria-vitis-platforms/kv260/platforms/vivado/kv260_ispMipiRx_vcu_DP/project/kv260_ispMipiRx_vcu_DP.runs/kv260_ispMipiRx_vcu_DP_axi_ic_vcu_dec_imp_s00_regslice_0_synth_1/runme.log [Sat Jan 4 03:51:20 2025] Launched synth_1... Run output will be captured here: /home/nsakairi/projects/kria-vitis-platforms/kv260/platforms/vivado/kv260_ispMipiRx_vcu_DP/project/kv260_ispMipiRx_vcu_DP.runs/synth_1/runme.log [Sat Jan 4 03:51:20 2025] Waiting for synth_1 to finish...
とかでwaitの状態でパソコンが固まる。多分X使ってるからなんだけど、CPU全部使うと止まるので、コア数を制限しないといけない。普通にmakeでビルドかけるとCPU全部使うので、手打ちでコア数を決めてビルドする。
6コアでやっても止まったので、多分半分くらいの4コアがよい。
/tools/Xilinx/Vivado/2024.2/bin/vivado -mode batch -notrace -source scripts/main.tcl -tclargs -jobs 4
ってやったら最後までビルドが走った。
Xilinx KV260でHLSの準備の躓きポイントまとめ
※これは自分用メモです
petalinux-configの躓きポイント
とりあえずハードウェアのデザインするので、この辺をなぞっていく。これは後々更新してく。
多分Vivadoでハードウェアのデザインするところはそんなはまらないと思う。その後で、petalinuxでソフトウェア関係の色々、カーネルとか、ブートローダつくるときにpetalinuxでハマったので、まとめとく。
まず、Vivadoを入れるとVitisまではインストールされるけど、petalinuxは別にインストールしないといけないので、xilinxのwebからダウンロードする。OSはUbuntuを使ってる想定。ダウンロードはこっちのページからできる。
Petalinuxの作業の流れはこのページが考え方がまとまってると思う。
基本的には 手順 2: ソフトウェア コンポーネントの作成 - Vitis™ チュートリアル 2022.1 の資料 に書いてあるとおりに進めるが、petalinux2024を使ってるとpetalinux-createのときに使うbspをSDTとXSCTのどっちかを選ばないといけなくて、間違えたbspでプロジェクトを作ると延々と、
petalinux-config --get-hw-description=<path to xsa> --silent [INFO] Getting hardware description [ERROR] This Project was configured with "sdt", you may see issues if you use the same project for "xsa" flow
というエラーに悩まされることになる。このエラーが出てるときはXSCTを選んでないことになるので、XSCTのbspをこっちからダウンロードしてくる。
ちなみに、bspファイルはこっちから適当なやつを引っ張ってくる。
これで、petalinux-create、petalinux-configは通るようになった。
petalinux-buildでの躓きポイント
libtinfoが見つからない
何も考えないでpetalinux-buildすると、
ERROR: libtinfo.so.5 is required by meta-xilinx-tools. This library must be installed before the build system can use xsct. It is often part of an ncurses5 package.
っていうのが出て、tinfoっていうライブラリがないっていわれてるけど、細心のバージョンは6なので、古いやつを入れないといけない。
以下のコマンドで対応する。
sudo tee /etc/apt/sources.list.d/jammy.list <<EOF deb http://archive.ubuntu.com/ubuntu/ jammy universe EOF sudo tee /etc/apt/preferences.d/pin-jammy <<EOF Package: * Pin: release n=jammy Pin-Priority: -10 Package: libtinfo5 Pin: release n=jammy Pin-Priority: 990 EOF sudo apt-get update sudo apt-get install libtinfo5
Ubuntu24.04LTSでPetalinux2024.2を使うときのエラー
なんかUbuntu24.04LTSでカーネルの何かが変わったらしく、petalinux-buildを走らすとパミッションエラーが出る。
petalinux ERROR: PermissionError: [Errno 1] Operation not permitted During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/user/projects/vidado_sandbag/pl_ws/xilinx-kv260-starterkit-xsct-2024.2/components/yocto/layers/poky/bitbake/bin/bitbake-worker", line 278, in child bb.utils.disable_network(uid, gid) File "/home/nsakairi/projects/vidado_sandbag/pl_ws/xilinx-kv260-starterkit-xsct-2024.2/components/yocto/layers/poky/bitbake/lib/bb/utils.py", line 1696, in disable_network with open("/proc/self/uid_map", "w") as f: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 1] Operation not permitted
これを解消するのがちょっとカーネルの設定いじるので度胸が必要になるけど、petalinux-buildする前に、
sudo sysctl kernel.apparmor_restrict_unprivileged_userns=0
を走らせて、petalinux-buildしたあとで設定をもとに戻すために、
sudo sysctl kernel.apparmor_restrict_unprivileged_userns=1
を走らせる。sudo echo ...とか野蛮なことをしなくて住むようになった世界は素敵だ。
PetalinuxのKV260向けアップグレード
KV260のスターターキット用に色んなものをenableにしないといけないので、以下のコマンド走らす。これやらないとbuildでコケる。
petalinux-upgrade -u "https://petalinux.xilinx.com/sswreleases/rel-v2024.2/sdkupdate/2024.2_update1/" -p "aarch64"
これやらないと、こういうエラーが出る。
NOTE: Executing Tasks ERROR: fsbl-firmware-2024.2+git-r0 do_configure: ExecutionError('/home/<user>/projects/vidado_sandbag/pl_ws/xilinx-kv260-starterkit-xsct-2024.2/build/tmp/work/xilinx_k26_kv-xilinx-linux/fsbl-firmware/2024.2+git/temp/run.do_configure.976376', 1, None, None) ERROR: Logfile of failure stored in: ...
Petalinux build
petalinux-build
の後で、
petalinux-build --sdk
を走らす。
WSL2のdockerがうごかないとき
こんなんなって、
$ docker compose ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
このQiitaの記事で復活した。
minioをWindowsのDドライブに入れる
CドライブのWSLのストレージがヤバくなってきたので、Dドライブにストレージ作ることにした。Dドライブに入れるのでWindowsに入れる。
Windowsへのminoのインストール。
Windowsでminioのadminのユーザ名とかパスワードをかえる。今の環境変数一覧は、
Get-ChildItem Env:
で調べられる。
minioの環境変数は、'MINIO_ROOT_USER'と'MINIO_ROOT_PASSWORD'で、これを変える。変更の仕方は、
$Env:MINIO_ROOT_USER="root-user-name" $Env:MINIO_ROOT_PASSWORD="root-password"
みたいにしてやる。
参考リンク。
ただ、これでWSLからminioの中を見ようとして、AWS CLIでlsすると怒られる。
$ aws --endpoint-url http://192.168.1.1:9090:9000 s3 ls Invalid region: region was not a valid DNS name.
久しぶりにminikubeつかう
インストールメモ。
WSL2でUSBカメラ
まさかのWSL2ではUSBカメラ使えないので、WSLのカーネルいじるらしい。
B-ingちゃんに聞いたらうまいこといった。
手順だけ書いとくとpower shellをAdminで起動して、USBカメラをアタッチするとWSLから見れるようになったみたい。
PS C:\WINDOWS\system32> usbipd list Connected: BUSID VID:PID DEVICE STATE 1-10 056e:7019 ELECOM 1MP Webcam, Webcam internal mic Shared Persisted: GUID DEVICE PS C:\WINDOWS\system32> usbipd wsl detach --busid 1-10
WSLでDISPLAYにwindowsのipconfigで調べたIPとDISPLAYのポート番号を指定する。
WSLの/dev/video0とか/dev/video1とかにUSBカメラがマウントされるので、そいつのパミッションを変えて、v412-ctlでカメラをWSLが認識してるか調べる。
VcXSRVは起動してるものとする。
$ export DISPLAY=1292.168.1.194:0 $ sudo chmod 777 /dev/video* $ $ sudo v4l2-ctl --list-devices ELECOM 1MP Webcam: ELECOM 1MP W (usb-vhci_hcd.0-1): /dev/video0 /dev/video1 /dev/media0
guvcviewを開くとカメラの映像をWSLから見れる。
$ guvcview
# 追記
WSL2でコンテナでやるとうまく認識しなかったので、これをやった。