0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElfBoard技术贴|如何在ELF 2开发板上部署v4l2loopback

ElfBoard 2025-06-05 14:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统开发领域,虚拟视频设备技术正成为实现多媒体功能创新的关键技术支撑。v4l2loopback作为一款功能强大的Linux内核模块,可以为视频流处理提供灵活的路由架构,在远程协作、实时流媒体传输及AI视觉处理等场景展现出显著应用价值。本文将以ELF 2开发板为载体,系统阐述v4l2loopback模块的工程化部署全流程。

一、设置环境

首先需配置交叉编译工具链路径,确保系统能够正确识别ARM64架构的编译工具。打开终端,执行以下命令:

elf@ubuntu:~/work/ELF2-linux-source$ export PATH=/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/bin:$PATH

二、配置内核

elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh elf2_desktop_defconfig

三、编译内核头文件

内核头文件是编译内核模块的关键依赖,包含了内核 API 的定义。执行以下命令编译内核头文件:

elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel linux-headers


四、获取并编译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

做如下修改:

wKgZO2hBM0uASyZlAADBObJOlAM001.pngwKgZPGhBM1aASAjbAAD2MM6BtmA006.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.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

wKgZO2hBNGKAZCmtAAAnEnLRipg857.png

输出包含v4l2loopback相关信息,则表明模块加载成功。

5.4检查生成的视频设备

通过以下命令列出系统中的视频设备文件,检查是否成功创建了指定的虚拟视频设备:

root@elf2-desktop:~# ls /dev/video*

wKgZO2hBNKKAPk5FAABKpF9lbFU302.png

可以看到/dev/video21和/dev/video22两个设备文件。

5.5查看设备信息

使用v4l2-ctl工具查看虚拟视频设备的详细信息

root@elf2-desktop:~# v4l2-ctl --device=/dev/video21 --info

wKgZPGhBNRKAQTHQAACEWkwtUS8589.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

wKgZPGhBNayAZUGAAABxMwUxxPc810.png

终端1输出:

wKgZPGhBNcCAfm1iAAD3P3UeGdQ669.pngwKgZO2hBNceAN0-7ABT4OOrzTYw701.pngwKgZO2hBNdOABQrDABvZWgYOseo046.png

5.6.2在终端2查看视频流(GStreamer)

root@elf2-desktop:~# gst-launch-1.0 v4l2src device=/dev/video21 ! autovideosink

wKgZO2hBNgmABSL5AAA9oDkFqPw303.png

屏幕弹出一个窗口显示SMPTE测试条:

wKgZO2hBNiOAGL6UAACYKpldTbc377.png

