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.