试图解决 this problem (ttyUSB0 正常工作而不是在大约 1 小时后停止工作)我在考虑断开并重新连接 USB 设备是否是一个很好的解决方案。

那么,是否可以切断 USB 设备的电源并以编程方式(bash)重新启动它?

# lsusb -t
1-1:1.0: No such file or directory
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=musb-hdrc/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=vend., Driver=, 12M
    |__ Port 1: Dev 2, If 1, Class=vend., Driver=cp210x, 12M

在 am335x 上,内核 3.2.0,ubuntu 核心 armhf。
[    1.784332] usb 1-1: cp210x converter now attached to ttyUSB0

目前我需要一个完整的电源循环才能恢复 ttyUSB0

最佳答案

这是解决方案:

  • 查找您的 USB 设备的身份。
    # tree /sys/bus/usb/drivers/cp210x/
    /sys/bus/usb/drivers/cp210x/
    |-- 1-1:1.1 -> ../../../../devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1:1.1
    |-- bind
    |-- module -> ../../../../module/cp210x
    |-- remove_id
    |-- uevent
     -- unbind
    

  • 所以 1-1:1.1 是我的 ttyUSB0 的标识符(也可以通过 dmesg 发现)。
  • 然后,断开设备连接(以 root 用户身份):
    # echo -n "1-1:1.1" > /sys/bus/usb/drivers/cp210x/unbind
    
  • 重新连接
    # echo -n "1-1:1.1" > /sys/bus/usb/drivers/cp210x/bind
    

  • 此时我有相同的设备,但名称不同,现在是 ttyUSB1 而不是 ttyUSB0。
    - 为了避免这种情况,我通过使用以下行创建一个名为 /etc/udev/rules.d/ 的新文件在 99-usb-serial.rules 中添加了一个新规则:
    SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea70", ATTRS{serial}=="002DCFAF", SYMLINK+="sameName", MODE:="0666"
    

    其中 idVendoridProduct 和 serial 必须是您设备的值。此规则将创建一个名为 sameName 的新设备,该设备链接到通常从操作系统生成的 ttyUSB* 设备。

    关于linux - 在 Linux 中以编程方式断开和重新连接 ttyUSB0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21580750/

    10-13 04:55