使用minicom实现linux虚拟机与pc的串口通信

时间:2021-10-04 16:11:45

软件环境:
主机:win10
虚拟机:vmware12,
虚拟机系统:ubuntu16.04
ubuntu下的串口调试软件:minicon 2.7
windows下的串口调试软件:随便找一个就是

硬件环境:
笔记本电脑+两个互联的USB转串口接口。

由于我只想测试虚拟机与主机的串口通信,因此没有什么下位机串口设备,就两个USB转串口插头对接在一起,GND与GND相接,TX与RX相接,这样才能实现收发,插在笔记本的两个usb口上就可以了。
两个电路板是一样的,这样的USB转串口接口淘宝上很多,用杜邦线一连即可。

当然,如果没有该硬件接口,你也可以使用虚拟串口软件模拟出两个互联的串口。
使用minicom实现linux虚拟机与pc的串口通信

步骤1:添加并设置虚拟机的串口。

在vmware菜单中:虚拟机->设置->添加中。虚拟机的硬件是可以自定义的,一般使用虚拟机安装linux时,是没有安装串口设备的,请在虚拟机开机前添加串口设备,否则会显示无法添加。
使用minicom实现linux虚拟机与pc的串口通信
可以在win10的设备管理器中看到新添加的串口设备及串口号,如果看不到或有叹号,请检查硬件并正确配置RS232驱动。此时设备管理器中会多出2个串口号,我显示的是COM6和COM8,也可以直接在虚拟机下图的配置界面中查看增加了哪两个串口,那么,在虚拟机的串口配置中选一个填进去。
使用minicom实现linux虚拟机与pc的串口通信
确定后你的虚拟机就有串口了,ubuntu下不用配置RS232的驱动,一般自带。

步骤2、下载并配置minicom。

采用在线安装,网有时候不好联,我第一次没联上,换个时段就连上了,看运气

sudo apt-get install minicom

以管理员权限打开minicom,否则将没有权限读取外设数据

sudo minicom

下面配置minicom。默认配置是肯定连不上串口的,所以刚装好软件不要急于收发数据,先配置一下。

先按ctrl+A ,底部出现一个亮条,再按z,即可进入一个更详细的菜单
使用minicom实现linux虚拟机与pc的串口通信

接下来按o,配置minicom
使用minicom实现linux虚拟机与pc的串口通信

选择串口设置Serial port setup
使用minicom实现linux虚拟机与pc的串口通信

下图是没修改前得默认配置,需要修改3处:
(1)、改设备名。可以看到,默认串口设备名叫tty8,这不是我们对应的USB转串口设备,我的设备是ttyUSB0,需要根据你的实际情况进行修改,如何找出这个设备名在本文后面会介绍。
(2)改波特率,这个根据自己情况选,收发两端保持一致就好。
(3)Hardware Flow Control 改为no,具体原因可去查一查“串口硬件控制流”
使用minicom实现linux虚拟机与pc的串口通信
配置完后的数据是这样
使用minicom实现linux虚拟机与pc的串口通信
选择Save setup as dfl保存为默认配置。到此就可以使用minicom了

步骤3:测试Win10向虚拟机发送数据

在主机上运行串口调试助手,虚拟机上我用的是COM6,那主机就打开COM8,设置好与虚拟机中一样的波特率,写几个字符发送试试看。
使用minicom实现linux虚拟机与pc的串口通信
我设置了定时自动发送,ubuntu会不停地收到测试字符
使用minicom实现linux虚拟机与pc的串口通信
可以看到minicom收到test字符了

步骤4: 虚拟机向win10发送串口数据

选中minicon所在的命令行窗口,就在上图中的界面下,随便敲击键盘,貌似什么反应也没有,但数据真的发送出去了,你可以切换去看看win10下的串口助手收到了啥
使用minicom实现linux虚拟机与pc的串口通信
数据接收区显示,字符确实收到了。测试到此完成。

可能遇到的问题:

不知道串口名称叫什么,打开minicon提示没有那个文件或目录
使用minicom实现linux虚拟机与pc的串口通信
问题原因:串口文件找错了。linux的设备均以文件形式存在,向对应的文件里写数据就是向对应的设备发送数据,那么,你的串口设备插上后,会在/dev目录下创建一个对应的设备文件,这个文件可能叫ttyUSB0,或者ttyUSB1等,名称不一定,USB转串口设备一般名称为ttyUSB*,纯粹的串口名称一般为ttyS*,我们笔记本电脑大部分用的是USB转串口设备,所以要根据你的实际情况确定你的USB转串口设备究竟叫什么名字。比如,设备名称明明叫ttyUSB0,却非要配置端口为ttyUSB1,自然是找不到那个文件的。

那么,如何找到正确的USB转串口设备名称呢?
网上方法1:使用lsusb命令

lsusb

使用minicom实现linux虚拟机与pc的串口通信
可以看到Device 009 就是我想找的USB转串口设备,可是这并能不看出具体的文件名,我的目的是要找一个能在minicom配置中具体写的文件名。

网上方法2:使用dmesg
使用minicom实现linux虚拟机与pc的串口通信

dmesg

这个方法可行,请看第3行,清楚地写着该串口设备被绑定到了ttyUSB0文件上,所以,/dev/ttyUSB0就是minicom该配置的串口路径
为了避免看花眼,可以用下面的方法筛选出有用信息

demsg | grep ttyU     //从上述打印信息中筛选出包含ttyU字符的条目,显示的结果会简洁许多

自己的方法:
自创的方法也不算太笨,在ubuntu下,你用文件管理器打开/dev目录,你会看到许多文件,滚动条拉到文件名以tty开头的文件区域附近,插上你的设备,可以在窗口中眼睁睁的看着新冒出来一个文件,这个文件名就是你要找到串口设备名,够直观吧。