Linux相关开发工作中,经常会用到串口,特别是嵌入式开发领域的,串口通信一般是必不可少的。同时,它也是双机调试(如KGDB)的主要通信渠道。
这里以VirtualBox虚拟机和Linux主机之间实现虚拟串口通信。
环境:
- HOST:Deepin 15.2 AMD_64
- Guest OS: Ubuntu 14.04.3 AMD_64
设置虚拟串口
VirtualBox的虚拟串口是以命名管道方式实现的,虚拟串口一般对应虚拟机里的/dev/ttyS0 ,另一端就对应主机上的一个命名管道。在主机上,只需要对该命名管道进行操作即可实现对虚拟机的串口通信了。
这里需要在主机上安装socat来进行连接命名管道,实现串口通信。
sudo apt-get install socat
如下图,在该虚拟机属性里设置串口
注:在启动虚拟机后,便会产生vmserial命名管道文件。
测试虚拟串口
在主机和虚拟机上都安装minicom,minicom是用来操作串口的工具。
sudo apt-get install minicom
配置minicom
若HOST上没有/etc/minicom/minirc.dfl文件,则运行下面指令生成该配置文件。若已存在,则保持内容与下面相同即可。
echo "pu port unix#/home/magc/workspace/vmserial" > /etc/minicom/minirc.dfl
这样,就将host上的minicom指向了虚拟串口的命名管道文件了。
测试一:从GusetOS到Host发送信息
在GuestOS端执行 :
cat /dev/ttyS0
这样可使主机端的串口处于输入状态。
在Host端执行 :
minicom
打开minicom界面后, 输入内容,同时,就可以看到在GuestOS里看到相应内容输出。
如下图示:
测试二:从Host到GuestOS发送信息
在GuestOS里运行 :
magc@magc-VirtualBox:~$ su
密码:
root@magc-VirtualBox:/home/magc# echo "from guest" > /dev/ttyS0
root@magc-VirtualBox:/home/magc# echo "haha from vm" > /dev/ttyS0
然后,在HOST端minicom里就可以看到相应的输出了,如下图示:
通过以上双向测试,可以看出虚拟串口可以投入使用了。