🎣

KV260アプリケーションの開発方法(3)

2022/04/16に公開

1.はじめに

KV260のARM上で動作するアプリケーションをPetaLinuxに追加する手順

2.アプリケーションの準備

今回はSmartCameraのアプリケーションを参考に使用して行きます。
Githubからクローンしてきます。Revisionが2021.1であることを確認します。

$ git clone https://github.com/Xilinx/smartcam
$ git branch
* 2021.1

SmartCameraアプリでGstreamerを使用するのでpetalinux-configコマンドを実行してGStreamerに必要なパッケージを有効にします。

$ petalinux-config -c rootfs
  • 「Filesystem Packages」→「misc」→「gstreamer1.0-meta-base」
  • 「Filesystem Packages」→「misc」→「gstreamer1.0-plugins-bad」
  • 「Filesystem Packages」→「misc」→「gstreamer1.0-plugins-base」
  • 「Filesystem Packages」→「misc」→「gstreamer1.0-plugins-good」
  • 「Filesystem Packages」→「misc」→「v4l-utils」
  • 「Filesystem Packages」→「misc」→「matchbox-config-gtk」
  • 「Filesystem Packages」→「misc」→「matchbox-panel-2」
  • 「Filesystem Packages」→「libs」→「libmali-xlnx」
  • 「Filesystem Packages」→「multimedia」→「gstreamer1.0」
  • 「Filesystem Packages」→「multimedia」→「gstreamer1.0-omx」
  • 「Filesystem Packages」→「multimedia」→「gstreamer1.0-rtsp-server」
  • 「Filesystem Packages」→「x11」→「matchbox-keyboard」
  • 「Filesystem Packages」→「x11」→「matchbox-session」
  • 「Filesystem Packages」→「x11」→「matchbox-session-sato」
  • 「Petalinux Package Groups」→「packagegroup-petalinux-opencv」
  • 「Petalinux Package Groups」→「packagegroup-petalinux-v4lutils」
  • 「Petalinux Package Groups」→「packagegroup-petalinux-gstreamer」

3.クロスコンパイル環境の準備

続いてアプリケーションのクロスコンパイル環境となるPetaLinuxのSDKをビルドします。

$ source <path-to-installed-PetaLinux>/settings.sh
$ cd <Petalinux-project-root>
$ petalinux-build -s

SDKを<Petalinux-project-root>/images/linux/sdkにインストールします。

$ images/linux/sdk.sh
PetaLinux SDK installer version 2021.1_SOM
============================================
Enter target directory for SDK (default: /opt/petalinux/2021.1_SOM): ./images/linux/sdk
You are about to install the SDK to "/opt/petalinux/xilinx-k26-starterkit-2021.1/images/linux/sdk". Proceed [Y/n]? Y

SDKの設定を読み込みます

