Обмін послідовним портом між двома процесами


7

Оскільки неможливо безпосередньо поділити послідовний порт між двома процесами за допомогою Linux, я шукаю інший спосіб досягти цього, я чув про socat, але не зміг знайти конкретного прикладу, як реалізувати наступне:

Розділіть один фізичний послідовний порт (/ dev / ttyUSB0) на два віртуальні порти, один для читання і один для запису, оскільки одному процесу потрібно лише відправляти дані, а одному потрібно лише отримувати дані.

Я не можу змінити додаток, що надсилає, на жаль.


3
"Як не можна безпосередньо поділити послідовний порт між двома процесами" Чому ви так вважаєте?
Серж

численні джерела (наприклад, stackoverflow.com/questions/8745948/… ) підтверджують це, але якщо це все-таки можливо, скажіть будь ласка;)
peterrus

Ви помітили редакцію питання, на яке ви посилалися: "Редагувати. Це потрібно працювати в Windows, але Mac і Linux також було б непогано". Відповідь була надана у випадку Windows. У Linux завжди була проблема отримати ексклюзивний доступ до послідовних портів, оскільки єдиний спосіб обмежити небажані втручання - це права доступу користувача / групи, тому з часом було створено конвенцію про те, як сказати іншим процесам не відкривати послідовний порт пристрій, коли якийсь процес бажає "володіти ним". Таким чином, ви можете відкрити його з різних процесів за умови, що uids або gids мають доступ до нього
Серж,

Ви просто заявляєте, що я можу фактично отримати доступ до серійного пристрою з декількох процесів? Якщо так, будь ласка, опублікуйте це як відповідь, я, можливо, перевіряю його десь після вихідних, але тоді ви отримаєте свою оцінку;)
peterrus

Так. Це правильно
Серж

Відповіді:


4

В Linux завжди була проблема отримати ексклюзивний доступ до послідовних портів, оскільки єдиний спосіб обмежити небажані перешкоди - це права доступу користувача / групи.

З часом було встановлено конвенцію, як сказати іншим процесам не відкривати пристрій послідовного порту, коли якийсь процес готовий "володіти ним": процес, який збирається відкрити послідовний (паралельний) порт, спочатку перевірить наявність файлу блокування у /tmpкаталог (інші стандарти можуть використовувати /var/lockкаталог), наприклад /tmp/LCK..ttyS0 в разі влаштування ttyS0 і записує PIDв цей файл. Потім він читає його назад, і якщо PIDзбіги, то процес взяв право власності на порт. Після того як порт більше не потрібен, файл блокування видаляється процесом.

Таким чином, ви можете відкрити його з різних процесів за умови, що ці процеси uids або gids мають доступ на пристрої


У мене / dev / ttyACM0 (послідовний порт USB), доступ до якого здійснюється одним процесом, який записує дані в порт. У мене є ще один процес (screen / dev / ttyACM0 9600), який повинен читати дані з порту. Однак на екрані нічого не друкується.
петеррус

Повинен мати щось спільне з екраном, який бажає використовувати контроль потоку, я думаю, при використанні простого кота / dev / ttyACM0 все працює добре!
петеррус

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.