マンガでよめる痔のこと・薬のこと

VirtualBoxを使用したシリアル通信の設定方法について教えて下さい。

以下、やりたいこと及び、環境(設定)です。

【やりたいこと】
ホストOSとゲストOS間でシリアル通信を使用して、
データの送受信等をやりたいです。

【環境・設定】
・VirtualBox ver.4.0.10

・ホストOS WindowsXP SP2
  通信ポート設定
    COM1 有効
    IRQ   04
    I/O範囲 03F8~03FF
  使用ソフト  ハイパーターミナル、SeriaDdebug

・ゲストOS Fedora8
  通信ポート設定(VirtualBoxの設定→シリアル)
    ポート1
    シリアルを有効化にチェック
    ポート番号 COM1(※COM2もやってみましたが、結果は変わりませんでした。)
    IRQ     4
    I/Oポート 0x3F8
    ポートモード ホストデバイス
    ポート/ファイルパス COM1
    ※ポート2は設定していません。
  使用ソフト minicom、自作アプリ

※上記条件でVirtualBoxのfedoraを立ち上げて、ホスト側でシリアル用ターミナルを
起動すると、ポートが開けません等のエラーログ(ポップアップ)が出ます。

設定方法、そもそものできる出来ない等のアドバイス、回答をお願い致します。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

シリアルポートでは、LANで言うところの127.0.0.1みたいなことはできないので、物理的にポートが2個と、クロスケーブルが必要です。

ただこれだとめんどくさすぎるため、一度バーチャルポートを試してみる価値はありそうですね。これはシリアルポートのエミュレータです。これなら物理的なポートもクロスケーブルもいりません。

http://robot-jp.com/database/index.php?%E3%83%84 …

これで適当なポート番号に「Pair」でバーチャルポートを作って、一方のポート番号をホストOSに、もう一方をゲストOSに登録します。

この回答への補足

回答ありがとうございます。

エミュレータ等を使用しないと仮想化できないということでしょうか。。
実際に存在するCOM1だけで、ホスト、ゲストでの名前を変えれば通信できるものと思い込んでいました。

教えて頂いたソフトを使用してみました、
COM3とCOM4をエミュレータ上で定義して、ホストOS(windows)でCOM1だったシリアルポートの設定をCOM3に、
グストOS(fedora8)の設定をCOM4(ポート番号、ポート/ファイルパス共に)に設定して通信をしてみました。

この前のように通信ポートが開けないというようなことはなくなりました。
ホストOS側から、ハイパーターミナルと通信アプリ両方でポート(COM3)への通信ができました。
が・・・。
ゲスト側でホストからの通信データを取り込めていないようです。。
通信レートを19200bpsに合わせて、ゲスト側の/dev/ttyS3をtail -fで開きながら、
ホスト側からデータ("test"等の簡単な文字列)を送信してますが、どうも受け取れていないようです。
ゲスト側からの送信もしかりで、/dev/ttyS3にechoで文字列を送信するもホスト側で受信しません。。

補足日時:2011/07/11 22:22
    • good
    • 0

ざっと眺めただけだけど、これ詳しくてよさそう!



VirtualBoxでシリアルポート(COMポート)を使う « 碧落にて気まぐれに一言
http://sgry.jp/blog/tag/programming/
    • good
    • 0
この回答へのお礼

ありがとうございます。

自分もこのサイトにたどりついて試しましたが、無理でした。。

お礼日時:2011/07/11 22:23

全く意味不明です。



おす、おす、

めす、めす

つないでどうすんですか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLinuxのgccのインクルードパス?

Linuxのgccで、インクルードファイルやライブラリのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。

gccとccの違いも知りたいです。

例)
#include "example.h"

このままだと、example.hが無いと表示されます。

Aベストアンサー

標準ライブラリのパスは、gccのインストール時に指定して、Cプリプロセッサの中に組み込まれます。

#include "example.h"
は、まずカレントディレクトリを探し、次に gccコマンドラインの -I オプションで指定したディレクトリを探し、最後に標準ライブラリが探されます。

#include <example.h>
は、カレントディレクトリを探さない点が異なります。

ccも基本的には同じですが、Unixの種類によって機能が異なる可能性があります。Linuxの場合はcc=gccです。

Q「該当」と「当該」の違い

辞書には、「該当」・・・その条件にあてはまること。「当該」・・・その事に関係がある。
・・・とあります。
“あてはまる”と“関係がある”、微妙に違うようで似ているようで、お恥かしいのですが私にははっきり区別ができないのです。
該当とすべきところを当該としたら、意味はまったく違ってくるでしょうか?
わかりやすく両者の違いや使い方を解説していただけませんか?宜しくお願いします。

Aベストアンサー

よく似た意味の言葉(名詞)ですが、

○該当…「する」をつけて「当てはまる」という意味の動詞として用いることができる

○当該…主に他の名詞の前につけて「今議論の対象になっている、まさにそのもの」という意味で内容を限定する形容詞的な形で用いる

