Имея ту же проблему, я бы попробовал, исправив драйвер ядра 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, работающей с 64-битной версией Kubuntu 16.04 и адаптером usb uart на основе Ftdi FT2232H .
Вы можете найти более подробную информацию по этой теме здесь .