¿Serialport no funciona correctamente después de la actualización de Ubuntu?

¿Serialport no funciona correctamente después de la actualización de Ubuntu?

Tengo un problema extraño con mi puerto serie. Parece que algo ha cambiado después de las actualizaciones y el reinicio de Ubuntu.

przem@przem:~/Pulpit/bat/scripts$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
>>> 

Sé que debería tener el resultado ' ' (signo vacío) de mi dispositivo, pero en lugar de eso aparece una excepción:

'el dispositivo informa que está listo para leer pero no devuelve datos (¿dispositivo desconectado o acceso múltiple al puerto?)'

Esta pregunta es una introducción a mi problema:https://stackoverflow.com/questions/32844942/serialport-doenst-work-correctly-after-ubuntu-update?noredirect=1#comment53527004_32844942

Por favor, ayúdame.

Respuesta1

Experimento el mismo problema. No parece limitarse al hardware del puerto serie. Puedes crear dos pseudo terminales usando socat:

$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/17
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/18
2015/09/30 09:46:18 socat[6296] N starting data transfer loop with FDs [3,3] and [5,5]

Puede conectarse con ambos dispositivos, por ejemplo usando cu

cu -l /dev/pts/17 -s 115200

y

cu -l /dev/pts/18 -s 115200

y enviar datos en ambas direcciones, no hay problema.

Pero la conexión con Python 2.7 falla con el mensaje de error que mencionaste

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/pts/17", 230400, timeout=0.2)
>>> ser.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

Este código funcionó ayer antes de instalar las actualizaciones para Ubuntu 14.04.

¿Algunas ideas?

Respuesta2

No apoyo esto, pero dejé de ver estos errores después de realizar este cambio:

--- serialposix.py.stock    2015-10-03 06:53:45.241261071 -0700 
+++ serialposix.py  2015-10-03 06:55:07.481262475 -0700
@@ -457,7 +457,11 @@
             # Disconnected devices, at least on Linux, show the
             # behavior that they are always ready to read immediately
             # but reading returns nothing.
-                raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+                # retrying the read seems to get me past this error:
+                # [ERROR] Can't read from printer (disconnected?)     (SerialException): device reports readiness to read but returned no data (device disconnected?)
+
+                #raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+                pass
         read.extend(buf)
     return bytes(read)

Respuesta3

Esto puede ser un error del kernel. Mira aquí:https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1501240

La solución parece ser utilizar kernel 3.13.0-63-generic.

Puede cambiar el kernel para un arranque único manteniendo presionada la tecla Mayús mientras inicia. Para que el cambio sea persistente, debe editar /etc/default/grub:https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-anymore?rq=1

información relacionada