USB-HUB上制定生成的设备号(一种解决方法)


环境:

在USB-HUB上插上16个usb2serial,每次重启后,

每个usb2serial获得的ttyUSB*设备号都不一样,而且有时也会自动随机变化。


解决:

通过uevent机制来解决。在/sys上保留当前设备的信息。

uevent获取设备热插拔信息后,通过/sys下的具体设备信息生成设备号。

uevent通过读取/etc/udev/rules.d/50-usb-serial.rules文件。来处理对当前热插拔设备的操作。


文件50-usb-serial.rules内容如下:
test@TEST:/etc/udev/rules.d$ cat 50-usb-serial.rules
KERNEL=="ttyUSB*", ACTION=="add", RUN+="/usr/local/test/add_ttyUSB.sh %k %p"
KERNEL=="ttyUSB*", ACTION=="remove", RUN+="/usr/local/test/remove_ttyUSB.sh %k %p"
test@TEST:/etc/udev/rules.d$

%k:ttyUSB*
%p:/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2.1/2-1.2.1.2/2-1.2.1.2:1.0/ttyUSB*/tty/ttyUSB*
add_ttyUSB.sh:获取ttyUSB设备插入时的操作。
remove_ttyUSB.sh:移除ttyUSB设备时的操作。

参考:add_ttyUSB.sh内容:
#!/bin/bash
DEVICE_NAME=$1
NUM1=$(echo $2 | cut -d '/' -f 7)
NUM2=$(echo $2 | cut -d '/' -f 8)
NUM3=$(echo $2 | cut -d '/' -f 9)

HUB_INDEX=$(echo $NUM1 | cut -d '.' -f 2)
NUM_J=$(echo $NUM2 | cut -d '.' -f 3)
NUM_K=$(echo $NUM3 | cut -d '.' -f 4)

let "PORT=($NUM_J-1)*4+$NUM_K"

LINK_NAME=USBHUB${HUB_INDEX}-${PORT}
ln -sf /dev/$DEVICE_NAME /dev/$LINK_NAME


参考:remove_ttyUSB.sh内容:
#!/bin/bash

DEVICE_NAME=$1
NUM1=$(echo $2 | cut -d '/' -f 7)
NUM2=$(echo $2 | cut -d '/' -f 8)
NUM3=$(echo $2 | cut -d '/' -f 9)

HUB_INDEX=$(echo $NUM1 | cut -d '.' -f 2)
NUM_J=$(echo $NUM2 | cut -d '.' -f 3)
NUM_K=$(echo $NUM3 | cut -d '.' -f 4)

let "PORT=($NUM_J-1)*4+$NUM_K"

LINK_NAME=USBHUB${HUB_INDEX}-${PORT}
rm -f /dev/$LINK_NAME



参考链接:http://reactivated.net/writing_udev_rules.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值