udev 规则

4. 选择特定设备(vid=10c4, pid=ea60)的完整规则文件

bash
# /etc/udev/rules.d/99-silabs-usb.rules
# Silicon Labs CP2102 USB-UART桥接器

# 规则1:设置设备文件权限(/dev/ttyUSB*)
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", \
    MODE="0666", \
    GROUP="dialout", \
    SYMLINK+="ttySilabs"

# 规则2:设置sysfs电源管理文件权限
SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", \
    GROUP="plugdev", MODE="0666", \
    RUN+="/bin/chmod 0666 /sys$env{DEVPATH}/../power/control", \
    RUN+="/bin/chmod 0666 /sys$env{DEVPATH}/../power/autosuspend_delay_ms", \
    RUN+="/bin/chmod 0666 /sys$env{DEVPATH}/../power/autosuspend", \
    RUN+="/bin/chmod 0666 /sys$env{DEVPATH}/../power/level"

# 规则3:为设备创建有意义的别名(可选)
SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", \
    SYMLINK+="usb-silabs-cp2102"

# 规则4:设置自动挂起参数(可选)
SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", \
    ATTR{power/control}="auto", \
    ATTR{power/autosuspend_delay_ms}="2000"

5. 使用和测试

创建和激活规则:

bash
# 1. 创建规则文件
sudo nano /etc/udev/rules.d/99-silabs-usb.rules

# 2. 添加用户到所需组
sudo usermod -a -G plugdev,dialout $USER

# 3. 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

# 4. 重新插拔设备或重启

验证规则是否生效:

bash
# 查看设备权限
ls -l /dev/ttyUSB*  # 或 /dev/ttySilabs

# 查看sysfs权限
ls -l /sys/bus/usb/devices/*/power/

# 查看udev调试信息
sudo udevadm test $(udevadm info -q path -n /dev/ttyUSB0) 2>&1 | grep -i silabs

# 监控udev事件
sudo udevadm monitor --property
# 1. 创建专用组(最安全)
sudo groupadd usb-control
sudo usermod -a -G usb-control $USER

# 2. udev规则使用专用组
# /etc/udev/rules.d/99-usb-power.rules
ACTION=="add", \
SUBSYSTEM=="usb", \
ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", \
GROUP="usb-control", \
MODE="0660", \
RUN+="/bin/chmod 0660 /sys$env{DEVPATH}/power/control"

# 3. 验证配置
# 重新登录后检查
groups $USER
# 应该包含 usb-control

# 插拔设备后检查权限
ls -l /sys/bus/usb/devices/*/power/control
# -rw-rw---- 1 root usb-control 4096 Jan 10 10:30 control
posted @ 2026-01-26 17:30  FBshark  阅读(26)  评论(0)    收藏  举报