それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

VboxでCOMポート(シリアルポート/シリアルコンソール)を使う

vbox の仮想マシンにシリアルポートを使わせる。

シリアル・ポートのログインができるように仮想マシンを構成する f:id:takuya_1st:20220105154252p:plain

virtualboxのシリアルデバイス

実現方法は、いくつかあるのですが、一番よく使われるのは「デバイスを渡す」だとおもう。

個数が増えてくると大変なので、仮想マシンの台数が多いときは、デバイス・ファイルを使うほうが望ましいとは思う。

ホスト・デバイスをブリッジ

一番簡単なのは、ホストのデバイス仮想マシンにわたすこと。

Windowsの場合は、仮想COMポートを作るソフトウェア(com0com)を使って、仮想シリアルポートペア( COM3 - COM4 ) を作る、片側を仮想マシンに渡す。

f:id:takuya_1st:20220105153506p:plain

疑似(仮想)シリアル・ポートのペアができると、Terartermなどでつなぐことができる。

f:id:takuya_1st:20220105155113p:plain

Terartermを2つ起動して、COM4/COM3で通信してキー入力がもう一方に送信されると確認できたら準備完了

仮想マシンにデバイスを渡す。

COM4/COM3でペアになっている。このペアの片方を仮想マシンに渡してあげる。

シリアル有効化(ホストデバイス&COM4)

f:id:takuya_1st:20220105153611p:plain

ちなみに、ここで仮想マシン側にCOM1を指定してるので、仮想マシン側ではttyS0 (=COM1)になる

仮想マシン側でgetty起動

仮想マシン側でgetty を起動してログインできるようにする。仮想マシンにはUbuntuを利用した。 COM4は仮想マシンUbuntu)側で、ttyS0になる。

 sudo systemctl start serial-getty@ttyS0

COM4/COM3ペアの他方のCOM3をTerartermで接続する。

f:id:takuya_1st:20220105153439p:plain

起動時のログとGrubをシリアルに流す。

仮想マシンで、GRUBを設定して、シリアルを有効にする。GRUBがシリアルを使うように仮想マシンを設定する。

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200"
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

grubを再構成

sudo update-grub

COM3につないで起動ログを確認

COM3に接続して、COM4経由で出てくる起動ログを確認する。

f:id:takuya_1st:20220105155709p:plain

WSL+screenの場合

WSLの場合、Windows側でCOM3ポートにアクセスするには。COM3=ttyS3 のように COMXX= ttySXXのマッピングになっている 

wsl sudo screen /dev/ttyS3 115200

参考資料