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




ubuntu com port terminal (3)

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

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

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

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


Простым методом было бы написать приложение, открывающее основную сторону pty и tty под тестом. Затем вы передадите приложение tty в подчиненную сторону pty как «tty device».

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

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


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


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

-e read = set

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

-e write = set

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







serial-port