$ source `<Petalinux-project-root>/images/linux/sdk/environment-setup-cortexa72-cortexa53-xilinx-linux

4.アプリケーションのクロスコンパイル

続いてアプリケーションをクロスコンパイルします。
必要パッケージをインストールします。

$ sudo apt-get install rpm

SmartCamのインストール先フォルダに移動し、クロスコンパイルを実行します。

$ cd <path-to-installed-smartcam>
$ chmod +x build.sh
$ ./build.sh <Petalinux-project-root>/images/linux/sdk
$ source images/linux/sdk/environment-setup-aarch64-xilinx-linux

ビルドが成功すると<path-to-installed-smartcam>/build/smartcam-1.0.1-1.aarch64.rpmというファイルが生成されます。

5.SDカードの準備

設定変更したのでPetaLinuxをビルドしてSDカードに書き込みなおします。
最初にビルドします。

$ petalinux-build

PetaLinuxのSDカードイメージを作成します。
アプリケーションを追加したPetaLinuxをパッケージングし、GZIPで圧縮ファイルを生成します。

$ petalinux-package --wic --bootfiles "ramdisk.cpio.gz.u-boot boot.scr Image system.dtb"
$ gzip images/linux/petalinux-sdimage.wic

EtcherでSDカードに書き込みます。

5.アプリケーションのインストール

KV260にSDカードを挿して電源を入れます。
今回はクロスコンパイルで生成したsmartcam-1.0.1-1.aarch64.rpmをKV260のPetaLinuxに直接転送してインストールしてみます。始めにPetaLinuxからKV260のIPアドレスを変更します。

PetaLinux
$ sudo ifconfig eth0 192.168.0.20

転送側PCのIPアドレスを192.168.0.15に設定し、コマンドプロンプトからSCPコマンドでsmartcam-1.0.1-1.aarch64.rpmを転送します。

HostPC
$ scp smartcam-1.0.1-1.aarch64.rpm petalinux@192.168.0.20:/home/petalinux/

PetaLinuxに戻ります。
PetaLinuxのHomeディレクトリにsmartcam-1.0.1-1.aarch64.rpmが転送されていることを確認し、パッケージインストールします。

PetaLinux
$ sudo rpm -ivh --force ./smartcam-1.0.1-1.aarch64.rpm
Verifying...                          ################################# [100%]
%pretrans(smartcam-1.0.1-1.aarch64): scriptlet start
%pretrans(smartcam-1.0.1-1.aarch64): execv(/bin/sh) pid 1421
%pretrans(smartcam-1.0.1-1.aarch64): waitpid(1421) rc 1421 status 0
Preparing...                          ################################# [100%]
%prein(smartcam-1.0.1-1.aarch64): scriptlet start
%prein(smartcam-1.0.1-1.aarch64): execv(/bin/sh) pid 1424
%prein(smartcam-1.0.1-1.aarch64): waitpid(1424) rc 1424 status 0
Updating / installing...
   1:smartcam-1.0.1-1                 ################################# [100%]
%post(smartcam-1.0.1-1.aarch64): scriptlet start
%post(smartcam-1.0.1-1.aarch64): execv(/bin/sh) pid 1427
%post(smartcam-1.0.1-1.aarch64): waitpid(1427) rc 1427 status 0
%posttrans(smartcam-1.0.1-1.aarch64): scriptlet start
%posttrans(smartcam-1.0.1-1.aarch64): execv(/bin/sh) pid 1428
%posttrans(smartcam-1.0.1-1.aarch64): waitpid(1428) rc 1428 status 0

6.アプリケーションの動作

以下でインストール済みのファームウエアをアップロードします。
https://zenn.dev/youkou/articles/c4c975b086c266

$ sudo xmutil unloadapp
$ sudo xmutil loadapp user-firmware
$ sudo xmutil listapps

SmartCamアプリを動かしてみます。
最初にHELPコマンドを実行してみます。以下のように正しく表示されることが確認できます。

$ smartcam --help
Usage:
  smartcam [OPTION?] - Application for facedetion detction on SoM board of Xilinx.

Help Options:
  -h, --help                        Show help options
  --help-all                        Show all help options
  --help-gst                        Show GStreamer Options

Application Options:
  -m, --mipi=                       use MIPI camera as input source, auto detect, fail if no mipi connected
  -u, --usb=media ID                usb camera media device id, e.g. 0 for /dev/media0
  -f, --file=file path              location of h26x file as input
  -i, --infile-type=h264            input file type: [h264 | h265]
  -W, --width=1920                  resolution w of the input
  -H, --height=1080                 resolution h of the input
  -r, --framerate=30                framerate of the input
  -t, --target=dp                   [dp|rtsp|file]
  -o, --outmedia-type=h264          output file type: [h264 | h265]
  -p, --port=554                    Port to listen on (default: 554)
  -a, --aitask                      select AI task to be run: [facedetect|ssd|refinedet]
  -n, --nodet                       no AI inference
  -A, --audio                       RTSP with I2S audio
  -R, --report                      report fps
  -s, --screenfps                   display fps on screen, notice this will cause performance degradation
  --ROI-off                         turn off ROI
  --control-rate=low-latency        Encoder parameter control-rate
  --target-bitrate=3000             Encoder parameter target-bitrate
  --gop-length=60                   Encoder parameter gop-length
  --profile                         Encoder parameter profile.
  --level                           Encoder parameter level
  --tier                            Encoder parameter tier
  --encodeEnhancedParam             String for fully customizing the encoder in the form "param1=val1, param2=val2,...", where paramn is the name of the encoder parameter

続いてSmartCamのRTSP配信を動かしてみますが、、、動きません。
MIPIカメラを認識していないというエラーが出ます。/dev/video0も認識されていません。。。

$ sudo smartcam --mipi -W 1920 -H 1080 --target rtsp

7.終わりに

今回はアプリケーションをコンパイルし、PetaLinuxで動かしてみる予定でしたが
Firmwareをロードしてもカメラが認識されない問題があり、うまくいきませんでした。
次回、その事理由について調べていこうと思います。

Discussion