专为物联网而生的操作系统TinyOS
在物联网的世界里,一个智能终端节点的存储空间往往不足100KB,那么如何在这么小的空间里高效稳定的运行多进程多任务的程序呢?TinyOS的诞生为我们提供了一个完美的解决方案。
分为如下几部分: TinyOS的介绍、安装、开发过程 、开发平台介绍 、开发案例
TinyOS的介绍
TinyOS是一款开源的嵌入式操作系统,它基于一种组件(Component-Based)的架构方式,使得能够快速实现各种应用。它的首先出现是做为UCBerkeley和IntelResearch合作实验室的杰作,用来嵌入智能微尘当中,之后慢慢演变成一个国际合作项目,即现在的TinyOS联盟。它设计之初的目的是制作一个专属嵌入式无线传感器网络(WSN,wirelesssensornetwork)的操作系统。但事实上,由于良好的可扩展性和足够小的代码尺寸,TinyOS在物联网的应用领域中也占有非常重要的地位;
TinyOS作为一个专业性非常强的操作系统,主要存在如下几个特点:
1.拥有专属的编程语言
TinyOS应用程序都是用NesC编写,其中NesC是标准C的扩展,在语法上和标准C没有区别,它的应用背景是传感器网络这样的嵌入式系统,这类系统的特点是内存有限,且存在任务和中断两类操作,它的编译器一般都是放在TinyOS的源码工具路径下。
2.开放源代码
所有源码都免费公开,可以访问官方网站www.tinyos.net去下载相应的源代码,由全世界的TinyOS的爱好者共同维护,目前最新的版本是2.1.1。
3.基于组件的软件工程建构
TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(AWiringSpecification)将各种组件连接起来,以完成它所需要的功能。
4.通过Task和Events来管理并发进程
Tasks:一般用在对于时间要求不是很高的应用中,且tasks之间是平等的,即在执行时是按顺序先后来得,而不能互相占先执行,一般为了减少tasks的运行时间,要求每一个task都很短小,能够使系统的负担较轻;支持网络协议的替换。
Events:一般用在对于时间的要求很严格的应用中,而且它可以占先优于tasks和其他events执行,它可以被一个操作的完成或是来自外部环境的事件触发,在TinyOS中一般由硬件中断处理来驱动事件。
5.支持网络协议组件的替换
除了默认的协议之外,还提供其他协议供用户替换,并且支持客户自定义协议,这对于通信协议分析,非常适用于通信协议的研究工作。
6.代码短小精悍
TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400Bytes左右;能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。
如何安装TinyOS的开发环境
若要进行TinyOS的开发研究,先得安装好TinyOS的开发环境,由于NesC的编译器ncc只能运行在Unix环境下,TinyOS开发环境有三种安装方式:
一、独立启动的Linux
官方提供rpm包和deb包,一般建议使用Ubuntu9.04或是RHEL5
二、Windows+Cygwin
Cygwin是一个软件集合,支持用于各种版本的MicrosoftWindows上,运行UNIX类系统,ncc可以运行在Cygwin上,使用这种方式的人最多
三、VMware+Xubuntu
在TinyOS.net上可以下载到一个包含完整TinyOS开发环境的Xubuntu虚拟机镜像文件,只要在PC上安装好VMwareplayer即可使用,这个方式最快捷,但是由于是虚拟机的方式,所以编译速度比较慢
不论是哪种方式安装的流程基本都是一样的:
1.安装JDK1.6,用于WSN基站或是WSN网关与PC机的交互
2.安装Cygwin,仅当第二种安装方式才需要安装
3.安装平台交叉编译器,用于将C代码交叉编译成很终端设备可以运行的二进制文件,一般来说有AVR、MSP430、8051、ARM这几种类型
4.NesC编译工具,TinyOS都是基于NesC语言写的,所以需要NesC编译工具将其编译成C代码,编译后的C代码就可以交给平台交叉编译工具了
5.TinyOS源码树,所有的TinyOS源代码都在这里,可以通过Git或CVS方式进行版本管理,目前最新的版本是2.1.1
6.安装Graphvizvisualization工具,TinyOS开发环境包含nesdoc工具,该工具可以自动生成可视化的模块关系图表,帮助开发人员观看源代码,而该工具依赖于Graphvizvisualization工具
7.设置环境变量,主要是将各个工具的路径添加到Shell环境变量中去
TinyOS的开发过程
如图所示,TinyOS的编译+下载的过程可以分成如下阶段:
1.使用NesC编写程序源代码,源代码的后缀为*.nc,可以用各种支持C高亮的编写器,这里笔者推荐Notepad++;
2.将*.nc的源代码通过NesC编译器ncc编译成标准C文件,这里要注意的是:ncc编译器只能将*.nc文件编译成C代码,并不能直接生成二进制代码,所以在安装开发环境时,必须根据自己的开发平台选择对应的交叉编译工具;
3.使用与硬件平台相关的C交叉编译工具将标准C文件编译成可执行的二进制文件,笔者用的硬件平台是CC2430芯片,它的核心CPU是8051,那么就可以使用各种8051的C编译器,例如Keil或是IAR
4.通过编写器将二进制可执行文件下载到硬件平台上,笔者用的是CC2430芯片,对应的编程器是SmartRF04FlashProgrammer
TinyOS的调试是比较麻烦的,因为调试工具都不支持NesC语法,只能先调试NesC编译生成的C文件,然后根据C代码中的注释语句反查NesC源码;
TinyOS开发平台介绍
国内目前可以买到的TinyOS开发平台主要有两种,一种是Crossbow公司WSN开发套件,一种亿道电子的XSBase-WSN开发套件;
1.Crossbow本身就是TinyOS联盟的成员之一,其所有产品都在TinyOS源码的Platform目录下可以找到,可以算得上是TinyOS技术商用化的代表;在国内有一家代理,开发平台的做工非常不错,产品覆盖面也比较广,主要的缺点就是产品太贵,而且中文的资料较少。
2.亿道电子的WSN套件真是笔者目前正在使用的开发平台,它使用是较先进CC2430芯片,同时支持TinyOS和Z-stack两种开发方式,并且包含大量的中文教材和使用手册,硬件移植的也非常稳定,所有的TinyOS测试用例都能正常运行,而且还带了大量的中文教材、使用手册和实验用例,所以笔者个人认为作为WSN的验证开发平台性价比更高。其中值得一提的是,该产品搭建了一整套的解决方案框架,实现了异构网络之间的互联互通,可以在任何一地通过GPRS手机上网,访问节点上的物理数据,开发者可以迅速的在这个框架下做二次开发。
TinyOS开发案例
目前有多个采用TinyOS的研究项目,如UCLA(加州大学洛杉矶分校)的ShahinFarshchi在进行一项以TinyOS为基础的无线神经界面研究。这样的系统在100Hz/频道的采样频率下可传感、放大、传输神经信号,系统小巧、成本低、重量轻、功率小。系统要求一个接收器接收、解调、显示传输的神经信号。在每秒8bit的采样率下,系统的速度可达5600。该速度可保证8个EEG频道、或1个速度为每秒5.6K采样频道的可靠传输。研究者目前的奋斗目标是提高该基于TinyOS的传感网络的数据传输速度,设计与被测对象连接的前端神经放大电路。
http://www.ee.ucla.edu/~judylab/research/projects/Shahin/index.htm
路易斯安娜州立大学和位于BatonRouge的南方大学的Nian-FengTzeng博士正在研究应用于石油/气体开发和管理的UcoMS(UbiquitousComputingandMonitoringSystem,泛计算和监控系统)。该系统适用于传感网络、无线通信和网格计算,主要功能包括帮助钻孔、操作数据记录和处理、在线平台信息发布和显示、设备监控/入侵检测、地震处理、复杂表面设备和管道的管理。也可使用UCoMS监控、维护淘汰的平台。
http://www.ucoms.org
另外,Freescale正在其Zigbee开发板上测试TinyOS和TinyDB。
波士顿大学的WeiLi将其用于传感网络的控制和优化:
http://people.bu.edu/wli
BrilliantTechnology将其用于无线传感网络进行结构健康监测:
http://www.tBrilliant.com
分为如下几部分: TinyOS的介绍
TinyOS的介绍
TinyOS是一款开源的嵌入式操作系统,它基于一种组件(Component-Based)的架构方式,使得能够快速实现各种应用。它的首先出现是做为UCBerkeley和IntelResearch合作实验室的杰作,用来嵌入智能微尘当中,之后慢慢演变成一个国际合作项目,即现在的TinyOS联盟。它设计之初的目的是制作一个专属嵌入式无线传感器网络(WSN,wirelesssensornetwork)的操作系统。但事实上,由于良好的可扩展性和足够小的代码尺寸,TinyOS在物联网的应用领域中也占有非常重要的地位;
TinyOS作为一个专业性非常强的操作系统,主要存在如下几个特点:
1.拥有专属的编程语言
TinyOS应用程序都是用NesC编写,其中NesC是标准C的扩展,在语法上和标准C没有区别,它的应用背景是传感器网络这样的嵌入式系统,这类系统的特点是内存有限,且存在任务和中断两类操作,它的编译器一般都是放在TinyOS的源码工具路径下。
2.开放源代码
所有源码都免费公开,可以访问官方网站www.tinyos.net去下载相应的源代码,由全世界的TinyOS的爱好者共同维护,目前最新的版本是2.1.1。
3.基于组件的软件工程建构
TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(AWiringSpecification)将各种组件连接起来,以完成它所需要的功能。
4.通过Task和Events来管理并发进程
Tasks:一般用在对于时间要求不是很高的应用中,且tasks之间是平等的,即在执行时是按顺序先后来得,而不能互相占先执行,一般为了减少tasks的运行时间,要求每一个task都很短小,能够使系统的负担较轻;支持网络协议的替换。
Events:一般用在对于时间的要求很严格的应用中,而且它可以占先优于tasks和其他events执行,它可以被一个操作的完成或是来自外部环境的事件触发,在TinyOS中一般由硬件中断处理来驱动事件。
5.支持网络协议组件的替换
除了默认的协议之外,还提供其他协议供用户替换,并且支持客户自定义协议,这对于通信协议分析,非常适用于通信协议的研究工作。
6.代码短小精悍
TinyOS的程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400Bytes左右;能够突破传感器存储资源少的限制,这能够让TinyOS很有效的运行在无线传感器网络上并去执行相应的管理工作等。
如何安装TinyOS的开发环境
若要进行TinyOS的开发研究,先得安装好TinyOS的开发环境,由于NesC的编译器ncc只能运行在Unix环境下,TinyOS开发环境有三种安装方式:
一、独立启动的Linux
官方提供rpm包和deb包,一般建议使用Ubuntu9.04或是RHEL5
二、Windows+Cygwin
Cygwin是一个软件集合,支持用于各种版本的MicrosoftWindows上,运行UNIX类系统,ncc可以运行在Cygwin上,使用这种方式的人最多
三、VMware+Xubuntu
在TinyOS.net上可以下载到一个包含完整TinyOS开发环境的Xubuntu虚拟机镜像文件,只要在PC上安装好VMwareplayer即可使用,这个方式最快捷,但是由于是虚拟机的方式,所以编译速度比较慢
不论是哪种方式安装的流程基本都是一样的:
1.安装JDK1.6,用于WSN基站或是WSN网关与PC机的交互
2.安装Cygwin,仅当第二种安装方式才需要安装
3.安装平台交叉编译器,用于将C代码交叉编译成很终端设备可以运行的二进制文件,一般来说有AVR、MSP430、8051、ARM这几种类型
4.NesC编译工具,TinyOS都是基于NesC语言写的,所以需要NesC编译工具将其编译成C代码,编译后的C代码就可以交给平台交叉编译工具了
5.TinyOS源码树,所有的TinyOS源代码都在这里,可以通过Git或CVS方式进行版本管理,目前最新的版本是2.1.1
6.安装Graphvizvisualization工具,TinyOS开发环境包含nesdoc工具,该工具可以自动生成可视化的模块关系图表,帮助开发人员观看源代码,而该工具依赖于Graphvizvisualization工具
7.设置环境变量,主要是将各个工具的路径添加到Shell环境变量中去
TinyOS的开发过程
1.使用NesC编写程序源代码,源代码的后缀为*.nc,可以用各种支持C高亮的编写器,这里笔者推荐Notepad++;
2.将*.nc的源代码通过NesC编译器ncc编译成标准C文件,这里要注意的是:ncc编译器只能将*.nc文件编译成C代码,并不能直接生成二进制代码,所以在安装开发环境时,必须根据自己的开发平台选择对应的交叉编译工具;
3.使用与硬件平台相关的C交叉编译工具将标准C文件编译成可执行的二进制文件,笔者用的硬件平台是CC2430芯片,它的核心CPU是8051,那么就可以使用各种8051的C编译器,例如Keil或是IAR
4.通过编写器将二进制可执行文件下载到硬件平台上,笔者用的是CC2430芯片,对应的编程器是SmartRF04FlashProgrammer
TinyOS的调试是比较麻烦的,因为调试工具都不支持NesC语法,只能先调试NesC编译生成的C文件,然后根据C代码中的注释语句反查NesC源码;
TinyOS开发平台介绍
国内目前可以买到的TinyOS开发平台主要有两种,一种是Crossbow公司WSN开发套件,一种亿道电子的XSBase-WSN开发套件;
1.Crossbow本身就是TinyOS联盟的成员之一,其所有产品都在TinyOS源码的Platform目录下可以找到,可以算得上是TinyOS技术商用化的代表;在国内有一家代理,开发平台的做工非常不错,产品覆盖面也比较广,主要的缺点就是产品太贵,而且中文的资料较少。
2.亿道电子的WSN套件真是笔者目前正在使用的开发平台,它使用是较先进CC2430芯片,同时支持TinyOS和Z-stack两种开发方式,并且包含大量的中文教材和使用手册,硬件移植的也非常稳定,所有的TinyOS测试用例都能正常运行,而且还带了大量的中文教材、使用手册和实验用例,所以笔者个人认为作为WSN的验证开发平台性价比更高。其中值得一提的是,该产品搭建了一整套的解决方案框架,实现了异构网络之间的互联互通,可以在任何一地通过GPRS手机上网,访问节点上的物理数据,开发者可以迅速的在这个框架下做二次开发。
TinyOS开发案例
目前有多个采用TinyOS的研究项目,如UCLA(加州大学洛杉矶分校)的ShahinFarshchi在进行一项以TinyOS为基础的无线神经界面研究。这样的系统在100Hz/频道的采样频率下可传感、放大、传输神经信号,系统小巧、成本低、重量轻、功率小。系统要求一个接收器接收、解调、显示传输的神经信号。在每秒8bit的采样率下,系统的速度可达5600。该速度可保证8个EEG频道、或1个速度为每秒5.6K采样频道的可靠传输。研究者目前的奋斗目标是提高该基于TinyOS的传感网络的数据传输速度,设计与被测对象连接的前端神经放大电路。
http://www.ee.ucla.edu/~judylab/research/projects/Shahin/index.htm
路易斯安娜州立大学和位于BatonRouge的南方大学的Nian-FengTzeng博士正在研究应用于石油/气体开发和管理的UcoMS(UbiquitousComputingandMo
http://www.ucoms.org
另外,Freescale正在其Zigbee开发板上测试TinyOS和TinyDB。
波士顿大学的WeiLi将其用于传感网络的控制和优化:
http://people.bu.edu/wli
BrilliantTechnology将其用于无线传感网络进行结构健康监测:
http://www.tBrilliant.com