串口编程实现通信.pdf
《串口编程实现通信.pdf》由会员分享,可在线阅读,更多相关《串口编程实现通信.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2005 年第 2 期 漳州师范学院学报(自然科学版)No.2.2005 年(总第 48 期)Journal of Zhangzhou Teachers College(Nat.Sci.)General No.48 文章编号文章编号:1008-7826(2005)02-0037-05 串口通讯在串口通讯在Linux操作系统中的应用操作系统中的应用 陈磊松1,许华荣2(1.漳州师范学院 物理系,福建 漳州 363000;2.福建师大福清分校 数学与计算机系,福建 福清 350300)摘要摘要:本文介绍了在 linux 操作系统下,如何通过串行通讯口和自定义通信协议来实现计算机之间或计算机与其它设
2、备之间的数据传输,以满足一些特定场合中安全的数据传输的需求.关键词关键词:linux;串口;数据传输 中图分类号中图分类号:TP393.09 文献标识码文献标识码:A 1 引言引言 随着计算机应用的日益普及和计算机网络技术的飞速发展,计算机之间的数据交换变得越来越频繁而重要,在进行数据交换的同时,网络安全又是面临的一个重大问题.由于微软的 Windows 操作系统非常容易受到攻击,目前,使用 linux 和 unix 操作系统的用户已经越来越多,基于 linux 操作系统下的数据交换问题也受到人们的关注.对于近距离的计算机之间的数据交换,通常可以通过组建局域网、软盘拷贝、硬盘拷贝等,本文介绍的
3、是使用串行通讯口的“对拷线”.如果使用局域网,必然要通过 ipx/spx、netbeui、Tcp/ip 等协议,由于这些协议都是公开的,所以不管防火墙设置多么严密,黑客总是能够找到漏洞进行攻击.所以现在大多数的政府机关和企业公司通常都会有两个网络,一个是对外公开的外网;而另一个则是内部使用的内网.通常外网是与公众互联网连接且信息是对外公开的,而内网的信息是对外保密的,所以为了防止内网的保密信息被窃取或恶意破坏,这两个内、外网之间是绝对物理隔离的.当两个网络之间需要交换信息的时候,通常是由网络管理员用硬盘或其它媒介手工在两者之间进行传递,这样的话,一方面实时性差,通常要一段时间才能更新;另一方面
4、比较烦琐,需要有专人每隔一段时间手工操作.这时我们就可以利用串口在两个网络之间传递消息或文件,因为在串口通讯中我们可以自己定义通信协议和规则,而不需要通过 Tcp/ip 协议,这样只要外界不知道我们定义的串口通信协议,就无法通过串口来窃取和破坏内网的信息.网络管理员则可以很方便地在使用串口信息和文件传送程序在两个网络之间传递信息和文件,这将非常方便,并且省去了许多的人力和物力.同样,对于远程计算机之间的数据通讯,也可以通过计算机的串口,借用普通的电话线和 modem实现计算机之间的远程高速数据通讯.而且这种方法比起单纯使用邮政电话网具有很高的保密性和速度,所以这种方法适合于一些要求较高速度传输
5、具有一定保密性质的数据的场合.2 Linux 操作系统中的串口通信设备操作系统中的串口通信设备 2.1 Linux 中的设备文件中的设备文件 在 Linux 环境下,文件是抽象的,它将几乎所有的东西都按文件来对待,所以我们可以象操作普通文件一样去打开、关闭、读取和写入不同的串口终端设备.文件抽象提供了一个一致的、统一的接口 收稿日期:20041211 作者简介:陈磊松(1973),男,福建福安人,讲师,本科.38 漳州师范学院学报(自然科学版)2005 年 用来和所有的设备和文件类型进行交互.这些设备文件(device file)也称为特殊文件(special file),该文件提供了到大多数
6、物理设备的接口.它们分为字符型特殊文件和块特殊文件.字符型特殊文件一次只能读出或写入一个字节或字符的数据;块特殊文件必须以一定大小的块来读出或写入数据.而串口终端设备就属于字符型特殊文件.所以我们可以象操作普通文件一样,利用文件描述符使用 open、create、close、read、write、fchmod、select 等调用来设置和操纵串口.这些调用的使用方法与普通文件大体一致.Linux 操作系统下串口等通信资源是作为串行通信终端设备 ttySxx 实现的.包括标准 pc 串口(COM1COM4)和可扩展的多口串行通信卡,均可方便地安装、使用.一般来说,Linux 的串行通信终端 tt
7、ySxx 的驱动程序能够支持所有使用 8250,I6450,I6550,I6550A 及其兼容的 UART 芯片的串口卡.通常 Linux 的内核编译配置时已经加入串口支持,因此当 Linux 启动时会自动检测到标准的串口设备.对于扩展的多口串行通信卡,则采用在系统启动的配置脚本中配置/etc/serial.conf 文件或调用setserial 命令动态加载.Linux 操作系统中的所有设备以设备文件名的方式存储在目录/dev 中,其中每一个设备由一个主设备号和一个次设备号唯一确定.对于串口设备,ttySxx 的主设备号为 4,它既能用于输入也能用于输出.Linux 串行通信设备和 Wind
8、ows 操作系统中的串口对应如表 1 所示.表 1 串口设备特征表 Linux 串行设备名称 主设备号 次设备号 对应的串口/dev/ttyS0 4 64 COM1/dev/ttyS1 4 65 COM2/dev/ttyS2 4 66 COM3/dev/ttyS3 4 67 COM4 一般情况下,Linux 操作系统都应该已经正确地建立了这些设备.如果系统中缺少某些设备,可以用系统提供的 mknod 指令建立设备特殊文件,只有 root 账号才能建立这些文件.如:#mknod -m 666/dev/ttyS0 c 4 64 上面的命令用主设备号 4 的辅设备号 64 建立字符设备特殊文件/de
9、v/ttyS0,也可以在/dev 的目录下运行设备制作脚本程序 MAKEDEV:#./MAKEDEV ttyS0 2.2 串行通讯口的设置串行通讯口的设置 终端接口,即 tty(Teletype Terminal Unit)接口是基于图 1 的硬件模型的,该模型非常通用,以至于几乎在任何一个需要将程序与某种输入、输出设备(比如打印机、控制台、键盘、鼠标等,当然这其中包含串口设备)打交道的情况下都可以被描述为这种通用模型的子类型.结果,因为这一模型提供了一个一致的,可以被应用与许多种不同情况的编程接口.Linux 中定义了一个查询和操纵各种终端的标准接口,该接口被称为termios,在系统的头文
10、件中定义.所有的 tty 操作都通过该接口和几个函数调用来实现,以下列出了 termios 的数据结构,它包含了个终端特性的完整描述,相关联的函数可以查询和修改这些特性.#include struct termios tcflag_t c_iflag;/*input mode flags*/图 1 终端硬件模型第 2 期 陈磊松,许华荣:串口通讯在 Linux 操作系统中的应用 39 tcflag_t c_oflag;/*output mode flags*/tcflag_t c_cflag;/*control mode flags*/tcflag_t c_lflag;/*local mode
11、 flags*/cc_t c_line;/*line discipline*/cc_t c_cc NCCS;/*control characters*/speed_t c_ispeed;/*input speed*/speed_t c_ospeed;/*output speed*/;该数据结构的各成员的属性值以及参数含义可以参考本文最后的参考文献.termios 接口包含了许多控制串口终端特性的函数.其中基本的函数包括tcgetattr和tcsetattr.通常通过 tcgetattr 来获取终端的特性和属性值,接着按要求修改这些属性(即改变 tcgetattr 函数返回的一个termios
12、型的数据结构的相应成员的值),最后再利用 tcsetattr 来设置终端新的特性和属性值.此外还可以利用 cfgetispeed、cfsetispeed、cfgetospeed 和 cfsetospeed 的函数调用来查询和改变输入与输出线路的速度值.以上是一些主要的终端控制函数,其函数原型如下所示:#include#include int tcgetattr(int fd,struct termios*tp);int tcsetattr(int fd,struct termios*tp);int cfgetispeed(struct termios*tp);int cfsetispeed(s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 编程 实现 通信
限制150内