作者:Zhang Yong,AMD工程師;來源:AMD開發(fā)者社區(qū)
V4L2loopback module是基于GPLv2 license的開源代碼,它可以創(chuàng)建多個虛擬video設備,而且一個虛擬設備可以被多條pipeline同時訪問,這給v視頻系統(tǒng)的研發(fā)調(diào)試帶來了很大靈活性。Petalinux工具的架構基于yocto,所以kernel module的編譯安裝基于yocto recipe。Petalinux工具自帶的一些recipe,但是不包含V4L2loopback。
通常要在rootfs里增加petalinux自帶的某些module,需要在project-spec/meta-user/conf/user-rootfsconfig里增加CONFIG_
DESCRIPTION = "A kernel module to create V4L2 loopback devices"LICENSE = "GPL-2.0-only"LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"SRC_URI = "git://github.com/umlaeute/v4l2loopback.git;protocol=https;branch=main""SRCREV = "1ecf810f0d687b647caa3050ae30cf51b5902afd"S = "${WORKDIR}/git"inherit moduleSTAGING_KERNEL_DIR = " /lib/modules/6.1.5-xilinx-v2023.1/build"MODULES_INSTALL_TARGET = "install-all"EXTRA_OEMAKE += "KERNEL_DIR=${STAGING_KERNEL_DIR}"EXTRA_OEMAKE += "PREFIX=${D}${prefix}"DEPENDS += "help2man-native"PACKAGES += "${PN}-utils"FILES:${PN}-utils = "${bindir}/v4l2loopback-ctl"RDEPENDS:${PN}-utils += " \gstreamer1.0 \gstreamer1.0-plugins-base \gstreamer1.0-plugins-good \sudo \v4l-utils \"
V4L2loopback module的編譯需要用到對應linux版本的kernel header files。我們可以在編譯v4l2loopback之前,先運行一次petalinux-build來生成kernel headers。具體方法是在project-spec/meta-user/conf/user-rootfsconfig里增加CONFIG_kernel-devsrc,project-spec/meta-user/conf/里增加INHERIT:remove = "rm_work",然后“petalinux-config -c rootfs”的menuconfig的user package里找到kernel-devsrc并mark yes,然后petalinux-build結(jié)束后就可以在image/linux里找到rootfs.tar.gz,把它copy到某個目錄里然后解壓,然后kernel headers就在lib/modules/6.1.5-xilinx-v2023.1/build里面。你需要在v4l2loopback.bb里把STAGING_KERNEL_DIR修改為你本地的kernel headers路徑。設置好kernel header之后就可以在user-rootfsconfig里增加CONFIG_v4l2loopback,并在rootfs menuconfig里enable v4l2loopback,最后就可以運行petalinux-build完成v4l2loopback kernel module compile&install。板子上啟動linux之后可以用sudo modprobe v4l2loopback exclusive_caps=1 video_nr=4命令生成/dev/video4這個虛擬camera設備,然后可以用ffmpeg把video stream從真實USB camera設備/dev/video0導入/dev/video4.
ffmpeg -i /dev/video0 -nostdin -loglevel panic -f v4l2 -s 1920x1080 -codec:v rawvideo -pix_fmt yuv420p /dev/video4 > /dev/null &
然后就可以使用/dev/video4這個設備了。需要說明一下,需要先導入視頻流到虛擬視頻設備,然后才能在application里使用它。

