[BitVisor-devel:27] BitVisorのシリアル入出力について

Shougo Matsushita shougo @ softlab.cs.tsukuba.ac.jp
2011年 10月 21日 (金) 17:57:26 JST


BitVisorメーリングリストの皆さん

筑波大学 ソフトウェア研究室の松下正吾です。

現在、BitVisorでシリアル通信を使って別のPCと入出力を行おうとしています。
シリアル出力はうまくいくのですが、シリアル入力が妙な挙動を示すので報告致します。

BitVisor側はdbgsh経由で実行したBitVisor付属のcore/builtin/bin_serialtest,
PC側はgtktermで通信をさせて実験をしました。
BitVisorのシリアル入出力オプション(TTY_SERIAL)はコンパイル時に有効化しています。

BitVisorからのシリアル出力はちゃんと送れているのですが、BitVisorのシリアル入力がおかしいです。
どういう挙動をするかというと、bin_serialtest内のc = msgsendint (in, 0))で10秒〜20秒ほど固まることがあります。
inはシリアル入力ポートです。
固まるまではリアルタイムにシリアル入力から受けとった文字がdbgshに出力されます。
固まる頻度は、連続して5, 6文字くらい入力すると固まります。
固まった後しばらく待ってから、またgtktermで出力すると
「固まっている間に表示できていなかった文字+gtktermで入力した文字」が画面に表示されます。
データが取り零されていることはないようです。

以上の現象があるため、現在双方向通信にシリアルポートが使えません。
BitVisorのシリアル通信について、何か情報があれば、教えてもらいたいと思っています。

bin_serialtestのソースコードは以下のようになります。

---------------------------------------------------------------------------------

#include <lib_lineinput.h>
#include <lib_printf.h>
#include <lib_syscalls.h>

int
_start (int a1, int a2)
{
	int in, out, i, c;

	in = msgopen ("serialin");
	out = msgopen ("serialout");
	if (in < 0 || out < 0) {
		printf ("serial open failed\n");
		return -1;
	}
	printf ("serial out test\n");
	for (i = 0; i < 20; i++)
		msgsendint (out, "@ABCDEFG1234567890\r\n"[i]);
	printf ("serial in test\n");
	while ((c = msgsendint (in, 0)) != '.')
		printf ("%c", c);
	return 0;
}

-- 
Shougo Matsushita <shougo @ softlab.cs.tsukuba.ac.jp>



BitVisor-devel メーリングリストの案内