Подтвердить что ты не робот

Как я могу контролировать данные на последовательном порту в Linux?

Я отлаживаю связь с последовательным устройством, и мне нужно увидеть все данные, проходящие в обоих направлениях.

Кажется, что это должно быть легко в Linux, где последовательный порт представлен файлом. Есть ли способ, которым я могу сделать своего рода "двунаправленный тройник", где я говорю своей программе о подключении к каналу, который копирует данные в файл, а также перемещает его в/из реального устройства последовательного порта?

Я думаю, что я даже знаю, как писать такого зверя, но кажется нетривиальным, особенно для того, чтобы получить все ioctls, прошедшие через конфигурацию портов и т.д.

Кто-нибудь уже построил такую ​​вещь? Кажется слишком полезным (для людей, отлаживающих драйверы последовательных устройств) уже не существовать.

4b9b3361

Ответ 1

strace очень полезен для этого. У вас есть визуализация всех ioctl, с соответствующей декодированной структурой. В вашем случае особенно полезны следующие варианты:

-e read = set

Выполните полное шестнадцатеричное и ASCII дамп всех данных, считанных с файловые дескрипторы, перечисленные в указанный набор. Например, чтобы увидеть все входная активность в файловых дескрипторах 3 и 5 используют -e read = 3,5. Обратите внимание, что это не зависит от обычной трассировки системного вызова read (2), который управляемый опцией -e след = читать.

-e write = set

Выполните полное шестнадцатеричное и ASCII дамп всех данных, записанных в файл дескрипторы, указанные в указанных задавать. Например, чтобы увидеть весь вывод активность файловых дескрипторов 3 и 5 используйте -e write = 3,5. Обратите внимание, что это независимо от нормального отслеживания системный вызов write (2), который управляемый опцией -e трассировать = запись.

Ответ 2

Я нашел pyserial, чтобы быть вполне пригодным для использования, поэтому, если вы используете python, он не должен слишком сложно написать такую ​​вещь.

Ответ 3

Простым методом было бы написать открытое приложение ведущей стороной pty и тестируемой tty. Тогда вы передайте приложение tty на подчиненную сторону pty как "устройство tty".

Вам нужно будет отслеживать атрибуты pty с помощью tcgetattr() на pty мастер и вызов tcsetattr() в реальном tty, если атрибуты изменены.

Остальное будет простым select() как для двух копий, так и для копирования в журнал.

Ответ 4

Я смотрю много серийных снифферов. Все они основаны на идее создания виртуального последовательного порта и sniff-данных из этого порта. Однако любые изменения бод/четности/потока будут прерывать соединение.

Итак, я написал свой собственный сниффер:). Большинство последовательных портов теперь представляют собой только USB- > последовательные преобразователи. Мой сниффер собирает данные с USB через debugfs, анализирует его и выводит на консоль. Также записываются любые изменения скорости, управление потоком, события линии, последовательные ошибки. Проект на ранней стадии разработки и на данный момент поддерживается только FTDI.

http://code.google.com/p/uscmon/