6

Linux のシリアル ポートから読み取る C コードの書き方を学ぼうとしています。ここで良いチュートリアルと思われるものを見つけました。

このコードをテストできるようにしたいので、シリアル ポート、または上記のコードの読み取り中にシリアル ポートに書き込む方法が必要だと思います。

virtualbox を使用して、Mac で仮想マシンとして Ubuntu 10.04 を実行しています。私のアイデアは、仮想シリアル接続をセットアップし、ホストからゲストに書き込むことでした。cat "Hello World" > /tmp/fake_serialうまくいけば、ホスト端末と同じくらい単純なもので、それが上記のリンクのプログラムによって読み取られるようになります。

これは可能ですか?仮想ボックスを使用してシリアルポートを追加しようとしましたが、上記のコマンドを実行しようとすると、ソケットに書き込めないというエラーが表示されます。

私が考えた2番目のオプションはminicom、ゲストOS内のようなものを使用/dev/ttyS1して、コードが同時に読み取るメッセージを読み書きするために接続することでした。繰り返しますが、ボーレートやその他の設定が問題ないと仮定すると、これは可能でしょうか?

私はシリアルポートを使った経験があまりないので、これを行う最善の方法について何か提案をいただければ幸いです。前もって感謝します。

4

3 に答える 3

6

これを機能させるために、VirtualBox に別の Ubuntu VM を追加し、仮想シリアル ポートを介して 2 つを接続しました。多くの開発に使用するメインの元の VM を VM1 と呼びます。VM1 にメッセージを送信するためだけに使用される小さなハードドライブを備えた新しい VM は、VM2 と呼ばれます。これらは両方とも Ubuntu 10.04 VM です。

VirtualBox で、VM1 の [設定] に移動し、[ポート] に移動して、次のように設定を変更します。VM1 の設定

VM2 に移動し、設定、ポートを選択して、次のように変更します。

VM2 の設定

まず、VM1 を起動する必要があります。それが起動したら、VM2 を起動します。これで、VM1 でターミナルを開いて入力できますscreen /dev/ttyS0 38400(これが機能する前に実行する必要がある場合がありますsudo apt-get install screen)。次に、VM2 に移動し、ターミナルを開き、echo "Hello" > /dev/ttyS0.

HelloVM1 で開いているターミナルに表示されるはずです。実行が終了したら、画面を押しctrl-a kて強制終了します。そうしないと、シリアル ポートで他のことをしようとすると、ポートがビジーであるというエラー メッセージが表示される場合があります。

于 2013-04-09T13:14:17.243 に答える
1

実機から仮想マシンへのシリアル ポート テストを行う必要があったとき、「ループ バック」タイプのテストを行うことになりました。私は 2 つのUSB-Serial コンバーターと 1 つのRS232 FF アダプターを使用して、自分のマシンをそれ自体に接続しました。次に、VirtualBox の Settings->USB で、2 つの USB-Serial コンバーターの 1 つを VirtualBox が「所有」するようにルーティングできます。

コンバーターを接続すると、一方が Mac に登録され、もう一方が Ubuntu の「コンピューター」に登録され、2 台のマシン間で通常どおりシリアル通信を行うことができます。

pty (「疑似テレタイプ」デバイス) を使用して仮想シリアル ポートをエミュレートすることもできますが、新しいカーネルではその機能がロックダウンされていると思われるため、これについては肯定的ではありません。

于 2013-04-08T13:45:03.973 に答える
1

Ubuntu 14.04 ホストで VirtualBox 5.0.10 を使用して QNX ゲストを実行しているときに、同様の状況に遭遇しました。

私の解決策は、上記のケースに適用するのに十分一般的なようです。

Kells1986 が VM1 をセットアップしたのと同じ方法でゲスト VM を構成しました。

"Serial Ports"/"Port1" タブの下:

  • 「シリアルポートを有効にする」にチェックを入れる
  • 「ポート番号」を「COM1」に設定
  • 「IRQ」を「4」に設定します
  • 「I/Oポート」を「0x3F8」に設定
  • 「ポート モード」を「ホスト パイプ」に設定します。
  • 「既存のパイプ/ソケットに接続する」のチェックを外します
  • "Path/Address" をアクセス可能なファイル システム パスに設定します (例: "/home/safayet/vmSerialPipe")。

VirtualBoxのマニュアルによると:

仮想シリアル ポートをホスト上のソフトウェア パイプに接続するように VirtualBox に指示できます。... Mac、Linux、または Solaris ホストでは、ローカル ドメイン ソケットが使用されます。.. Linux では、ローカル ドメイン ソケットに接続したり、サーバー モードで作成したりできるさまざまなツールがあります。最も柔軟なツールはsocat、多くのディストリビューションの一部として提供されています。

Adomain socketは、パイプに似た UNIX システムの IPC メカニズムです。

socat次のコマンドを使用して、Ubuntu ホストの仮想シリアル ポートの「パイプ」側に接続しました。

socat - UNIX-CONNECT:/home/safayet/vmSerialPipe
于 2016-01-15T15:29:23.837 に答える