请选择 进入手机版 | 继续访问电脑版
本帖最后由 水精灵 于 2025-6-5 08:50 编辑

在嵌入式开发领域,虚拟视频设备的应用场景日益广泛。v4l2loopback作为一款功能强大的 Linux 内核模块,能够创建虚拟视频设备,实现视频流的灵活路由与处理,在视频会议、流媒体服务等场景中具有重要价值。本文将详细介绍如何在ELF 2开发板上部署v4l2loopback,涵盖环境搭建、内核配置、模块编译及测试验证等全流程,为开发者提供清晰的操作指南。
1.设置环境
首先需配置交叉编译工具链路径,确保系统能够正确识别ARM64架构的编译工具。打开终端,执行以下命令:
elf@ubuntu:~/work/ELF2-linux-source$ export PATH=/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/binPATH
2.配置内核
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh elf2_desktop_defconfig
3.编译内核头文件
内核头文件是编译内核模块的关键依赖,包含了内核 API 的定义。执行以下命令编译内核头文件:
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel linux-headers
4.获取并编译v4l2loopback
4.1克隆v4l2loopback仓库
通过Git工具从官方代码仓库获取v4l2loopback的最新源代码。在终端中执行以下命令:
elf@ubuntu:~/work/ELF2-linux-source$ git clone https://github.com/umlaeute/v4l2loopback.git
4.2进入v4l2loopback目录
克隆完成后,使用cd命令进入v4l2loopback源代码目录:
elf@ubuntu:~/work/ELF2-linux-source$ cd v4l2loopback/
4.3修改v4l2loopback.c文件
由于不同开发板的内核架构和配置存在差异,需对v4l2loopback的源代码进行适当修改以确保兼容性。使用文本编辑器打开v4l2loopback.c文件:
elf@ubuntu:~/work1/ELF2-linux-source/v4l2loopback$ vi v4l2loopback.c
做如下修改:
图片1.png
图片2.png
修改完成后,保存并退出编辑器。
4.4编译v4l2loopback模块
elf@ubuntu:~/work1/ELF2-linux-source/v4l2loopback$ make KERNEL_DIR=$(pwd)/../kernel      ARCH=arm64      CROSS_COMPILE=aarch64-buildroot-linux-gnu-
参数说明:
KERNEL_DIR=$(pwd)/../kernel:指定内核源代码目录,用于获取编译所需的内核头文件和编译配置。
ARCH=arm64:指定目标架构为ARM64,与ELF 2开发板的硬件架构匹配。
CROSS_COMPILE=aarch64-buildroot-linux-gnu-:指定交叉编译工具前缀,确保生成的模块适用于ARM64架构的开发板。
编译过程完成后,将在当前目录下生成名为v4l2loopback.ko的内核模块文件,这是后续需要部署到开发板上的核心文件。
5.测试验证
5.1拷贝v4l2loopback.ko文件到开发板

将生成的v4l2loopback.ko文件通过U盘拷贝到开发板/root目录下。
5.2加载模块
在开发板上加载v4l2loopback模块,创建2个设备并指定设备号。
root@elf2-desktop:~# insmod v4l2loopback.ko devices=2 video_nr=21,22 card_label=VirtualCam1,VirtualCam2
参数说明:
devices=2:指定创建2个虚拟视频设备。
video_nr=21,22:手动指定设备号为/dev/video21和/dev/video22,避免与系统已有的视频设备号冲突。
card_label=VirtualCam1,VirtualCam2(可选):为虚拟设备设置易识别的标签,方便后续使用中区分不同设备。
5.3列出已加载的模块
执行以下命令查看已加载的内核模块,确认 v4l2loopback 模块是否成功加载:
root@elf2-desktop:~# lsmod
图片3.png
输出包含v4l2loopback相关信息,则表明模块加载成功。
5.4检查生成的视频设备
通过以下命令列出系统中的视频设备文件,检查是否成功创建了指定的虚拟视频设备:
root@elf2-desktop:~# ls /dev/video*
图片4.png
可以看到/dev/video21和/dev/video22两个设备文件。
5.5查看设备信息
使用v4l2-ctl工具查看虚拟视频设备的详细信息:
root@elf2-desktop:~# v4l2-ctl --device=/dev/video21 --info
图片5.png
5.6视频流传输
说明:
ELF 2开发板连接屏幕;
登录两个终端,一个使用串口登录,一个使用网络登录;
5.6.1在终端1推送测试视频流(FFmpeg)
FFmpeg会持续生成SMPTE测试条视频流,并写入/dev/video21。
root@elf2-desktop:~# ffmpeg -f lavfi -i smptebars=size=1024x600 -pix_fmt yuv420p -f v4l2 /dev/video21
Image_20250605084611.png
终端1输出:
图片6.png
图片7.png
图片8.png
5.6.2在终端2查看视频流(GStreamer)
root@elf2-desktop:~# gst-launch-1.0 v4l2src device=/dev/video21 ! autovideosink
Image_20250605084735.png
屏幕弹出一个窗口显示SMPTE测试条:
图片9.png
通过以上步骤,我们完成了在ELF 2开发板上部署v4l2loopback的全过程。v4l2loopback的成功部署为开发板在视频处理领域的应用提供了强大的支持,开发者可基于此构建各种视频应用场景,如视频会议系统、智能监控系统等。在实际应用中,可根据具体需求调整设备参数和模块配置,以充分发挥虚拟视频设备的优势。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.5  © 2001-2013 Comsenz Inc.