Questão Compartilhando uma porta serial entre dois processos


Como não é possível compartilhar diretamente uma porta serial entre dois processos usando o Linux, eu estou procurando outra maneira de conseguir isso, eu ouvi falar sobre socat mas não consegui encontrar um exemplo concreto de como realizar o seguinte:

Dividir uma porta serial física (/ dev / ttyUSB0) em duas portas virtuais, uma para leitura e outra para gravação, já que um processo só precisa enviar dados e um só precisa receber dados.

Eu não posso modificar o aplicativo de envio, infelizmente.


6


origem


"Como não é possível compartilhar diretamente uma porta serial entre dois processos" Por que você acha isso? - Serge
várias fontes (como stackoverflow.com/questions/8745948/…) confirme isso, mas se for possível de qualquer maneira, por favor me avise;) - peterrus
Você observou a edição da pergunta que você mencionou: "Editar - isso precisa funcionar no Windows, mas o Mac e o Linux também seriam bons". A resposta foi dada para o caso do Windows. No linux, sempre foi um problema obter acesso exclusivo às portas seriais, pois a única maneira de restringir interferências indesejadas é o acesso de usuário / grupo, então a convenção foi estabelecida com o tempo, como informar a outros processos para não abrir a porta serial. dispositivo quando algum processo está disposto a "possuí-lo". Assim, você pode abri-lo a partir de diferentes processos, desde que os processos uids ou gids tenham acesso rw nele - Serge
Então você está simplesmente afirmando que eu posso de fato acessar um dispositivo serial de múltiplos processos? Se assim for, por favor poste-o como resposta, eu testarei em algum lugar depois do fim de semana provavelmente, mas então você receberá sua nota;) - peterrus
Sim. Está correto - Serge


Respostas:


No linux, sempre foi um problema obter acesso exclusivo às portas seriais, pois a única maneira de restringir a interferência indesejada é o direito de acesso do usuário / grupo.

Com o tempo, a convenção foi estabelecida como dizer aos outros processos para não abrir o dispositivo de porta serial quando algum processo está disposto a 'possuí-lo': o processo que irá abrir a porta serial (paralela) primeiro a /tmp diretório (outros padrões podem usar /var/lock diretório), por exemplo, /tmp/LCK..ttyS0 no caso do dispositivo ttyS0 e grava sua PID para esse arquivo. Então ele lê de volta e se o PID corresponde então o processo tomou a posse do porto. Depois que a porta não é mais necessária, o arquivo de bloqueio é excluído pelo processo.

Assim, você pode abri-lo a partir de diferentes processos, desde que esses processos, uids ou gids tenham acesso rw no dispositivo


4



Eu tenho / dev / ttyACM0 (uma porta serial usb) acessada por um proces que grava dados na porta. Eu tenho outro processo (tela / dev / ttyACM0 9600) que deve ler os dados da porta. Nada está sendo impresso na tela no entanto. - peterrus
Deve ter tido algo a ver com tela querendo usar o controle de fluxo, suponho, ao usar um gato simples / dev / ttyACM0 tudo funciona bem! - peterrus
você viu isso? stackoverflow.com/a/17983721/309483 - Janus Troelsen