水中音響モデム用の Linux ドライバーを開発するのに苦労しています。私のプロジェクトの一般的なアイデアは、水中ネットワークに IPv6 を導入することです。期待される結果は、水中センサー ネットワークが一般的なインターネット デバイスからアクセスできるようになることです。目標を達成して実装するには、Linux カーネルが提供するルーティング プロトコルを使用できるように、モデムにドライバーを提供する必要があります。ただし、水中通信と一般的な RF 通信の違いにより、フラグメント化、ヘッダー圧縮、メッシュ ルーティングなど、パケットに対していくつかの処理を行う必要があります。ただし、これらのプロセスはすべて透過的である必要があり、モデムは他のネットワーク インターフェイスとして使用する必要があります。
モデムは、シリアル ポートを備えたコンピュータと通信できます。しかし、それを接続するには、pl2303 USB - シリアル コンバーターを使用する必要があります。また、モデムを駆動するデバイスはコンピュータだけでなく、Gumstix と呼ばれる組み込み Linux システムでもあります。私はそれを行うためにいくつかの異なる方法を試しましたが、最終的な目標を達成することはできません.
最初の解決策は、純粋なユーザー モード ドライバーを作成することです。扱いは簡単ですが、eth0 のようなインターフェイスを作成できず、ping も通せません。さらに悪いことに、すべての IPv6 標準を自分で実装する必要があり、実際には時間の無駄だと思います。
2 番目の解決策は、純粋なカーネル モード ドライバーを作成することです。利点は、既存のコードを利用して IPv6 および上位レベルのものを処理できることと、美しいインターフェイスを使用できることです。ただし、シリアル ポートをカーネル モードでファイルとして開くことはお勧めしません。私はそうしようとしましたが、常にガベージバイトを受け取ります。
後で私は3番目の解決策を試しました。シリアルポートから送受信するデーモンプログラムを作成し、ネットリンクソケットを使用してカーネル内のドライバーと通信します。そうしているドライバーがいるのだろうか。ただし、ユーザーが私のドライバーを使用したい場合は、デバイス用にコンパイルして手動で起動する必要があります。さらに、プロセス間通信は信頼できず、カーネルがパケットを受信したかどうかわかりません。