在ubuntu18.04/ubuntu16.04系统上,插入UVC设备,你会发现V4L2框架替它创建了两个video设备节点,分别是 /dev/video0, /dev/video1:

经过实际测试,可以通过/dev/video0获取图像,但是无法通过/dev/video1获取图像,具体的试验请看下面两篇博客:
下面来分析一下Linux代码,说明/dev/video1节点的来历
首先,根据上面两篇博客,我们知道/dev/video1是通过uvc_meta_register这个函数调用路径注册的:
但是在linux-4.9内核里,是没有uvc_meta_register这个函数的

但是在最新的内核上,uvc_register_terms函数中增加了对uvc_meta_register函数的调用:

那么是什么时候增加的呢?根据git blame uvc_driver.c得到的信息,发现了这行代码的添加记录

展开来看一下:
git show 088ead2552458

可以看到,这个改动是发生在2017年,但具体是哪个版本呢?
我们git describe 088ead2552458看一下
git describe 088ead2552458

git describe输出显示,这个修改发生在v4.15-rc6后的第397次提交,g为git的缩写,088ead255245为此commit id. 所以,我们看到

本文探讨了在Ubuntu系统中UVC设备为何会有/dev/video0和/dev/video1两个设备节点。通过分析Linux内核历史,发现在v4.15之后的内核版本中,UVC设备开始创建两个节点,而/video1用于meta数据传输。通过对驱动代码的分析,揭示了这两个设备节点在数据流中的不同角色,证实了这一现象是V4L2框架的特性。
最低0.47元/天 解锁文章
3194





