2012-04-30 32 views
2

IO Kitレジストリに登録されていることを意味する他のアプリで使用できる仮想シリアルポートを作成するCocoaアプリケーションを作成する必要があります。アプリのMac - 仮想シリアルポート

要旨:

  • プロキシすべてが、受信した別のコンピュータに外にTCP接続を開始する仮想シリアルポート(/ dev内記載されているとIOKitのレジストリに登録されている)
  • を作成します。仮想シリアルポートは ネットワークに、その逆も同様です。

このアプリケーションは、コンピュータ上のシリアルポートと通信するサードパーティのアプリケーションで使用され、特定のシリアルデバイスをネットワーク上に配置することができます。ココアとネットワークの部分は問題ありません。私は、ネットワーク上で話すいくつかのアプリを書いています。私のハングアップはシリアルポートです。

私はsocat/netcat/minicomでテストを行って、ネットワーク上でpty/ttyトラフィックのプロキシが動作することを確認しましたが、使用しているttyは登録されていないため、 IO Kitレジストリに保存します。

私は通信のためにpty/ttyマスター/スレーブを使用できますが、私はこのスレーブttyをMacアプリケーションに表示する必要があります。非常に便利なことは、IO Kitレジストリにttyを登録する方法です。

本当にCocoaアプリケーションランタイムに登録されるカスタムIOKit kextドライバを作成する必要がありますか?もしそうなら、私は私の前に大きな学習曲線を持っています。どこから読んで始めたらいいですか?または、IOKitを使用して仮想シリアルポートを作成し、カーネル拡張をロードすることなくアプリケーション用の使用可能なシリアルポートとして登録できますか?

は、あなたが提供することができます任意の助けのために
ステートフルありがとう

答えて

4

まず第一に、あなたはthis app?からソリューションを借りることができれば、彼らは彼らの仮想を得ることができた場合には、Webサイトから明白ではありませんチェックしていますシリアルポートはシステムに完全に統合されています。

ユーザー空間から行う方法がある場合、私はそれを認識していません。ユーザ空間のIOKit APIは、通常、新しいデバイスドライバクラスにとどまらず、クラスインスタンスを作成することはできません。カーネルに登録されていないにもかかわらず、Cocoaライブラリを見つけられるように説得することができます。

カーネルに「ダミー」シリアルポートを作成してから、あなたのユーザースペースデーモンから/ devにその場所にあなたのttyを移動することができないのかどうかわかりません。多分それはオプションです。場合

あなたはカーネルでそれをすべて行う必要があります:

それはまで取得するにはある程度の時間が必要になりますけれども仮想ドライバ自体は、少なくとも、あまりに多くの仕事ではありませんカーネル開発者の速度。残念ながら、ドキュメントはシリアルポートドライバではかなり薄いです。キーは抽象クラスIOSerialDriverSyncをサブクラス化しています。私が見た唯一の説明はOle Henry HalvorsenのOSXとiOSカーネルプログラミングです。それはまた、読書&を書くための例の断片を持っています。(公開:私はこの本のテクニカルレビュー担当者の一人であり、推薦のインセンティブはありません。この場合は、文字通り私が知っている唯一のドキュメントです)完全なシリアルポートドライバApple's USBCDC driverで、AppleUSBCDCDMMは実際にシリアルポートノードを表すクラスです。

カーネルにいわゆる"kernel control"ソケットを開くのは比較的簡単です。個々のAPIはdocumented hereです。ユーザー空間からは通常のBSDソケットsend/recv APIを使用します。 (これは前述の書籍にも記載されています)あなたのデーモンはそれに接続することができ、ソケットと仮想シリアルポートデバイスの間でデータをプッシュするだけです。切断イベントなどを正しく処理する必要があります。

これは、経験豊富なCプログラマ(C++をいくつか使用している)のための最初のカーネルプロジェクトとして実現できると思います。

私はそれが助けてくれることを願っています!

+2

偉大なもの、pmjordan。私が参照したアプリケーションを見てみました。実際には、socatのコンパイルされた実行可能ファイルをアプリケーションにバンドルして、実行のために引数を渡しています。また、使用するシリアルポートはIO Kitレジストリに登録されていません。あなたが言及した本のコピーを買いました。そこには豊富な情報があります。ポインタありがとう! – Stateful

+0

@Statefulあなたは幸いです。 – pmdj

+0

@Statefulこれで一生懸命やったのですか? – tcv