Joa*_*cho 7 linux udev devices
我有一个 3G/GPS 设备,它创建了 5 个 tty 节点,尽管它只是一个物理 USB 连接。基本上,一个多端口 USB 串行适配器。
我正在尝试创建一些udev规则以确保这些节点始终具有相同的名称,或者至少具有指向它们的符号链接。
我确实可以在/sys/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/. 里面是1-2.2:1.0/to 1-2.2:1.4/,对于它创建的 5 个节点。
我也可以在/sys/bus/usb/devices/1-2.2.
设备的 udev 信息如下:
udevadm info -a -p /sys/bus/usb/devices/1-2.2/1-2.2\:1.0
looking at device '/bus/usb/devices/1-2.2/1-2.2:1.0':
KERNEL=="1-2.2:1.0"
SUBSYSTEM=="usb"
DRIVER=="option"
ATTR{bInterfaceNumber}=="00"
ATTR{bAlternateSetting}==" 0"
ATTR{bNumEndpoints}=="03"
ATTR{bInterfaceClass}=="ff"
ATTR{bInterfaceSubClass}=="01"
ATTR{bInterfaceProtocol}=="01"
ATTR{modalias}=="usb:v12D1p1506d0000dc00dsc00dp00icFFisc01ip01"
ATTR{supports_autosuspend}=="0"
Run Code Online (Sandbox Code Playgroud)
从这一点开始,所有节点都具有相同的信息。节点之间唯一不同的是 bInterfaceNumber 属性和设备路径。所以,我想通过开发路径写一个规则。
现在,出于某种原因,所有这些节点都匹配以下规则。
ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0" SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
所以基本上,huawey0指向枚举的最后一个节点。设备创建了从ttyUSB2到6的节点,这个链接指向USB6。
所以,我尝试通过内核节点:
ACTION=="add", KERNEL=="1-2.2:1.0" SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
现在,/dev 上什么也没有出现。
在此之后,我尝试使用 bInterfaceNumber 将它们分开。我使用了以下规则
ACTION=="add", DEV="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]" ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
然而,什么也没有发生。我什至尝试了规则的精简版本。
ACTION=="add", ATTR{bInterfaceNumber}=="00" SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
仍然没有任何反应。为什么不匹配?
小智 5
你的规则都有语法错误:
=用于赋值==是用于比较,因此您实际上并没有查看DEV等于什么,而是在赋值。,在所有语句之间,之前没有SYMLINK+=。ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.0", SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
ACTION=="add", KERNEL=="1-2.2:1.0", SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
ACTION=="add", DEV=="/devices/platform/pxa27x-ohci/usb1/1-2/1-2.2/1-2.2:1.[0-4]", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
ACTION=="add", ATTR{bInterfaceNumber}=="00", SYMLINK+="huawey0"
Run Code Online (Sandbox Code Playgroud)
所有这些规则现在应该做你想做的(我个人会使用第一个)。
小智 5
虽然这个帖子是三年前问的,这可能没有解决答案,但我还是想在这里分享我的成功经验,以供日后参考。
根据 Jens Reimann 的使用 udev 识别 GSM 调制解调器设备,“设备属性“bInterfaceNumber”不在 tty 设备上,而是在父层次结构中的 USB 设备上”,因此我为我的 FTDI usb-to-4 创建了两个规则-端口串行适配器:
SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="ttyUSB_FTDI_4_PORT_%E{.LOCAL_ifNum}"
Run Code Online (Sandbox Code Playgroud)
这将属性“bInterfaceNumber”存储到环境变量“.LOCAL_ifNum”中(前缀点是临时或隐藏变量的表示法)。在第二条规则中,使用“%E”语法拉取相同的变量。较新的 udev 版本也支持“$env”而不是“%E”。
(由延斯·赖曼提供)
ttyUSB_FTDI_4_PORT_符号链接名称在哪里。这两个规则将创建符号链接为ttyUSB_FTDI_4_PORT_00, ttyUSB_FTDI_4_PORT_01, ttyUSB_FTDI_4_PORT_02, ttyUSB_FTDI_4_PORT_03。您可以添加ATTRS{serial}属性以进一步限制枚举。
延斯·莱曼也acknowlegfed的贡献科坦帕特尔“s&&L的问题,调制解调器不工作udev规则文件,具有公认的答案被derobert。
| 归档时间: |
|
| 查看次数: |
11297 次 |
| 最近记录: |