当前位置: 首页 > news >正文

rk3588 区分两个相同的usb相机

有时候会插入两个一模一样的usb相机,担心每次启动他们所对应的设备节点 /dev/video* 会变化,所以需要绑定usb口,区分两个相机。把两个相机都插入后,查看usb信息

root@rk3588:/# udevadm info --attribute-walk --name=/dev/video0Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.looking at device '/devices/platform/fc800000.usb/usb1/1-1/1-1:1.0/video4linux/video0':KERNEL=="video0"SUBSYSTEM=="video4linux"DRIVER==""ATTR{dev_debug}=="0"ATTR{index}=="0"ATTR{name}=="USB Camera: USB Camera"looking at parent device '/devices/platform/fc800000.usb/usb1/1-1/1-1:1.0':KERNELS=="1-1:1.0"SUBSYSTEMS=="usb"DRIVERS=="uvcvideo"ATTRS{bAlternateSetting}==" 0"ATTRS{authorized}=="1"ATTRS{iad_bFunctionClass}=="0e"ATTRS{iad_bInterfaceCount}=="02"ATTRS{bInterfaceSubClass}=="01"ATTRS{iad_bFunctionSubClass}=="03"ATTRS{bInterfaceNumber}=="00"ATTRS{iad_bFirstInterface}=="00"ATTRS{bInterfaceProtocol}=="00"ATTRS{iad_bFunctionProtocol}=="00"ATTRS{bInterfaceClass}=="0e"ATTRS{bNumEndpoints}=="01"ATTRS{supports_autosuspend}=="1"ATTRS{interface}=="USB Camera"looking at parent device '/devices/platform/fc800000.usb/usb1/1-1':KERNELS=="1-1"SUBSYSTEMS=="usb"DRIVERS=="usb"ATTRS{configuration}==""ATTRS{bMaxPacketSize0}=="64"ATTRS{bDeviceClass}=="ef"ATTRS{bcdDevice}=="1001"ATTRS{bNumInterfaces}==" 2"ATTRS{bConfigurationValue}=="1"ATTRS{manufacturer}=="VNV"ATTRS{bNumConfigurations}=="1"ATTRS{authorized}=="1"ATTRS{speed}=="480"ATTRS{idProduct}=="c001"ATTRS{urbnum}=="32"ATTRS{devnum}=="2"ATTRS{product}=="USB Camera"ATTRS{maxchild}=="0"ATTRS{bmAttributes}=="80"ATTRS{bDeviceSubClass}=="02"ATTRS{bMaxPower}=="500mA"ATTRS{rx_lanes}=="1"ATTRS{removable}=="unknown"ATTRS{idVendor}=="1bcf"ATTRS{version}==" 2.00"ATTRS{avoid_reset_quirk}=="0"ATTRS{bDeviceProtocol}=="01"ATTRS{tx_lanes}=="1"ATTRS{devspec}=="(null)"ATTRS{ltm_capable}=="no"ATTRS{devpath}=="1"ATTRS{busnum}=="1"ATTRS{quirks}=="0x0"looking at parent device '/devices/platform/fc800000.usb/usb1':KERNELS=="usb1"SUBSYSTEMS=="usb"DRIVERS=="usb"ATTRS{configuration}==""ATTRS{bMaxPacketSize0}=="64"ATTRS{bDeviceClass}=="09"ATTRS{bcdDevice}=="0510"ATTRS{bNumInterfaces}==" 1"ATTRS{bConfigurationValue}=="1"ATTRS{manufacturer}=="Linux 5.10.110 ehci_hcd"ATTRS{bNumConfigurations}=="1"ATTRS{authorized}=="1"ATTRS{speed}=="480"ATTRS{idProduct}=="0002"ATTRS{urbnum}=="23"ATTRS{devnum}=="1"ATTRS{product}=="EHCI Host Controller"ATTRS{maxchild}=="1"ATTRS{bmAttributes}=="e0"ATTRS{bDeviceSubClass}=="00"ATTRS{bMaxPower}=="0mA"ATTRS{rx_lanes}=="1"ATTRS{removable}=="unknown"ATTRS{idVendor}=="1d6b"ATTRS{interface_authorized_default}=="1"ATTRS{authorized_default}=="1"ATTRS{version}==" 2.00"ATTRS{avoid_reset_quirk}=="0"ATTRS{serial}=="fc800000.usb"ATTRS{bDeviceProtocol}=="00"ATTRS{tx_lanes}=="1"ATTRS{ltm_capable}=="no"ATTRS{devpath}=="0"ATTRS{busnum}=="1"ATTRS{quirks}=="0x0"looking at parent device '/devices/platform/fc800000.usb':KERNELS=="fc800000.usb"SUBSYSTEMS=="platform"DRIVERS=="ehci-platform"ATTRS{companion}==""ATTRS{driver_override}=="(null)"ATTRS{uframe_periodic_max}=="100"looking at parent device '/devices/platform':KERNELS=="platform"SUBSYSTEMS==""DRIVERS==""

通过 KERNELS=="1-1" (应该可以加更多信息来区分,没深入研究)可以区分usb相机对应的usb口,udev可以绑定usb相机到对应的usb

root@rk3588:/# cat /etc/udev/rules.d/50-video.rules 
KERNEL =="video*",ATTR{index}=="0",KERNELS=="1-1",MODE:="0777",SYMLINK+="my_video0"
KERNEL =="video*",ATTR{index}=="0",KERNELS=="2-1",MODE:="0777",SYMLINK+="my_video1"

这样不管usb 0口插入的是哪个usb相机,它都对应 /dev/my_video0 节点,应用层访问该节点即可获取数据。

http://www.lqws.cn/news/175591.html

相关文章:

  • 机器学习KNN算法全解析:从原理到实战
  • 边缘计算服务器
  • linux 故障处置通用流程-36计-28-37
  • npm error Cannot read properties of null (reading ‘matches‘)
  • Vue在线预览excel、word、ppt等格式数据。
  • 彻底解决 MFC 自绘控件闪烁
  • 学习设计模式《十二》——命令模式
  • 数论——同余问题全家桶3 __int128和同余方程组
  • 【Linux】(1)—进程概念-④fork、僵尸进程、孤儿进程
  • vue3 按钮级别权限控制
  • 数学复习笔记 28
  • camera功能真的那么难用吗
  • UniApp系列
  • 静态相机中的 CCD和CMOS的区别
  • [ElasticSearch] DSL查询
  • 软件功能测试目的是啥?如何通过测试用例确保产品达标?
  • java教程笔记(十一)-泛型
  • 软件功能测试报告都包含哪些内容?
  • .net webapi http参数自定义绑定模型
  • .net 使用MQTT订阅消息
  • 赋能大型语言模型与外部世界交互——函数调用的崛起
  • 元图CAD:一键解锁PDF转CAD,OCR技术赋能高效转换
  • c# List<string>.Add(s) 报错:UnsupportedOperationException
  • .Net Framework 4/C# 关键字(非常用,持续更新...)
  • 【HarmonyOS 5】教育开发实践详解以及详细代码案例
  • Java -jar命令运行外部依赖JAR包的深度场景分析与实践指南
  • 浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
  • 基于大模型的 UI 自动化系统
  • 分布式协同自动化办公系统-工作流引擎-流程设计
  • 在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7