在Linux中以编程方式断开并重新连接ttyUSB0

试图解决这个问题 (ttyUSB0工作正常,大约1小时后停止工作)我想如果断开连接和重新连接的USB设备可能是一个很好的解决办法。

所以,可能会减lessUSB设备的电源并以编程方式重新启动(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 /etc/udev/rules.d/的新文件:

 SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea70", ATTRS{serial}=="002DCFAF", SYMLINK+="sameName", MODE:="0666" 

其中idProductidProduct和serial必须是您的设备的值。 此规则将创建一个名为sameName的新设备,链接到通常由OS生成的ttyUSB*设备。