王家兵,吴洪明,杨志刚
(1.重庆交通大学 图书馆,重庆400074;2.重庆交通大学 应用技术学院;3.重庆交通大学 机电与汽车工程学院)
无线传感器网络操作系统(WSNOS)在构建高效、安全可靠、可扩展、分布式无线传感器网络(WSN)时起着核心作用。由于WSN节点往往处于苛刻的工作环境,计算能力、内存、功率等资源相对有限,难以采用传统操作系统和嵌入式操作系统。目前有TinyOS、Contiki、MANTIS、LiteOS、Nano-RK、t-Kernel等各种 WSNOS[1-3],人们特别是对 TinyOS[4]、Contiki[5]、Mantis[6]研究较多。这些 WSNOS各有优势,但也存在一些不足,如TinyOS采用nesC语言,学习曲线长;Contiki、Mantis支持的硬件平台较少。近年来,拉脱维亚大学(University of Latvia)相关机构研发的开源移动代理网状传感器网络操作系统 Mans-OS[7-9](Mobile agent netted sensor Operating System),其研究和发展相当活跃,在野生动物监控[10]、道路状况监测[11]、环境监测[12]等实际应用中获得了良好的效果。本文对MansOS的架构、相关特性及应用方法进行了分析、研究,供广大WSNOS研究与使用者参考。
MansOS采用模块化分层设计,划分为三层:硬件表示层(Hardware Presentation Layer,HPL)、硬件抽象层(Hardware Abstraction Layer,HAL)和 硬 件 接 口 层(Hardware Interface Layer,HIL),体系结构如图1所示。其中最底层HPL是与硬件直接进行交互,定义了芯片等低级硬件的相关服务;中间层HAL包含了特定硬件平台和扩展模块相关代码,完成芯片选择、引脚分配和平台参数设定等功能;最上层HIL定义了设备驱动与设备管理,为应用提供统一的、平台无关的资源访问服务。其体系结构分离出了芯片相关、架构相关、平台相关、平台独立几个层面的功能。MansOS没有采用传统操作系统单一、严格独立的硬件抽象层,而允许用户直接访问所有层面功能,以更好利用特定的硬件设备,提高效率和灵活性,同时保持易于移植、代码量小。
图1 MansOS体系结构[13]
MansOS整个源码文件目录如图2所示,hil文件夹为硬件接口层,对用户提供LED、ADC、USART、Sleep、无线通信以及传感器等平台无关的统一应用程序接口;kernel文件夹为操作系统核心,包含设备管理、系统引导、系统调用支持等;chips文件夹为硬件表示层芯片相关代码,包含各个微处理器与设备驱动;arch文件夹为 MSP430、AVR等架构相关代码,platforms文件夹为Arduino、TelosB等平台相关代码,I/O引脚、功能函数、与平台和架构相关常量也在arch与platform层定义。
图2 MansOS源码文件目录
1.2.1 内核设计
MansOS内核设计为支持事件驱动与多线程两种应用执行模式。系统启动时调用initPlatform()进行平台初始化并完成常用组件初始化,然后根据不同执行模式,调用不同函数。事件驱动模式下,由于GCC不支持执行main()函数后的事件响应,所以采用调用appMain()函数来代替main函数。多线程模式下,初始化完毕直接调用main()函数,再创建核心线程和用户线程两个线程。
默认情形MansOS采用事件驱动模式。事件驱动模式的优点是大量功能由中断子程序实现,应用程序简洁,代码量小,只需管理一个堆栈,无需多线程时复杂的内存管理,节省RAM占用量。不利的是,整个程序设计流程难以在代码中反映,给程序编写及调试带来难度;另外,中断嵌套要求整个操作系统代码可重入,中断子程序执行时间太长可能导致系统阻塞。事件驱动模式下,应用程序中需注册回调函数,编写相应的回调函数代码,在主程序中通过调用sleep()进入低功耗省电模式。
对于线程模式,MansOS采用了核心线程与用户线程层次式设计。核心线程负责系统事务处理,具有高优先级别,用户线程可以中断其他用户线程,但不能中断核心线程,有多个用户线程时则采用时间片轮转法和优化级两种算法进行调度。MansOS采用了信号量机制以实现线程同步,用堆栈检测来防止堆栈溢出。通过各线程主循环中调用sleep(),在主线程及用户线程均不活动时,系统进入省电模式。
1.2.2 文件系统
MansOS设计了一个接口类似UNIX的简单文件系统,把物理Flash芯片抽象为逻辑文件,并提供了各种基本的文件操作命令,使得用MansOS构造的无线传感器节点能对采集到的数据进行保存和记录。
MansOS文件系统把Flash芯片分成内存段和固定大小的数据块。一个内存段是可一次擦除的最小内存单元,含多个数据块,数据块的大小可以选定,一个文件由一系列的数据块链接而成,这使得文件的大小可以动态地分配。各个数据块所在段、已使用、未使用、可擦除等标识信息组成一个块表,保存在EEPROM中。各文件的文件名、第一个数据块号、文件大小等信息也保存在EEPROM中。MansOS文件系统采用单级目录,数据只可追加,不可改写,整个文件系统代码小而管理简单有效。
1.2.3 组件化设计与裁减机制
另外,在交通组织过程中,还需要融入交通综合性以及交通科学性发展的目标,以充分利用原有交通设置为宗旨,保证最好的改扩建效果。根据项目实际情况,选择最合理的施工方案,保证施工结果可以满足实际安全需要。
为有效解决应用WSNOS时可能发生的目标代码大、资源利用率低的问题,MansOS采用组件化的设计模式,以组件配置与选用来实现核心程序裁减。传统桌面操作系统一般采用动态创建、动态终止线程与进程,资源受限的WSNOS一般采用静态编译。MansOS采用编译时对组件进行充分选配,使运行时再次配置的情况最少,目标应用代码达到最小。极端情况下,用户甚至可把整个OS作为常用函数库来使用。
内核裁减方面,MansOS通过编译时交互与非交互两部分来完成。交互部分由配置文件实现,用户在系统默认配置模板基础上进行平台相关、架构相关、应用相关的配置,定义组件间包含、互斥关系;非交互部分是GCC与GNU binutils等编译工具自动完成的代码优化、无关代码剔除等操作。
1.2.4 运行时管理与无线再编程支持
MansOS提供了一个命令行界面(shell)供用户进行运行时的管理,其基于简单系统消息协议(Simple System Message Protocol,SSMP),以广播或单播的形式对整个网络中可到达的节点进行管理。shell可采用交互形式,也可在脚本中执行。
无线再编程使无线传感器网络能进行节点代码远程更新,使应用开发、部署及维护更具灵活性。MansOS实现了一个有效的无线再编程机制,把整个无线再编程分为4个阶段,各阶段内容及实现方法如表1所列。
表1 MansOS无线再编程实现流程
应用无线再编程时,节点自举后,引导程序会下载代码替换原OS映像文件,完成OS映像文件更新。MansOS引导程序引入了检测系统是否正确引导机制,多次引导失败时,会自动重新加载上次OS映像,以防止无线再编程失败时节点不可管理的现象发生。为节省更新时间和功耗,MansOS把代码分成了用户代码段与核心代码段,无线再编程可选择对用户代码段或核心代码段进行部分更新。实际应用中,无线再编程会引起节点代码量增加,存在每次更新花费时间较长等问题,应根据具体情况选用。
1.2.5 可移植性与通信协议支持
为了能容易移植到各种处理器架构,MansOS采用了平台与代码尽可能独立的设计,并且内含MSP430、Atmel AVR以及PC架构源码,可直接应用于Arduino Duemilanove(ATmega328PMCU)、Tmote Sky(MSP430F1611 MCU)、AdvanticSYS XM1000(MSP430F261MCU)以及Zolertia Z1(MSP430F2617MCU)等平台。MansOS对UART、SPI、I2C总线等通信提供了平台独立的统一应用程序接口,使外围设备的驱动可应用于不同平台,只在进行编译时再链接具体的实现子程序库即可。无线通信方面,MansOS支持IEEE 802.15.4兼容无线组网,如2.4G ZigBee,并采用uIPv6实现对IPv6协议栈的支持。
MansOS发展源于LiteOS,架构上融入了Contiki、MANTIS的一些优点,使其在易用性、可裁剪性、目标代码大小以及平台可移植等方面均有良好表现。相比Tiny-OS,MansOS采用C语言,代码更易编写、理解和管理;相比Contiki,MansOS的组件化设计与裁剪机制使资源利用更合理,生成目标代码更小;相比Mantis,MansOS把线程分为核心线程和用户线程,且核心线程总优先于用户线程,使线程调度更简单;相比LiteOS,MansOS分离出了架构相关、平台相关代码,可移植性更好。
表2为TinyOS、Contiki、MANTI、LiteOS、MansOS在各性能方面的对比。
MansOS相关应用的开发需在Linux环境下进行交叉编译链接,或在Windows平台下,用Cygwin或 MinGW与MSYS进行。开发环境构建包括源码下载安装、编译器和编译工具安装等方面内容。
MansOS的源码可由http://code.google.com/p/mansos/下载[14],也可采用SVN从http://mansos.net/svn/mansos/获取最新源码。
编译器和编译工具安装应根据目标平台架构,选用对应的编译器。对于 MSP430平台,采用 MSP430MCU GCC工具链,可从http://mspgcc.sourceforge.net下载,包括 gcc-msp430、msp430-libc、binutils-msp430等。对于ATMega328PMCU 的 Arduino Duemillanove等 Atmega平台,采用 AVR-GCC工具链,包括gcc-avr、avr-libc、binutils-avr、avrdude等,可 从 http://www.nongnu.org/avrlibc/查到相关说明文档及下载。
MansOS开发环境还需要常规的UNIX命令行工具,如make等。另外,由于MansOS采用了Python脚本完成目标代码链接,需安装好Python。
实际工程应用开发中还有对应的目标板,如Tmote Sky、Arduino Duemillanove控制板等,在没实际目标板时,仅可用MansOS内建的PC仿真平台进行初步仿真。
典型的 MansOS应用一般包括config、Makefile、main.c三个文件。config是应用配置文件,包括MansOS组件的选配、编译常量以及MCU型号、CPU主频等相关定义;Makefile为GNU make使用文件,用于为各种架构生成目标代码及上载代码到目标板;main.c为应用程序C源码文件。MansOS在apps/demo文件夹提供了一系列基本应用、传感器应用、无线通信应用以及设备驱动等源码示例,供开发者参考。开发应用时,编写好config、Make-file、main.c文件,再运行make完成编译、链接及目标代码下载到目标板。一个MansOS简单应用的main.c源码如下:
表2 操作系统性能对比
MansOS应用程序的调试与测试功能通常可用PRINTF、PRINT及PRINTLN函数来实现。默认情形下,对应的输出发送到串口,通过监听串口输出可得到相关的信息。Linux下可采用minicom,Windows下可采用putty,监听前先设置好串口:波特率38 400,数据位8位,停止位1位,无校验,无流控制。MansOS也提供了一个python脚本(mos/pc/tools/dumpserial/dumpser.py)用于串口监听,另外,通过应用配置文件中设置CONST_DPRINT_TO_RADIO=1,可改变串口输出到无线通信端口,在有LCD时,相关信息也可发送到LCD上显示。
MansOS提供了一个命令行工具(mansos/pc/shell),可通过串口或无线通信进行WSN节点的控制和配置,包括所有节点列表、读传感器值、设置传感器、重启、下载代码、上载代码等操作。对于MSP430MCU的传感器板,MansOS还支持使用mspsim工具进行调试。
利用WSNOS结合成熟硬件平台来部署和实现各种应用,部署快速,编程简洁,同时满足稳定、低功耗等要求,是WSN重要的发展方向。
MansOS作为一款功能齐全、可移植性强、易于使用的开源WSNOS,具有巨大的发展潜力。
MansOS从2007年开始发展,目前仍处于从研究走向实际应用的阶段,不断进行着更新,一些特性仍在实际应用中进行测试、研究和改进。如开发环境方面,其集成开发环境在功能及适用性方面仍存在很多不足,需作大量的改进以更好地支持实际工程的仿真、部署和测试;另外,需进一步开发以支持更多种硬件平台及无线通信协议,特别是在目前WSN与云计算整合的发展趋势下,如能考虑添加与云计算平台的融合,则能实现更多、更强大的应用。
[1]刘金娟.无线传感器网络协议及操作系统研究[D].淮南:安徽理工大学,2009.
[2]Thang Vu Chien,Hung Nguyen Chan,Thanh Nguyen Huu.A comparative study on operating system for Wireless Sensor Networks[C]//Proceedings of International Conference on Advance Computer Science and Information System 2011(ICACSIS 2011).Indonesia Jakarta:IEEE eXpress Conference Publishing,2011:73-78.
[3]Farooq M O,Kunz T.Operating Systems for Wireless Sensor Networks:A Survey [J].Sensors 2011,11(6):5900-5930.
[4]段海龙,杨丽,任淑艳,等.无线传感器网络操作系统TinyOS的研究与实例开发[J].科技通报,2012,28(4):200-202.
[5]冀宇鑫,杨冬,秦雅娟,等.基于 WSNs平台的Contiki通用移植方法研究[J].计算机技术与发展,2012,22(11):134-137.
[6]刘莉,黄海平.基于MantisOS的无线传感器网络应用开发模型[J].信息技术,2010(6):127-129.
[7]MansOS[EB/OL].[2013-01].http://mansos.edi.lv.
[8]G Strazdins,A Elsts,L Selavo.MansOS:easy to use,portable and resource efficient operating system for networked embedded devices[C]//Proceedings of the 8th ACM Conference on Embedded Networked Sensor Systems(SenSys'10).New York:ACM,2010:427-428.
[9]A Elsts,G Strazdins,A Vihrov,et al.Design and Implementation of MansOS:a Wireless Sensor Network Operating System[J].Scientific Papers University of Latvia,2012,787:79-105.
[10]R Zviedris,A Elsts,G Strazdins,et al.LynxNet:Wild Animal Monitoring Using Sensor Networks[C]//Proceedings of the 4th international conference on Real-world wireless sensor networks.Berlin Heidelberg:Springer,2010:170-173.
[11]Artis Mednis,Atis Elsts,Leo Selavo.Embedded Solution for Road Condition Monitoring Using Vehicular Sensor Networks[C]//Proceedings of the 6th International Conference on Application of Information and Communication Technologies(AICT 2012).Germany Stuttgart:IEEE eXpress Conference Publishing,2012:248-252.
[12]Atis Elsts,Rihards Balass,Janis Judvaitis,et al.SAD-mote:A Robust and Cost-Effective Device for Environmental Monitoring[C]//ARCS'12Proceedings of the 25th international conference on Architecture of Computing Systems,Berlin Heidelberg:Springer,2012:225-237.
[13]MansOS [EB/OL].[2013-01].http://mansos.net/wiki/index.php/MansOS.
[14]MansOS[EB/OL].[2013-01].http://code.google.com/p/mansos.