martedì 27 novembre 2012

MTK e udev

Su alcuni pc il mio vecchio datalogger  MTK iBlue restituisce questo errore:
~$ mtkbabel -t -p /dev/ttyUSB0 -f mytrack
ERROR: Opening serial device /dev/ttyUSB0: Permesso negato at /usr/bin/mtkbabel line 1748.
In pratica il datalogger MTK viene connesso su una porta USB (/dev/ttyUSB0) sulla quale, però, l'utente non ha i permessi necessari e, conseguentemente, il programma mtkbabel non riesce a scaricare i dati.
In prima battuta ho risolto così
sudo chmod 666 /dev/ttyUSB0
ma la soluzione è temporanea, perchè al successivo riavvio del computer il problema si ripresenta.
Occorre in qualche modo fornire a udev le informazioni necessarie per gestire il dispositivo. Cercando una soluzione ho trovato questo  link che mi ha portato ad una soluzione del problema.
Ecco la procedura che ho seguito passo a passo.
Inserire il cavo USB; datalogger in posizione LOG.
Aprire un terminale e digitare:
~$ dmesg | tail
[ 7566.896621] cp210x 6-2:1.0: device disconnected
[ 7678.240077] usb 6-2: new full-speed USB device number 6 using uhci_hcd
[ 7678.398104] usb 6-2: New USB device found, idVendor=10c4, idProduct=ea60
[ 7678.398112] usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7678.398117] usb 6-2: Product: CP2102 USB to UART Bridge Controller
[ 7678.398122] usb 6-2: Manufacturer: Silicon Labs
[ 7678.398126] usb 6-2: SerialNumber: 0001
[ 7678.403970] cp210x 6-2:1.0: cp210x converter detected
[ 7678.516154] usb 6-2: reset full-speed USB device number 6 using uhci_hcd
[ 7678.664078] usb 6-2: cp210x converter now attached to ttyUSB0
L'ultima riga riportata dice che il dispositivo è connesso alla porta ttyUSB0; con udevadm è possibile avere più notizie:

~$ udevadm info -a -n /dev/ttyUSB0 

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="cp210x"
    ATTRS{port_number}=="0"
[... e molto altro!]
I dati che servono possono essere trovati filtrando l'output di  udevadm riportato sopra:
~$ udevadm info -a -n /dev/ttyUSB0  | grep '{serial}' |head -n1
    ATTRS{serial}=="0001"
~$ udevadm info -a -n /dev/ttyUSB0  | grep '{idVendor}' |head -n1
    ATTRS{idVendor}=="10c4"
~$ udevadm info -a -n /dev/ttyUSB0  | grep '{idProduct}' |head -n1
    ATTRS{idProduct}=="ea60"
Si può ora creare il file denominato 72-mtkdatalogger.rules nella home; questo file conterrà gli elementi trovati sopra:
ATTRS{idVendor}=="10c4",ATTRS{idProduct}=="ea60",ATTRS{serial}=="0001",MODE="0440",GROUP="plugdev"
dove MODE="0440" significa permesso di lettura per il proprietario e per il gruppo (vedere, ad esempio, la spiegazione sul comando  chmod) e GROUP="plugdev" attribuisce il dispositivo ad un gruppo del quale il proprietario fa parte.
Copiare ora il file appena creato nella directory /etc/udev/rules.d:
~$ sudo cp 72-mtkdatalogger.rules /etc/udev/rules.d/72-mtkdatalogger.rules
scollegare il dispositivo e riavviare  udev:
~$ sudo udevadm control --reload-rules
Ricollegando il dispositivo MTK (in posizione LOG) alla porta USB, non si dovrebbe più ottenere il messaggio di errore visto all'inizio (almeno... questa è stata la mia esperienza!).


Nessun commento:

Posta un commento