Я использую Orange Pi PC PLUS2 (память emmc, arv7l 32bit) для управления другим устройством через последовательное соединение (RS485) с последовательным преобразователем, который использует микросхемы FTDI (sparkfun bob 09822).
Я использую контейнеры докеров и компоновку докеров, чтобы встроить свое приложение и легко развернуть/поделиться им. Он не делает ничего слишком сложного, просто непрерывно (1 раз в полсекунды) считывает значения с датчиков через rs485, сохраняет их в локальной базе данных и отправляет данные на мой сервер.
uname -a дает мне:
Linux host-test 4.14.15-sunxi #28 SMP Mon Jan 29 07:24:48 CET 2018 armv7l GNU/Linux
Если я запускаю свой SW вне докера, все работает нормально, у меня не возникает сбоев по прошествии нескольких недель. Проблема в том, что если я использую докер, через пару дней я получаю следующую ошибку (dmesg):
[135431.500807] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[137213.011801] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[138650.664850] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[140559.020691] ohci-platform 1c1b400.usb: frame counter not updating; disabled
[140559.020972] ohci-platform 1c1b400.usb: HC died; cleaning up
[140559.025797] usb 6-1: USB disconnect, device number 2
[140560.099001] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[140560.099018] ftdi_sio ttyUSB0: urb failed to clear flow control
[140560.099652] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[140560.099738] ftdi_sio 6-1:1.0: device disconnected
После этого я больше не могу использовать последовательный преобразователь. Он не появляется на ttyUSB0, и мне не удается снова заставить его работать. Я попытался выполнить rmmod как для "ftdi_sio", так и для "usbserial" и снова modprobe для них, но ничего не изменилось. Единственный способ исправить это - перезагрузить плату.
Я много экспериментирую с такими модулями, как pylibftdi, драйверы vpc против d2xx и т. д., но безуспешно.
Я также использую то же ПО на Nanopi NEO PLUS2 (emmc, armv8 64bit, Linux host-test 4.14.0 #82 SMP, пятница, 8 декабря, 14:33:14 CST 2017 aarch64 aarch64 aarch64 GNU/Linux ) и у меня идентичные проблемы... все в порядке без докера, аналогичная проблема возникает при использовании докера (немного другой dmesg).
В моем docker-compose нет ничего особенного, он просто сопоставляет последовательный порт с «devices: - /dev/ttyUSB0:/dev/ttyUSB0»
Вопрос
Кто-нибудь знает, как решить эту большую проблему, которая полностью тормозит мою работу?
Дополнительно (быстро и грязно)
По крайней мере, просто как временный патч, кто-нибудь знает, как восстановить последовательную линию без перезагрузки, и хочет дать мне подсказку в комментариях?
Изменить
Для полноты картины вот ошибка (dmesg) в Nanopi:
[159155.585672] ohci-platform 1c1d400.usb: frame counter not updating; disabled
[159155.593147] ohci-platform 1c1d400.usb: HC died; cleaning up
[159155.600959] usb 8-1: USB disconnect, device number 2
[159156.608522] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity
[159156.616559] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate
[159156.623461] ftdi_sio ttyUSB0: urb failed to clear flow control
[159156.629832] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[159156.629907] ftdi_sio 8-1:1.0: device disconnected
ps -ef | grep tty
будет отображаться для всех портов tty), если нужный порт занят, попробуйте убить соответствующий процесс или используйте другой порт: например,devices: - /dev/ttyUSB1:/dev/ttyUSB0
. После изменений не пропустите перестроить контейнеры, например.docker-compose up -d --build
- person Taron Saribekyan   schedule 15.02.2018