通过以上步骤,我们完成了在ELF 2开发板上部署v4l2loopback的全过程。从事嵌入式开发工程师与高校师生可基于此构建各种视频应用场景,如视频会议系统、智能监控系统等。如果在实践中遇到问题,欢迎随时交流探讨!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45341

    浏览量

    663694
  • 嵌入式
    +关注

    关注

    5186

    文章

    20155

    浏览量

    328968
  • Linux开发
    +关注

    关注

    0

    文章

    44

    浏览量

    7613
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ElfBoard技术|如何在NXP源码基础上适配ELF 1开发板的UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出
    的头像 发表于 09-25 13:56 3158次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>NXP源码基础上适配<b class='flag-5'>ELF</b> 1<b class='flag-5'>开发板</b>的UART功能

    来自资深工程师对ELF 2开发板的产品测评

    来自资深工程师对ELF 2开发板的使用测评
    的头像 发表于 04-28 15:03 1535次阅读
    来自资深工程师对<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>的产品测评

    ElfBoard技术实战|ELF 2开发板本地部署DeepSeek大模型的完整指南

    ELF 2开发板本地部署DeepSeek大模型的完整指南
    的头像 发表于 05-16 11:13 2291次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b>实战|<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>本地<b class='flag-5'>部署</b>DeepSeek大模型的完整指南

    ElfBoard技术|如何在ELF 2开发板中适配 AX200NGW WiFi模块

    ELF2开发板适配AX200NGWWi-Fi6模块,是开发者在嵌入式设备中实现高速无线联网的实际需求,更是解锁其全场景无线通信能力的关键升级。针对ARM架构需要手动适配的特性,本文将提供清晰的步骤
    的头像 发表于 06-24 09:09 1980次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>中适配 AX200NGW WiFi模块

    ElfBoard技术|如何在【RK3588】ELF 2开发板上进行根系统的定制

    ELF 2开发板已经适配了Linux 5.10及Elf2 Desktop 22.04操作系统,其中Elf2 Desktop 22.04系统是
    的头像 发表于 07-02 16:33 2759次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>【RK3588】<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>上进行根系统的定制

    ElfBoard技术|如何在【RK3588】ELF 2开发板上进行UART引脚复用配置

    IOMUX(引脚功能复用)是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术,它允许单个物理引脚通过软件配置为多种不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方式各异,本文将以【RK3588】ELF
    的头像 发表于 11-18 16:54 5081次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>【RK3588】<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>上进行UART引脚复用配置

    ElfBoard技术|如何在【RK3588】ELF 2开发板实现I2C功能复用

    C等。由于此项配置的具体实现因SoC平台而异,本文特以【RK3588】ELF 2开发板上的I2C6引脚为例,系统说明从硬件规格查询到软件驱动配置的完整步骤。
    的头像 发表于 12-04 10:10 5938次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>【RK3588】<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>实现I<b class='flag-5'>2</b>C功能复用

    ELF 2学习试用】ELF2开发板开箱体验及基本使用环境搭建

    开发板 输出为12v 3A的电源适配器(和ipad的充电器外观好像) 图1 外包装盒 图2 开箱物品内容 图3 ELF2开发板正面
    发表于 01-19 22:41

    rk3399是怎样使用v4l2loopback实现虚拟camera开发

    1、编译v4l2回环设备驱动camera驱动,生成video0设备;drivers/v4l2loopback/v4l2loopback.cdrivers/v4l2loopback
    发表于 05-06 11:34

    ELF技术|如何在开发板上实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选择空间,今天就为各位小伙伴详细解析如何在
    的头像 发表于 03-13 16:47 1058次阅读
    <b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>开发板</b>上实现对Java的支持

    ElfBoard技术|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目标是调整功能接口引脚配置,以适应ELF1开发板。接下来
    的头像 发表于 07-10 09:54 1228次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配<b class='flag-5'>ELF</b> 1<b class='flag-5'>开发板</b>的按键功能

    ElfBoard技术|如何在ELF 1开发板上搭建流媒体服务器

    流媒体服务器是一种专门用于传输实时数据流的服务器软件,广泛用于视频直播、视频会议、音频播放等应用场景。在嵌入式开发领域,将流媒体服务器部署开发板上可以实现诸如视频监控、实时数据传输等功能。本文将介绍如何利用nginx和其rtm
    的头像 发表于 08-20 14:48 1292次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> 1<b class='flag-5'>开发板</b>上搭建流媒体服务器

    ElfBoard技术|如何在ELF 1开发板上交叉移植Qt

    在嵌入式系统开发领域,针对特定硬件平台进行Qt框架的移植与适配是一项关键技术任务。作为业界主流的跨平台应用开发框架,Qt凭借其完善的图形界面支持能力,在嵌入式开发图形界面应用程序中占据
    的头像 发表于 02-24 16:18 1045次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> 1<b class='flag-5'>开发板</b>上交叉移植Qt

    ElfBoard技术|【RK3588】ELF 2开发板开机自启动详解

    在嵌入式系统开发中,合理管理开机自启动项目能够优化系统启动流程,确保关键服务和应用按时加载运行。本文将详细介绍在ELF2开发板Linux5.10.209系统下基于SystemVinit服务管理机制
    的头像 发表于 06-27 16:20 1796次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|【RK3588】<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>开机自启动详解

    ElfBoard技术|如何在【RK3588】ELF 2开发板用户空间更换开机Logo

    传统修改开发板开机Logo的方式需要重新编译内核,流程复杂且耗时。本文介绍了一种创新方案:通过预先在存储中划分专用的Logo分区,允许用户直接在文件系统中更新Logo图片文件,这极大地简化了定制流程
    的头像 发表于 10-29 11:12 980次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>【RK3588】<b class='flag-5'>ELF</b> <b class='flag-5'>2</b><b class='flag-5'>开发板</b>用户空间更换开机Logo