试图解决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
回来。
答案 0 :(得分:9)
这是解决方案:
找到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"
其中idVendor
,idProduct
和serial必须是您设备的值。此规则将创建一个名为sameName
的新设备,该设备链接到通常从操作系统生成的ttyUSB*
设备。
答案 1 :(得分:1)
罗伯特·哈维(Robert Harvey)说,
您首先需要找到我们的驱动程序,它将帮助您“拔出并插入” 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
是设备的特征代码,而bind
和unbind
命令是“插件” ”和“拔出”命令。
现在,如果我要以编程方式拔出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