linux下对2个连通的串口读写遇到的问题
2015-05-14 11:51
417 查看
想要分析下zmodem协议,搜索发现linux下的工具lrzsz是一个包含x,y,z modem传输的工具,下载其源码,下载。它可以借助各种串行的接口进行数据传输,比如串口,socket也可以,这点描述好像不准确,不过我发现在CRT中通过ssh连接上linux后,可以使用sz rz来在windows和linux间传输文件,速度可以到达M级别,我开始误以为只能通过串口传输,串口显然不能达到这样的传输速率,查看源码我发现确实是可以通过socket传输的。经过修改将源码里面默认采用标准输入标准输出来收发数据改为通过指定的串口,从而不需要借助CRT工具,网络上所有的文章都是说通过CRT在window和linux间传输文件,而我的想法是在2台linux机器上,通过串口进行Zmodem协议的通信,最好是流式,而不是一个个文件。
首先我通过vspd这个工具在windows上虚拟出2个相连的串口,也就是一个串口pair
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/13/8fdd5cc56533360221b23ad215e100aa.png)
然后在vmware上连接这2个串口,此时对于VMware来说,这2个在windows上的串口就是2个物理串口,添加串口设备时选择Use physical serial port。添加完后,启动虚拟系统,连接上这2个串口设备。然后查看着2个串口在linux中是怎么样映射的,它实际是哪个设备。通过:
[root@localhost srv]# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:1183731 rx:14614
1: uart:16550A port:000002F8 irq:3 tx:9721 rx:92472
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
[root@localhost srv]#
可以看到只有0和1是启用了的,所以就是ttyS0,ttyS1对应2个串口,接下来验证2个串口是否是互连的,在一个终端输入:
cat < /dev/ttyS0
另一终端输入:
echo “test” > /dev/ttyS1
如果接收到了那么2个串口就是连通的。
接下来就开始写测试程序对它们一个读一个写了,结果我犯了一个相当低级的错误,特记录。我还是按照以前读文件的方式,open ---> select ---> FD_ISSET ? ----> (read/write)。结果就是写能成功,收那端死都收不到,可以我明明cat echo测试都成功了啊!!最后猛然想起串口能通信一个最最基本的要求就是双方的设置参数要一样,比如收发波特率,数据位停止位,等等。于是我open之后设置一通,果然奏效。
首先我通过vspd这个工具在windows上虚拟出2个相连的串口,也就是一个串口pair
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/13/8fdd5cc56533360221b23ad215e100aa.png)
然后在vmware上连接这2个串口,此时对于VMware来说,这2个在windows上的串口就是2个物理串口,添加串口设备时选择Use physical serial port。添加完后,启动虚拟系统,连接上这2个串口设备。然后查看着2个串口在linux中是怎么样映射的,它实际是哪个设备。通过:
[root@localhost srv]# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:1183731 rx:14614
1: uart:16550A port:000002F8 irq:3 tx:9721 rx:92472
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
[root@localhost srv]#
可以看到只有0和1是启用了的,所以就是ttyS0,ttyS1对应2个串口,接下来验证2个串口是否是互连的,在一个终端输入:
cat < /dev/ttyS0
另一终端输入:
echo “test” > /dev/ttyS1
如果接收到了那么2个串口就是连通的。
接下来就开始写测试程序对它们一个读一个写了,结果我犯了一个相当低级的错误,特记录。我还是按照以前读文件的方式,open ---> select ---> FD_ISSET ? ----> (read/write)。结果就是写能成功,收那端死都收不到,可以我明明cat echo测试都成功了啊!!最后猛然想起串口能通信一个最最基本的要求就是双方的设置参数要一样,比如收发波特率,数据位停止位,等等。于是我open之后设置一通,果然奏效。
相关文章推荐
- Linux 串口编程中遇到的问题
- Linux 串口编程中遇到的问题
- Linux 下读取串口并调试的时候遇到的问题
- windows 文件在linux运行遇到2个操蛋问题
- linux串口编程传送二进制数据时遇到0x0d,0x11和0x13会被丢掉问题
- linux下开发串口遇到的问题记录
- Linux 串口编程的一些问题解决
- 遇到的linux问题汇集 (转载)
- linux下免密码证书登入设置&遇到问题解决办法
- 自己实践linux ubuntu 操作系统的安装,总结遇到的问题。
- Linux下安装mysql遇到的一些问题及解决办法
- linux及shell常用命令及遇到的问题集合
- 关于 封装 linux socket 类时遇到的问题,及解决办法,
- 2012-12-19 重新安装linux遇到的问题
- 执行查看linux端口命令 9083 端口发现被占用 Hive安装过程遇到的问题
- Linux(centos)搭建SVN服务器完美方案及遇到的问题--费元星站长
- Linux串口编程的一些问题解决
- android启动中遇到的2个问题
- weblogic 9.2 linux 安装部署遇到的一些问题
- Linux 内核 Starting kernel ... 串口无输出问题归纳总结