rk3588 区分两个相同的usb相机

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

复制代码
root@rk3588:/# udevadm info --attribute-walk --name=/dev/video0

Udevadm 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 节点,应用层访问该节点即可获取数据。

相关推荐
大袁同学9 分钟前
【进程间通信】:洞穿边界修管道,映射内存渡进程
linux·c++·管道·进程间通信·ipc
Rabitebla1 小时前
【C++】string 类:原理、踩坑与对象语义
linux·c语言·数据结构·c++·算法·github·学习方法
feng_you_ying_li1 小时前
linux之shell的进阶补充和基础IO流的介绍
linux·运维·服务器
草莓熊Lotso3 小时前
Vibe Coding 时代:LangChain 与 LangGraph 全链路解析
linux·运维·服务器·数据库·人工智能·mysql·langchain
蜡台9 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
Ujimatsu10 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
千百元10 小时前
zookeeper启不来了
linux·zookeeper·debian
AnalogElectronic12 小时前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Edward1111111112 小时前
4月28日防火墙问题
linux·运维·服务器
子琦啊13 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法