といった違いがあります。逆の用法はありません。

・この条件に当該する人は申し出てください。

・○○事件につき、該当被告人を有罪に処す。

いずれもおかしな使い方で、反対でないとアウトです。

ご参考になれば幸いです。

QwiresharkでパケットモニタするとRetransmissionが多発しているという意味は?

現在、自分で作成したパケット送信クライアントプログラムをテストしており、3秒に1回のタイミングでインターネット上にあるサーバのグローバルipアドレスに対し、TCPパケットを発信させて受信するというテストを行っています。
しかし、3秒に一回データを送っているはずなのに、その間隔10秒とか20秒とか間隔が開いてしまう時があります。

wiresharkというパケットモニタソフトで送信側、受信側共にパケットモニタを行ってみたところ、”Retransmission”が多発しているということがわかりました。(tcp.analysis.retransmissionというフィルタ設定で検索)この現象はある時とない時があります。テストして10日ぐらい経つのですが、このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

わかる方いらっしゃいましたらご教授よろしくお願いいたします。

Aベストアンサー

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを閲覧し、トラフィック過多が起き、回線が異常に混雑する」と言う事が起きていると考えられます。

解消するには以下の方法があります。
・「休み時間も、終業時間後も、プライベートでネットを使うな!」と言う「通達」を全社に出す
・社内LANを、トラフィック過多によるコリジョンが起きないよう高速で帯域のあるネットワークカード、LANハブ、ルーターに変える
・受信側と送信側を、社内LANから(電気的、アドレス的に)独立した別のLANにする

要は「混んでる時間帯なので仕方が無い」って事です。

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを...続きを読む

QGCCでライブラリが足りない

はじめまして。

LindowsOS4.0を使っています。
コンパイルができずに困っています。

GCCとMAKEをインストールしました(Lindowsはどちらも入っていないのです。Debian/Woodyベースと言われています)。

gcc 2.95.4
make 3.79.1

which gcc
とすると、/usr/bin/gcc
と表示されます。

で、./configure
すると、

.....
checking whether the C compiler works ... no

と表示されコンパイルエラーになります。

configure.log
を見ると、

-------------------
checking for gcc
configure:916: checking whether the C compiler (gcc ) works
configure:932: gcc -o conftest conftest.c 1>&5
/usr/bin/ld: cannot open crt1.o: No such file or directory
collect2: ld returned 1 exit status
configure: failed program was:

#line 927 "configure"
#include "confdefs.h"

main(){return(0);}
---------------------

とか

---------------------
checking for gcc
configure:905: checking whether the C compiler (gcc ) works
configure:921: gcc -o conftest conftest.c 1>&5
/usr/bin/ld: cannot open crt1.o: No such file or directory
collect2: ld returned 1 exit status
configure: failed program was:

#line 916 "configure"
#include "confdefs.h"

main(){return(0);}
----------------------

とかなっています。

confdefs.hというのは何かのライブラリなのでしょうか?これが無いとconfigureできないのでしょうか??

よろしくお願いいたします。

はじめまして。

LindowsOS4.0を使っています。
コンパイルができずに困っています。

GCCとMAKEをインストールしました(Lindowsはどちらも入っていないのです。Debian/Woodyベースと言われています)。

gcc 2.95.4
make 3.79.1

which gcc
とすると、/usr/bin/gcc
と表示されます。

で、./configure
すると、

.....
checking whether the C compiler works ... no

と表示されコンパイルエラーになります。

configure.log
を見ると、

-------------------
...続きを読む

Aベストアンサー

Lindowsは未経験なのでアドバイスですが、


>で、./configure
>すると、
>.....
>checking whether the C compiler works ... no
>と表示されコンパイルエラーになります。

./configure はコンパイルをしているのではありません。
また、この一行だけ書かれても、エラーかどうか回答者にはわかりません。


>/usr/bin/ld: cannot open crt1.o: No such file or directory

crt1.oが見つからない様ですが、
redhatの場合crt1.oは、/usr/lib/配下にあります。
redhatの場合crt1.oが含まれるパッケージ名は「glibc-devel-X.X.X」
に含まれています。

Qprintf による16進表示について

C言語初心者です。

今作っているプログラムで、データを16進形式で表示しようとしています。
大体このような感じです。

/*入力時*/
char buf[5]={0x4e,0x94,0xa0,0x2b,0x78}

/*出力時*/
for (i = 0; i < 5; i++) {
printf("0x%02x\n",buf[i])
}

実際には入力後にある処理によってbufは更新されるのですが、printfの出力結果として、

0xffffff4e
0x94
0xffffffa0
0x2b
0x78

というように、'ffffff'が付加したものがいくつか出力されてしまいます。
これはどういった意味を持つのでしょうか?

なんか初心者ならではの漠然とした質問ですいません。。。

Aベストアンサー

