Compartilhando uma porta serial entre dois processos

6

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

Divida 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 só é necessário receber dados.

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

    
por peterrus 17.10.2012 / 14:01

1 resposta

4

No linux, sempre foi um problema obter acesso exclusivo às portas seriais, já que a única maneira de restringir interferências indesejadas é 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 'possuir' ele: o processo que vai abrir a porta serial (paralela) primeiro arquivo de bloqueio no diretório /tmp (outros padrões podem usar o diretório /var/lock ), por exemplo /tmp/LCK..ttyS0 no caso do dispositivo ttyS0 e grava seu PID nesse arquivo. Em seguida, ele o lê de volta e, se o PID corresponder, o processo assumirá a propriedade da porta. 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

    
por 18.10.2012 / 18:53

Tags