✨
[yocto] v4l2loopbackビルド方法
背景
- imx yocto linux で GStreamer で v4l2sink を使おうとするとエラーになる。
- 最新のカーネルにオーバーレイが入っているらしいが見つからなかった。
- ググるとカーネルモジュールの umlaeute/v4l2loopback でやるそうだ。
- imx レイヤーになかったので自前ビルドする。
Yocto レシピ
Yoctoレシピは v4l2loopback on Yocto を参考に作成。
SUMMARY = "V4L2Loopback"
DESCRIPTION = "v4l2loopback module"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
SRC_URI = "git://github.com/umlaeute/v4l2loopback.git;protocol=https;branch=main"
S = "${WORKDIR}/git"
inherit module
export KERNEL_DIR="${KERNEL_SRC}"
MODULES_INSTALL_TARGET = "install"
RPROVIDES_${PN} += "kernel-module-v4l2loopback"
ビルドエラー対処
asm/tlbbatch.h: No such file or directory
asm/tlbbatch.h は x86 のものなので imx であるわけがない。
Makefile を見るとカーネルソースディレクトリが x86 になっているので、Yocto の KERNEL_SRC に変える。
レシピに export KERNEL_DIR="${KERNEL_SRC}"
を追加する。
No rule to make target 'modules_install'
v4l2loopback on Yocto に書いてあるが、Makefile に modules_install
ターゲットが存在しない。
デフォルト値は module.bbclass で
MODULES_INSTALL_TARGET ?= "modules_install"
になっている。
レシピに MODULES_INSTALL_TARGET = "install"
を追加する。
動作確認
v4l2loopback.ko を imx に持っていって以下を確認。
モジュール読み込み
insmod ./v4l2loopback.ko
lsmod
で存在確認
v4l2sink を試す
insmod すると /dev/video4
が追加されたので、これに videotestsrc を書き込む。で、video4 を RTSP 配信する。VLC で RTSP アクセスして表示できれば OK。
gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video4
gst-variable-rtsp-server -u "v4l2src device=/dev/video4 ! vpuenc_vp8 ! rtpvp8pay name=pay0"
Discussion