LINUX.ORG.RU

Как сконфигурировать псевдотерминал (posix_openpt()) что бы через него мог работать как через обычный последовательный порт?

 ,


0

2

Хочу открыть псевдотерминал и сконфигурировать его как последовательный порт (termios.h) что бы ПО написанное для работы с обыкновенным com-портом могло сработать через него. Например если хочу написать эмулятор удаленного устройства для этого ПО. Все что я сделал проверял через minocom, безуспешно. Вот вкратце что я делал:

fdm = posix_openpt(O_RDWR | O_NOCTTY);
configTerm(fdm);
grantpt(fdm);
unlockpt(fdm);

int configTerm(int fd)
{
	struct termios attrs;
	
	tcgetattr(fd, &attrs);
	cfsetospeed(&attrs, B115200);
	cfsetispeed(&attrs, B0);
	attrs.c_cflag |= (CLOCAL | CREAD);
	attrs.c_cflag &= ~( CSIZE | PARENB | CSTOPB );
	attrs.c_cflag |= CS8;
	attrs.c_lflag &= ~( ICANON | ISIG | ECHO | ECHOE );
	attrs.c_iflag &= ~( INPCK | IGNPAR | PARMRK | ISTRIP );
	attrs.c_oflag &= ~OPOST;
	tcsetattr(fd, TCSANOW, &attrs) ) {
	return 0;
}
Дальше просто читаю из порта. Если при вызове minicom явно указать что используется псевдотерминал то всё работает. Но мне нужно без такого указания, так как целевое ПО не имеет такой опции.

★★

Последнее исправление: normann (всего исправлений: 1)

Посмотрите исходники minicom. Ничего там такого особенного для псевдотерминалов не делается.

Sorcerer ★★★★★
()

если ты через pty хочешь выставлять опции реального tty - забудь. ЕМНИП ядро не обрабатывает termios для pty и даже перехватить установку этих опций не получится. По крайней мере когда я пытался такое сделать - не взлетело.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от anonymous

А поделись ссылкой, я видимо неосилятор и когда пытался это сделать у меня не получилось. Но с условием - тольько стандартные ядерные интерфейсы, без хаков.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от utf8nowhere

Отлаживаем сами себя, чтобы получить то, что ядро вообще никак не обрабатывает. Ок чо. Да, мне этот вариант в голову не пришёл.

Dark_SavanT ★★★★★
()

Проблема решена, все подключается и работает, termios.h оказался ненужен (никак не влияет на результат). Просто в minicom была проблема.

normann ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.