Я использую openwrt (встроенный linux, который работает на маршрутизаторах). Я использую преобразователь USB-to-serial, который отображается как /dev/ttyACM0
.последовательное устройство на Linux зависает после нескольких минут передачи данных
[ 2430.460000] usb 1-1: new full-speed USB device number 4 using ehci-platform
[ 2430.630000] cdc_acm 1-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 2430.630000] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
Я написал небольшой код для OpenWRT который открывает данный последовательный порт, /dev/ttyACMO
, ждет на select()
системного вызова для событий чтения/записи на последовательный порт fd
.
Всякий раз, когда происходит событие чтения, сообщение сбрасывается до stdout
.
Я не включил аппаратное управление потоком на последовательном порту.
Я сделал подключенное периферийное устройство для отправки определенного предопределенного сообщения каждые 2 секунды на последовательной ссылке.
Теперь, когда я запускаю свой код в openwrt, чтобы напечатать серийное сообщение, я могу видеть сообщение, исходящее из периферии.
Проблема заключается в том, что после нескольких минут последовательная связь падает. На последовательном интерфейсе больше нет событий чтения.
Сброс периферийных устройств также не помогает. Единственный способ заставить его работать снова - полностью удалить периферийное устройство с USB и начать снова.
Такая же настройка отлично работает на моем ящике Ubuntu. Я использую тот же интерфейс драйвера, то есть usb-acm (в /dev/ttyACM0
). Здесь система работает навсегда без последовательного зависания.
Любая идея или предложение о том, что происходит?