KV260アプリケーションの開発方法(3)
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アドレスを変更します。
$ sudo ifconfig eth0 192.168.0.20
転送側PCのIPアドレスを192.168.0.15
に設定し、コマンドプロンプトからSCPコマンドでsmartcam-1.0.1-1.aarch64.rpm
を転送します。
$ 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
が転送されていることを確認し、パッケージインストールします。
$ 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.アプリケーションの動作
以下でインストール済みのファームウエアをアップロードします。
$ 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