web-dev-qa-db-ja.com

Ubuntuのアップデート後にシリアルポートが正しく機能しませんか?

シリアルポートに奇妙な問題があります。 ubuntuの実現と再起動後にsthが変更されたようです。

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?)
>>> 

デバイスから ''(空の記号)の結果が必要であることはわかっていますが、その代わりに例外が発生します。

「デバイスは読み取る準備ができていると報告しましたが、データが返されませんでした(デバイスが切断されているか、ポートで複数のアクセスがありますか?)」

この質問は私の問題の紹介です: https://stackoverflow.com/questions/32844942/serialport-doenst-work-correctly-after-ubuntu-update?noredirect=1#comment53527004_32844942

私を助けてください。

2
pb.

私は同じ問題を経験します。シリアルポートハードウェアに限定されていないようです。 socatを使用して2つの疑似端末を作成できます。

$ 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]

たとえば、cuを使用して、両方のデバイスに接続できます。

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

そして

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

両方向にデータを送信します。問題ありません。

しかし、Python 2.7で接続すると、前述のエラーメッセージが表示されて失敗します

$ 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?)

このコードは、昨日Ubuntu14.04のアップデートをインストールする前に機能しました。

何か案は?

1
Philipp R.

これはカーネルのバグである可能性があります。ここを参照してください: https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/150124

回避策は、カーネル3.13.0-63-genericを使用することです。

Shiftキーを押しながら起動すると、カーネルを1回限りの起動に変更できます。変更を永続的にするには、/etc/default/grubを編集する必要があります: https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-もう?rq = 1

1
jtpereyda

私はこれを支持しませんが、この変更を行った後、これらのエラーが表示されなくなりました。

--- 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)
1
chinacat