在鲁班猫5BTB开发板上折腾虚拟摄像头,第一步得把"地基"打牢。RK3588这颗芯片性能强劲,但ARM64架构的环境配置和x86平台有些不同,我刚开始就踩过坑。先确认下你的系统环境是不是Ubuntu 22.04,内核版本是不是6.1.84:
bash复制uname -r
如果是其他版本,建议先升级内核,不然编译时会有各种幺蛾子。我遇到过最头疼的问题就是内核版本不匹配导致模块加载失败,折腾了半天才发现是这个问题。
获取内核源码有两个推荐途径:
我建议用第一种方式,更新更稳定。下载后解压到~/kernel-develop-6.1目录,这个路径后面编译时会用到。这里有个小技巧:可以用df -h看看你的用户目录剩余空间,编译内核至少需要15GB空间,不够的话建议挂载个外接存储。
v4l2loopback这个项目挺活跃的,GitHub上更新频繁。我实测发现最新main分支在RK3588上兼容性最好:
bash复制cd ~
wget https://github.com/umlaeute/v4l2loopback/archive/refs/heads/main.zip
unzip main.zip
mv v4l2loopback-main ~/v4l2loopback-main
安装依赖时要注意,Ubuntu 22.04的默认源里有些包版本可能不够新。我建议先更新源:
bash复制sudo apt update
sudo apt install build-essential git libelf-dev bc
这里有个坑:如果之前装过其他版本的gcc,最好先卸载干净。我有次编译失败就是因为gcc版本冲突,后来用sudo apt purge gcc*彻底清理后才解决。
这一步是成败关键!RK3588的ARM64架构需要特别注意编译参数:
bash复制cd ~/kernel-develop-6.1
make ARCH=arm64 olddefconfig
make ARCH=arm64 prepare
make ARCH=arm64 modules_prepare
这个过程可能会比较久(在我的鲁班猫5BTB上大概20分钟),建议接好电源。如果遇到"missing separator"之类的错误,大概率是tab键被替换成了空格,可以用cat -e -t -v Makefile检查下。
有个实用技巧:可以用nproc查看CPU核心数,然后在make命令后加上-j$(nproc)参数加速编译。不过内存小于4GB的话建议别加这个参数,容易OOM。
终于到核心步骤了!先确保你在v4l2loopback源码目录:
bash复制cd ~/v4l2loopback-main
make clean
清理旧编译文件很重要,我有次没clean直接编译,结果加载的模块版本不对。正式编译命令:
bash复制make -C ~/kernel-develop-6.1 M=$(pwd) modules
看到终端输出"Building modules"就说明开始了。成功的话会在当前目录生成v4l2loopback.ko文件。如果报错"Module.symvers missing",需要先在内核目录执行make modules。
编译成功只是第一步,安装也有讲究:
bash复制sudo mkdir -p /lib/modules/$(uname -r)/extra
sudo cp v4l2loopback.ko /lib/modules/$(uname -r)/extra/
sudo depmod -a
这里有个隐藏坑点:/lib/modules下的目录名必须和uname -r完全一致,差个后缀都不行。加载模块时我推荐这样:
bash复制sudo modprobe v4l2loopback video_nr=11,12 devices=2 exclusive_caps=1
参数说明:
验证是否成功:
bash复制ls /dev/video11 /dev/video12
v4l2-ctl --list-devices
如果看到设备文件,恭喜你!但有时候会遇到权限问题,可以这样解决:
bash复制sudo chmod 666 /dev/video11 /dev/video12
调试时我常用这两个命令:
bash复制dmesg | grep v4l2loopback # 查看内核日志
v4l2-ctl --device=/dev/video11 --all # 查看设备详情
问题1:模块加载失败,dmesg显示"Unknown symbol"
make modules_install,然后重启问题2:视频流延迟高
max_buffers=2减少缓冲问题3:FFmpeg推流失败
CONFIG_VIDEO_DEV=y我遇到最诡异的问题是视频画面倒置,后来发现是模块参数需要加card_label="Virtual Camera"。建议把常用参数写成配置文件:
bash复制echo "options v4l2loopback devices=2 video_nr=11,12 exclusive_caps=1 card_label="Virtual Camera"" | sudo tee /etc/modprobe.d/v4l2loopback.conf
虚拟摄像头装好后,在鲁班猫5BTB上可以玩出很多花样:
AI视觉测试:把USB摄像头的视频流转发到虚拟设备,方便OpenCV处理
bash复制ffmpeg -i /dev/video0 -f v4l2 /dev/video11
直播推流:配合OBS实现画中画效果
bash复制v4l2loopback-ctl set-caps "video/x-raw,width=1280,height=720" /dev/video11
多路视频合成:用gstreamer把多个源合并到一个虚拟设备
最后提醒下,重启后模块需要重新加载。如果想开机自动加载,可以:
bash复制echo "v4l2loopback" | sudo tee -a /etc/modules
sudo update-initramfs -u