読者です 読者をやめる 読者になる 読者になる

VirtualBox内のLinuxとホストPC(Windows)間でシリアル通信を行う方法メモ

Linuxでシリアル通信を行うソフトウェア開発をするにあたり、開発マシンがWindowsノート一つであったため、シリアル通信ソフトのテストをどうするかというのが課題の一つだった。

ネット検索したところ、HostPCからVirtualBoxのOSに対してシリアル通信を行う環境を構築する手順をみつけたのでここにメモしておく。

まず、HOSTPCの物理シリアルポートから、折り返すための仮想シリアルポートを設定する。シリアルポートの折り返しをソフトウェア上で実現してしまうようだ。


Null-modem emulator | SourceForge.net


インストールをいてみようとしたところ、Windows8ではソフトウェア認証系の不具合があるようで、以下のメッセージとともにインストールでエラーが発生してしまう。

SetupCopyOEMInf(C:\Program Files(x86)\com0com\com0com.inf) ERROR: 0xE000022F

f:id:SusanoJapan:20140924023521p:plain

これはWindows8の起動オプションで認証チェックをしないように出来るみたいなので以下のサイトを参考に実行してみるけれどもうまくいくかな?


How to Disable Driver Signature Verification on 64-Bit Windows 8.1 (So That You Can Install Unsigned Drivers)

無事完走しました。(Blogカキカキしながら・・・)


com0comのデフォルトで私の環境ではCOM7/COM3がつながっている設定が有効になっているようなので、それぞれのポートに接続した2つのTeraTermで通信テストをしてみたところ、無事、一方のTeraTermで入力した文字が、相手のTeraTermに表示されることを確認できました。


続いてVirtualBoxのシリアルに一方のポートをつなげる方法を記したいと思います。

まずはVirtualBoxのシリアルポート設定を以下のようにしてみた。
f:id:SusanoJapan:20140924032705p:plain

COM7は先ほどcom0comで作られた仮想Portで、同じく仮想のPort3と接続されている。COM7をLinux上のCOM1/IRQ4に設定という意味になる。
テストに使用したCOM7のTeraTermは起動終了してPort解放しておかないと、VirtualBoxのOSが起動でエラー発生するので注意です。


起動したLinuxではgettyを使用して、外部からログインできる設定をしてみました。

/etc/init/ttyS0.conf このファイルに

以下の内容を入力。

start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /sbin/getty -L 115200 ttyS0 vt102

そして、以下のコマンドを投入してgetty起動です。

sudo start ttyS0

HOSTPCのTeraTermで確認すると、ログインプロンプトが出てきます。
f:id:SusanoJapan:20140924035126p:plain

以上で接続の確認ができました。
なんかボーレイトが合ってないのにつながってる点が気がかりだけど、getty側で自動で合わせてくれてるのかしら。まぁあまり気にしない事にします。

めでたしめでたし。