web-dev-qa-db-ja.com

2つのプロセス間でシリアルポートを共有する

Linuxを使用して2つのプロセス間でシリアルポートを直接共有することはできないので、これを達成する別の方法を探しています。socatについて聞いたことがありますが、以下を実現する具体的な例を見つけることができませんでした。

1つのプロセスはデータを送信するだけでよく、もう1つはデータを受信するだけでよいため、1つの物理シリアルポート(/ dev/ttyUSB0)を読み取り用と書き込み用の2つの仮想ポートに分割します。

残念ながら送信アプリの変更はできません。

7
peterrus

Linuxでは、不要な干渉を制限する唯一の方法はユーザー/グループのアクセス権であるため、シリアルポートへの排他的アクセスを取得することは常に問題でした。

時間の経過とともに、あるプロセスがシリアルポートデバイスを「所有」する意思がある場合にシリアルポートデバイスを開かないように他のプロセスに指示する方法が確立されました。シリアル(パラレル)ポートを開くプロセスは、最初にロックファイルをチェックします。 /tmpディレクトリ(他の規格では/var/lockディレクトリを使用する場合があります)。たとえば、ttyS0デバイスの場合は/tmp/LCK..ttyS0で、そのPIDをそのファイルに書き込みます。次に、それを読み戻し、PIDが一致する場合、プロセスはポートの所有権を取得しました。ポートが不要になると、ロックファイルはプロセスによって削除されます。

したがって、これらのプロセスuidまたはgidsがデバイスでrwアクセスを持っている場合は、さまざまなプロセスから開くことができます

4
Serge