Con la risposta di sdive continuavo a ricevere "FATAL: il modulo usbserial è in uso".
Alla fine ho risolto il problema con alcune indicazioni dalla risposta di LiLo qui:
/ubuntu//a/661/379851
Ma invece di usare un po 'di codice C, ho scritto un equivalente di Python che trova anche il bus e il dispositivo in questione:
#!/usr/bin/env python
import os
import sys
from subprocess import Popen, PIPE
import fcntl
driver = sys.argv[-1]
print "resetting driver:", driver
USBDEVFS_RESET= 21780
try:
lsusb_out = Popen("lsusb | grep -i %s"%driver, shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().split()
bus = lsusb_out[1]
device = lsusb_out[3][:-1]
f = open("/dev/bus/usb/%s/%s"%(bus, device), 'w', os.O_WRONLY)
fcntl.ioctl(f, USBDEVFS_RESET, 0)
except Exception, msg:
print "failed to reset device:", msg
Basta salvarlo come reset_usb.py o qualcosa del genere e quindi eseguirlo in questo modo:
sudo python reset_usb.py driver_name
Da dove driver_name è l'output
lsmod | grep usbserial
Nel mio caso, era cp210x, quindi lo eseguo in questo modo:
sudo python reset_usb.py cp210x