KV260でAIくんやってみる

 これは随時更新していきます。

 とりあえずこれなぞってる。Smart cameraやってる。

xilinx.github.io

沼ったとこ

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の躓きポイント

 とりあえずハードウェアのデザインするので、この辺をなぞっていく。これは後々更新してく。

xilinx.github.io

xilinx.github.io

 多分Vivadoでハードウェアのデザインするところはそんなはまらないと思う。その後で、petalinuxでソフトウェア関係の色々、カーネルとか、ブートローダつくるときにpetalinuxでハマったので、まとめとく。

 まず、Vivadoを入れるとVitisまではインストールされるけど、petalinuxは別にインストールしないといけないので、xilinxのwebからダウンロードする。OSはUbuntuを使ってる想定。ダウンロードはこっちのページからできる。

www.xilinx.com


 Petalinuxの作業の流れはこのページが考え方がまとまってると思う。

adaptivesupport.amd.com

 基本的には 手順 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をこっちからダウンロードしてくる。

https://www.xilinx.com/member/forms/download/xef.html?filename=xilinx-kv260-starterkit-xsct-v2024.2-12072024.bsp

 ちなみに、bspファイルはこっちから適当なやつを引っ張ってくる。

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+SOMs+Starter+Kits#PetaLinux-Board-Support-Packages


 これで、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 ...とか野蛮なことをしなくて住むようになった世界は素敵だ。

tm23forest.com

askubuntu.com

lists.yoctoproject.org

adaptivesupport.amd.com

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の記事で復活した。

qiita.com

minioをWindowsのDドライブに入れる

 CドライブのWSLのストレージがヤバくなってきたので、Dドライブにストレージ作ることにした。Dドライブに入れるのでWindowsに入れる。

 Windowsへのminoのインストール。

min.io

 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"

みたいにしてやる。
 参考リンク。

learn.microsoft.com

bizlog.tech

ただ、これで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.

WSL2でUSBカメラ

 まさかのWSL2ではUSBカメラ使えないので、WSLのカーネルいじるらしい。

github.com

 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でコンテナでやるとうまく認識しなかったので、これをやった。

forum.opencv.org

WSL2でUSBカメラ

 まさかのWSL2ではUSBカメラ使えないので、WSLのカーネルいじるらしい。

github.com