Ответ 1
Имея ту же проблему, я бы попытался исправить драйвер ядра ftdi_sio
. Вам просто нужно раскомментировать небольшой фрагмент кода в ftdi_dtr_rts()
следующим образом:
static void ftdi_dtr_rts(struct usb_serial_port *port, int on) {
...
/* drop RTS and DTR */
if (on)
set_mctrl(port, TIOCM_DTR /*| TIOCM_RTS*/); // <<-- HERE
else
clear_mctrl(port, TIOCM_DTR /*| TIOCM_RTS*/); // <<-- and HERE
}
а линия подтверждения связи RTS больше не изменяется при вызове open()
.
Обратите внимание, что uart, возможно, больше не работает с аппаратным рукопожатием RTS/CTS, если загружен модифицированный драйвер ядра. Однако вы можете управлять состоянием линии квитирования RTS вручную, вызывая, например:
int opins = TIOCM_RTS;
ioctl(tty_fd, TIOCMBIC, &opins);
Я проверил это с помощью команды Ctrl+A+G
picocom 2.3a, запустив Kubuntu 16.04 64 бит и Ftdi FT2232H на основе usb uart адаптер.
Вы можете найти более подробную информацию по этому разделу здесь.