繁体   English   中英

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

[英]Disconnect and reconnect ttyUSB0 programmatically in Linux

试图解决这个问题 (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 /etc/udev/rules.d/的新文件:

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

其中idVendoridProduct和串口必须是你的设备的价值。 此规则将创建一个名为sameName的新设备,该设备链接到通常从OS生成的ttyUSB*设备。

作为@Robert Harvey Said,

您首先需要找到我们的驱动程序,它将帮助您“拔掉并插上”USB。 键入: ls /sys/bus/usb/drivers应该打印这样的内容: btusb ftdi_sio hub usb usbfs usbhid usbserial_generic uvcvideo 这些都是每个USB设备的驱动程序。 现在,让我们说我的是ftdi_sio ,这是我用来编程我的arduino(atmega328p芯片)的设备。 我不确定你/其他usb设备如何在那里命名。 就像,我不知道这些是我的鼠标。 现在,您可以使用以下命令查看驱动程序命令: ls /sys/bus/usb/drivers/ftdi_sio/ ,它将打印如下内容: 1-4:1.0 bind module uevent unbind ,其中1-4:1.0是设备的特征代码,以及bindunbind命令,分别是'plug'和'unplug'命令。

现在,如果我想以编程方式拔出ftdi usb端口,我将输入: echo -n "1-4:1.0" > /sys/bus/usb/drivers/ftdi_sio/unbind ,并再次插入: echo -n "1-4:1.0" > /sys/bus/usb/drivers/ftdi_sio/bind

现在,我们可以将所有命令组合在一起,并带有';':

echo -n "1-4:1.0" > /sys/bus/usb/drivers/ftdi_sio/unbind ; echo -n "1-4:1.0" > /sys/bus/usb/drivers/ftdi_sio/bind

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM