基于ARM-LINUX的多网物联网关的设计与实现
2018-05-28贵州师范大学物理与电子科学学院吴伟坚陈世国
贵州师范大学物理与电子科学学院 吴伟坚 陈世国
1 引言
在1999年,美国麻省理工学院(MIT)的Kevin Ash-ton教授首次提出了物联网的概念(the internet of Things,IOT),与物联网相关的技术得到快速发展,这段时期被称为信息产业发展的第三次浪潮[1]。许多物联网的应用领域都得以发展,如智能家居、智能医疗、工业4.0等。在各种应用领域里面,物联网系统所面临的“物”不一样和处理“物”产生数据的处理系统不一样外,它所面临的数据识别、分类和传输的问题原理都是一样的。对于人类的信息、物体的信息和环境的信息是多种多样,采集的设备和采集的方式也是多种多样。这些种类和数量繁多的设备组建的网络群之间的通信和数据交互都需要一定方法来确保可行,这种方法就是制定相关协议和本文所论述的协议转换的物联网关。在互联网的网关中,所面对的一直是TCP/IP协议类型的网络,但在物联网的网关中,TCP/IP协议网络只是所连接的网络其中之一,其还包括很多传输方式所组成的网络,如有线网络can总线网络、无线网络zigbee网络等。
2 Arm-linux平台简介
网关(Gateway)常被称为协议转换器,它是一个网络传输数据的数据出口,同时他连接着别的网络。在物联网的网关中,其所连接的网络的类型都是不相同的。因此它必须支持不同类型网络的协议栈。
本文所设计的物联网关是基于arm-linux平台。其采用S3C2440芯片作为中央处理器,64M的SDRAM作为的内存芯片,nandflash作为长久存储芯片,DM 9000作为网卡芯片的一个硬件平台。S3C2440芯片是以ARM 920T为核心的16/32位精简指令集微处理器,其内核由存储管理单元、高速缓存和DMI三部分组成,具有独立的16KB指令高速缓存和16KB数据高速缓存。ARM 920T实现了MMU,AMBA总线和哈佛结构高速缓冲体系结构。在软件平台上面是采用嵌入式linux平台,嵌入式linux的特点除了开源外,还有是系统功能、大小可裁剪。嵌入式linux系统可分为:用户进程、系统调用接口、内核、硬件层。其中Linux系统内核则由进程管理模块、内存管理模块、文件系统、网络协议栈、硬件驱动管理模块、系统调用这六大部分组成。文章在运行嵌入式linux系统的S3C2440芯片平台上连接了TCP/IP协议类型网络、can总线网络、无线网络zigbee网络。其连接方式和网络特点将在下章介绍。
3 不同类型协议间转换介绍
3.1 TCP/IP协议网络
TCP/IP协议与7层的OSI参考模型不同,只有精简的四层协议层。它们分别是:网络接口层、网际层、传输层和应用层。很多人以为TCP/IP协议是指TCP协议和IP协议,但准确来说,它是指TCP/IP协议簇。这协议族有四层:网络接口层、网际层、传输层、应用协议层,其中TCP协议在传输层,而包含IP地址的IP协议则在网际层。在连接互联网的IP主机都必须具备实现TCP/IP协议栈。而嵌入式linux系统里已经包含TCP/IP网络协议栈,当我们需要TCP/IP协议传输数据时,则利用其已经实现好的socket网络通讯机制。Socket套接字编程的体现方式是linux系统的系统调用接口,利用相关的函数接口即可声明套接字,配置套接字。
图1 can总线组网图
3.2 CAN总线传输介绍
CAN总线是控制器局域网络(Controller Area Network,AN)总线的简称,它使用两根电缆来传输电信号的,它们分别成为CAN_H,CAN_L,其传输方式与USB总线的“差分传输”相似,都是根据两个电缆之间的电压差来判断电平的高低。当总线上连接多个控制器传输数据的时候,便构成了can总线网络。S3C2440芯片平台上虽然不支持can总线控制器,但可以通过该平台支持的spi总线与can总线之间做转换。本文选用的是Microchip公司的MCP2515芯片作为spi总线与can总线之间的转换器。在linux内核驱动的编写中,编写can总线设备驱动则变成了编写spi设备驱动,在can总线的应用层协议中,我们采用canopen协议栈来对can总线网络上的设备进行区分(见图1)。
3.3 Zigbee组网传输
Zigbee网络是基于国际通用的IEEE802.15.4的网络协议标准组建的无线网络,其有着数据传输安全可靠、成本低、距离短、功耗少等特点。Zigbee网络中主要有三种设备类型:协调器、终端节点和路由节点。协调器的作用是启动网络和作为整个网络的数据出入口,路由器的功能是加入设备进入网络和转发数据,其实协调器启动zigbee网络后,它的功能就和路由器一样了。而终端节点的作用是收集和发送数据,它是一般电子设备连入zigbee网络的作用点。作为zigbee网络数据出入口的协调器,德州仪器公司TI开发的CC2530芯片应用2.4-GHz频段(IEEE 802.15.4)、Zigbee和RF4CE于一体,有着性能高、价格低的特点,也是本文设计网关所采用的zigbee协调器芯片。那么S3C2440芯片与CC2530芯片通信的方式我们采用的是串口相互连接,那么zigbee网络协调器的驱动对应linux内核驱动模型则变成了串口UART的驱动了。
图2 zigbee网络设备图
4 网关软件设计
4.1 网关架构介绍
物联网关的作用其实就是把一个网络发送过来的数据转发到另一个网络去。文章利用arm-linux嵌入式平台作为网关程序载体,其采用S3C2440芯片及其他模块作为硬件平台,linux操作系统作为软件平台。在硬件上若是要新增模块,那么在linux内核中则需要编写相应的控制驱动,如can总线控制器的驱动和zigbee控制器驱动等,S3C2440芯片硬件平台不支持这两种方式,但可以通过总线转换的方式来支撑这两种网络。其运行时基于嵌入式linux操作系统平台的,它的程序架构如图3所示。
图3 物联网关功能架构图
网关程序利用了linux操作系统最优秀的文件监听机制epoll机制来完成,并利用线程池技术来执行相关网关IO操作。网关程序架构可分为:(1)epoll事件监听层:它的作用是对TCP/IP网络层所连接上的socket套接字、zigbee网络的设备文件和CAN总线网络层设备文件进行监听,若epoll机制监听的设备文件有数据读写时间产生则调用其处理函数,这种处理程序的功能其实就是把数据包挂载在数据包队列里,然后把处理数据包的函数放到线程池的工作队列里;(2)数据协议转换层:这一层的实现是利用了线程池技术完成。线程池的工作队列其实就是调用协议栈函数接口来对数据包解析,其中从哪个网络来的数据包就采用哪个网络协议栈函数来解析。它和网络层的程序交互非常密切,其作用也是解析一种网络传输过来的数据包,根据解析结果得出将要到哪里去,然后调用下一站网络的协议栈进行数据的协议封包,然后下放给该网络层进行发送;(3)各类型网络层:这一层封装了各个协议内容实现的协议栈程序,并包含了对上层应用调用的应用接口和对下层实现控制的驱动。它包括TCP/IP协议网络层、can总线网络层、zigbee网络层。
图4 物联网关各网络连接图
4.2 网关工作流程分析
网关启动时,对网关自身硬件、用户设计和连接的网络参数等初始化后,便进入了工作状态。初始化时,网关主程序利用linux操作系统系统调用接口epoll_create()创建了一个epoll池,并利用epoll_ctl()把初始化时所连接的TCP/IP网络socket套接字和CAN总线控制器MCP2515的设备文件(也就是S3C2440里SPI总线下的设备文件)、zigbee协调器CC2530的设备文件(也就是串口设备文件)和相应的事件处理任务放到epoll池里监听。在主程序while循环中利用epoll_wait()函数等待所监听设备文件或套接字的数据读写事件发生。
当某个网络有数据传到网关时,epoll监听机制监听到的socket套接字或是网络设备文件有数据产生,并接收该网络穿来的数据并调用相应的协议栈进行解析。网关程序解析完某个网络传输过来的协议包后应得到信息是到这个包的数据下一个目的地,及网关所连接的某个网络中的某个节点。
5 测试结果
多网物联网关设计完成后,利用自身所连接网络中的节点进行通信测试,为了测试一个网络间的节点能顺利与另外网络的节点进行数据收发,节点间相互传输一个字节的数据,若成功收发字节数据,则标识为“互通”。其结果如表1所示:
表1 各网络节点间通信结果表
6 结束语
本文以物联网网关为应用背景,根据了TCP/IP协议传网络、CAN总线网络和zigbee网络的传输方式,整合了这三种网络数据交互的方式,并阐述了ARM-linux平台中对网关程序的设计。互联网以TCP/IP协议传输数据,而设备互联需要以适合的方式传输到能和互联网连接的网关。如果设备是以有线的方式传输数据,以CAN总线网络连接网关为宜,若设备是以无线方式传输数据,则利用zigbee组网传输数据到网关。同时,多网物联网关在许多应用领域,如智能医疗、智能家居等行业,有着良好的使用价值和市场推广价值。
[1]关勇.物联网行业发展分析网[D].北京邮电大学,2010.
[2]高长艳.嵌入式TCP/IP协议的研究与实现[D].长春:中国科学院长春精密机械与物理研究所,2005:1-2.
[3]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008:248-257.
[4]张威.Linux网络编程教[M],北京希望电子出版社,2002,6.
[5]饶运涛,邹继军,郑勇芸现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[6]王风.基于CC2530的Zigbee无线传感器网络的设计与实现[D].西安:西安电子科技大学,2012:2-30.