出力は、
0x4e
0xffffff94
0xffffffa0
0x2b
0x78
ではありませんか?
char が符号付(-128~127)のため、0x80~0xffは負の数とみなされます。printfの引数になる時に 符号付charは符号付intに変換されますが、このCコンパイラの場合は、int が4バイトcharが1バイトのため、上位3バイトに負の数を示すffffffが入ります。
char x=255;
printf("%d\n",x);
だと255でなく、-1が表示されます。

対応としては、
unsingned char buf[5]={0x4e,0x94,0xa0,0x2b,0x78}
;
とするか、
printf("0x%02x\n",buf[i]&0xff);
にするかどちらかですね。

Qbashなどのシェル変数の値に改行を含める事は可能でしょうか?

タイトルの通りですが、通常のシェル変数の値として

 [prompt]$ aaa="bbb<改行>ccc"

のようなセットを行い、

 [prompt]$ echo $aaa
 bbb
 ccc
 [prompt]$

のような結果を得たいのですが、可能でしょうか。

Aベストアンサー

可能です.
というか,やってみたら出来ることがわかると思います.こんなところで聞くより早い.
なお,sh/bash系では改行文字は特にエスケープせずそのまま入れられます.

aaa='bbb
ccc'

Q構造体の初期化方法について

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初期化したいと思っています。

よろしくお願い致します。

#define MAX 2000
//グローバル
struct tag{
int Npkt;
int gettime;
int rPkt;
int lossPkt;
}rdata[MAX];

main(){
  //for文で複数回実行処理
  for(i=0;i<=5;i++){
  //ここで構造体の初期化を記述する
//例として、5回プログラムを実行する
  }
}

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初...続きを読む

Aベストアンサー

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
memset( &rdata[i], 0, sizeof(struct tag) ); です。
※rdata[i]の1データだけ初期化します。

余談:
・『ZeroMemory』関数は Win32 API と分類されていますが、実体は『memset』関数に
 『#define』されているだけです。でも、戻り値を『VOID』型にキャストされているので
 『memset』関数のリターン値を取得できません。→第一引数のアドレスが『memset』関数
 ではリターンします。
・以上。おわり。

参考URL:http://taka.no32.tk/tips/Win32/ZeroMemory.html

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
m...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

QCからシェルを起動し返り値をハンドリングする方法

こんにちは
類似の質問がありましたが、本質的には異なっているため
投稿させていただきます。

Cのプログラムから、system関数等をつかってshellスクリプトを起動し
そのスクリプトの返り値をハンドリングする良い方法がわかりません。

自分で思いついた方法が↓です。

実行したいスクリプトが「hoge.sh」の場合
/***********************************/
/* 適当なファイルにリダイレクト */
system("hoge.sh;$?>>temp.txt;");

/* 適当なファイルOpen */
fp = open(temp.txt,"r");

/* スクリプトが終わるまでfgetsをLoop */
fgets(piyo,2,fp);
/***********************************/
というように、不恰好なコーディングにしかなりません。

他にもっと良い方法があればご教授願います。
宜しく御願いします。

Aベストアンサー

やりたくないけど自力で fork&exec (&wait) かなぁ?
ライセンスに問題なければ glibc からコピーしてもいいけど.

QCOMポート通信をモニターしたい

現在、PCと組み込み系の端末との間でRS-232C通信をさせています。このRS-232C通信のTXとRXのデータのタイミングなどをモニターできるソフトはありませんでしょうか?

現在RS-232C通信をさせているのですが、組み込み系の端末側にはTCP-RS232C通信変換のモジュールを取り付けていて、PC側もTCP-RS232C変換させるソフトを使用しています。


TCP-RS232C通信変換のモジュールはWIZNET社製のWIZ110SRというのを使用しています。

PC側ではTCP-RS232C通信変換ソフトでWIZNET社製のWIZ VSPというソフトを使用して、TCPで受けたデータをRS-232Cに変換して受信プログラムソフトに転送しています。


このPC側の受信ソフトとTCPへ変換する間のCOMポートの通信をモニターできるようなソフトというものはありませんでしょうか?

どうぞ、ご教授頂きますようお願い致します。

Aベストアンサー

PC自体のCOMポート(USB-Serial変換でも)なら、ソフトでどうにかできる場合もあるでしょうが……

ご使用の機器の場合、PCからはネットワーク端末に見える…のではないでしょうか?
ドライバでCOMポートとして見えるのですか?
# 後者ならソフトで何とかできる…かも知れません。

こちらの組み込み系開発ではラインアイ社の機器を使用しています。
http://www.lineeye.co.jp/html/product_le2500.html
http://www.lineeye.co.jp/html/product_le3500.html
などですね。
http://www.lineeye.co.jp/html/product_LE-200PS.html
http://www.lineeye.co.jp/html/product_LE-150PS.html
でも用途によっては十分かも知れません。
# 組み込み開発に使うのであれば1台あった方が何かと便利です。
# それなりに高機能なので…値段も結構しますけどね。


人気Q&Aランキング