介绍

TinyOS是一款嵌入式操作系统,相信做无线传感器网络开发的同志们都不陌生。同类型的系统有不少,但是TinyOS的应用较之其他系统更为广泛。TinyOS 1.x版本和2.x版本是目前主要的两个分支。两个版本之间存在着一些无法兼容的特性,使得开发者的学习成本增大,在版本选择之间也陷入难以取舍的境地。

到底TinyOS 1.x和2.x的区别如何呢?这里根据我的初步理解稍微罗列一些:

(1)TinyOS 1.x较为容易上手,架构上更为简单明了。TinyOS 2.x在1.x的架构基础上做了一定的改进,功能上要强大不少,架构上也要复杂不少。

(2)TinyOS 1.x 中的一些组件(Component)在2.x中被删除或者被新的组件取代。要从TinyOS 1.x过渡到2.x,需要一定的经验和魄力。

(3)TInyOS 1.x 中的工具链采用Java编写,需要JDK支持。TinyOS 2.x中的工具链采用Python编写。

(4)TinyOS 1.x中有一个图形化模拟工具TinyViz,该工具采用Java 编写,能够对模拟结果进行可视化展示。TinyOS 2.x中去掉了这个工具,实验参数和控制流程需要开发者编写Python脚本进行控制。

(5)其他的一些命令发生了变化,这一部分在手册中有说明。

学习的窘境

学习TinyOS是一个痛苦的过程,不是说它有多难。毕竟再难的东西,要搞懂它也只不过是时间上的问题。TinyOS难学的根本在于资料少,太少了。国内有一个专门讨论TinyOS的论坛(www.tinyosstudy.com),这个论坛上分门别类还挺全的。但是,当点开一个个帖子的时候,很少有看到回答的人。即便有,也不怎么靠谱。

学习TinyOS的第一个方法,也是自然而然的想法,看官方文档。可是,官方文档也不是想象中的那样浅显易懂、雅俗共赏的。很多地方(一般都是关键点)一笔带过,也不管你是不是适用。国内有个叫潘浩的学者出了一本书《无线传感器网络操作系统tinyos》,讲的内容是以2.x为基础的。而且,大部分内容都是对官方文档的翻译,相关章节仅仅是浅尝则止,作用也不算大。找学习资料的第二个方法就是FQ(goagent)。国外有一些资料网站打不开,必须FQ了才能正常浏览。能找到的资料也很少,基本上都是一些PPT,Introduction之类的资料,权威的资料很少。

另一个靠谱的方法就是:加入到开发者的帮助邮件列表(TinyOS help mailing list)。这里面会有很多人提问,也有开发者积极参与回答。邮件列表存档(mailing list archive)是个不错的东西,可以作为搜索目标。最后也是最无奈的方法便是,找一些写过WSN相关论文的作者,向他们发邮件请教……这个方法还不错,毕竟都曾苦逼过,知道苦逼的感觉。

版本的选择

使用TinyOS要面对的第一个问题便是:到底该选择哪个版本?TinyOS 1.x的历史比较悠久了,很多依赖工具的版本比较老,要下载这些老版本的工具包不是一件简单的事情。目前TinyOS官方网站上维护的最新版本是TinyOS 2.1.2。尽管这两个版本或许会存在很多差异,但是二者有一个最大的共同点:安装起来非常麻烦!一个简单的建议是:初学者从1.x下手。相比于2.x,1.x更容易理解,在资料上面相对于2.x上面稍微多点。

安装TinyOS 1.x和2.x是一个浩大的工程。本人成功安装过这两个版本,具备一点小小的经验。这些经验会在后面提及。现在先介绍一下本人涉及到的研究目标:Deluge分发协议。

Deluge协议

Deluge是一个镜像分发协议。那么它应用在什么样的场景下呢?我们知道一般情况下,传感器网络由若干个传感器组成,各自运行着自己的任务程序(这里的任务程序指的就是镜像image),并相互通信。这个通信过程一般会分成两类:分发和汇聚。TinyOS中自带了一些分发和汇聚协议。如前所述,Deluge就是一个典型的数据分发协议。

在某一时刻,我们需要改变传感器的工作任务时,我们要给传感器烧录新的任务程序。这样的工作量在规模较小的传感器网络中还能从容处理。当面对由大量传感器组成的大规模传感器网络时,显然已经不可能手动去更新任务程序了。

Deluge协议在这种情况下诞生了。相比于其他的如CTP协议,Deluge的优势在于能够自动分发大数据量,并且具备较好的性能。Deluge协议运行之后,自动更新传感器网络中所有节点的镜像。传感器节点在更新后重启运行新的镜像,这就是所谓的“无线传感器网络重编程”过程。

协议版本

Deluge协议在TinyOS 1.x上面有两个版本:1.0和2.0。目前用的基本上都是2.0,在网上也可以找到一本编程手册:《Deluge 2.0 Manual》。这本手册里介绍了一些编程接口,使用方法。可以看到,里面很多命令都是Java编写的。

注意,值得一提的是:在1.x系列中是从TinyOS 1.1.14及以上的版本才自带Deluge协议的。如1.1.10中是不存在这个协议的。如果硬是将TestDeluge文件夹拷贝进1.1.14以下的系统中进行编译,是不可能通过的。这是个大坑:前面在装TinyOS 1.x的时候,选择了1.1.10这个版本,等装好了之后才发现没有Deluge这个协议。于是只好删掉系统重装。

在TinyOS 2.x中的Deluge协议,移植自TinyOS 1.x平台Deluge 2.0。为什么说是“移植”呢?前面说过,TinyOS 1.x和2.x的架构是有很大差异的。移植到2.x的平台后的Deluge命名为Deluge 2T。在安装好的 TinyOS 1.x之后,在apps目录下面可以找到TestDeluge这个文件夹。下面是一些Deluge协议相关的测试程序。

怎么学习

网上关于这个协议的资料很少,还有个更致命的干扰因素:有个torrent协议也叫Deluge!所以最好不要单独搜Deluge这个关键字,否则出来的页面都是和这个torrent协议相关的。文档不多,我们剩下来的选择只有两个:(1)放弃课题,转移方向(2)阅读Deluge源代码。万不得已的情况,我们肯定是不要轻易放弃。毕竟,被这么个东西就弄得转移研究方向实在让人无法释怀。Deluge协议是使用nesc编写的,这门奇葩的语言改编自C语言。因此,在某些语法方面和C语言具备一定的相似度。因此,要阅读源代码的话,首先得对nesc这门语言有所了解。

TinyOS本身自带的组件、程序结构、组织方式等,这些东西都是必不可少的基础知识。万里长征路,这或许仅仅只是第一步。后续的文章讲述TinyOS系统的安装及Deluge协议的仿真。

TinyOS和Deluge的安装模拟(一)的更多相关文章

  1. TinyOS和Deluge的安装模拟(二)

    TinyOS的安装 TinyOS的安装是一件麻烦的事情,它不像其他的开发环境那样配置简单.要想成功安装好TinyOS,需要选择好PC操作系统,TinyOS安装文件的版本,工具链的版本…….总之,安装过 ...

  2. skyeye安装+arm-elf-gdb安装+模拟s3c44b0x+执行ucos4skyeye

    [假设你要引用.请阅读所有,这里是我的为期两天的过程只是一个记录] skyeye安装:ubuntu12.0432 llvm2.8 skyeye1.3.3 http://blog.chinaunix.n ...

  3. PISCES P4-vSwitch 安装以及一次失败的测试

    本文参考 (1)Varant Download:点我 (2)Mac上安装Git:戳我 (3)Github P4-vSwitch/Varant:点我 (4)Mac强制重新启动:戳我 实验环境: Mac ...

  4. Hadoop 2.8集群安装及配置记录

    第一部分:环境配置(含操作系统.防火墙.SSH.JAVA安装等) Hadoop 2.8集群安装模拟环境为: 主机:Hostname:Hadoop-host,IP:10.10.11.225 节点1:Ho ...

  5. 单元测试模拟-moq

    1.moq 支持 net core 2.moq 通过一个接口类型 可以产生一个新的类 3.举例 //define interface to be mocked public interface ITe ...

  6. Oracle RAC 更换存储实验

    实验环境准备: RHEL 6.5 + Oracle 11.2.0.4 RAC (2nodes) OCR和Voting Disk使用的是OCR1磁盘组,底层对应3个1G大小的共享LUN,一般冗余: DA ...

  7. 常用的Firefox浏览器插件、Chrome浏览器插件收藏

    [血的教训] 不要去下载“Firefox中国版(谋智网络)”,默认情况下会给你安装好多的莫名其妙的插件,推荐去Firefox官方下载原版. Firefox 原版官方网址: https://www.mo ...

  8. 谈谈Grunt,NPM,Gulp

    随着前端工程化的趋势,产生了越来越多的构建工具,而其中比较优秀的就是grunt,npm,gulp,今天我来说说这三者间的区别以及他们的优缺点. 相信一般前端开发者选择构建工具的时候,更多的是看个人习惯 ...

  9. spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建

    环境:win10.IDEA2016.3.maven3.3.9.git.scala 2.11.8.java1.8.0_101.sbt0.13.12 下载: #git bash中执行: git clone ...

随机推荐

  1. Java 7 jstat – JVM Statistics Monitoring Tool【翻译】

    原文地址:Java 7 jstat 本文内容 语法 参数 描述 虚拟机标识符 选项 一般选项 输出选项 示例 先发出来,然后慢慢翻译~ 语法 jstat [ generalOption | outpu ...

  2. AT&T汇编语言——工具及程序组成

    1.开发工具 在汇编语言中,用到的工具主要用下面几个: 汇编器.连接器.调试器.编译器 由于我在这里的是AT&T汇编语言.所以工具下也都是gnu下的那些. 1.1 汇编器(as) 汇编器有非常 ...

  3. eclipse android logcat 只显示自己应用程序信息的设置方法

    1 elcipse 中往往会在logcat中显示 all message ,而这里面的信息太多,根本没有办法进行区分.如图: 2 我们想显示自己项目的 logcat .下面开始设置. 3 首先点击上面 ...

  4. 转:HTML5标准与性能之四:asm.js

    HTML5标准与性能之四:asm.js Cong Liu (Intel) 于 星期五, 24/05/2013 - 01:13 提交 之前的几篇文章分别介绍了WebWorkers.Typed Array ...

  5. redhat下mysql安装与使用

    1.安装 (1)查看是否安装 yum list installed mysql* (2)查看现有安装包 yum list mysql* (3)安装mysql服务器端 yum install mysql ...

  6. webapi mvc 基础

    标题  状态  描述 WebAPI请求    http://www.cnblogs.com/babycool/p/3922738.html  Media Formatters in ASP.NET W ...

  7. WPF之DataGrid

    1.WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2.WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3.WPF 4 DataGrid 控 ...

  8. #ifdef 和 #if defined 的区别 -- 转

    #ifdef 和 #if defined 的区别在于,后者可以组成复杂的预编译条件,比如 #if defined (AAA) && defined (BBB) xxxxxxxxx #e ...

  9. 几种在Linux下查询外网IP的办法

    原文地址:http://my.oschina.net/epstar/blog/513186 Curl 纯文本格式输出: curl icanhazip.com curl ifconfig.me curl ...

  10. java攻城狮之路(Android篇)--ListView与ContentProvider

    一.ListView 1.三种Adapter构建ListView ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种 B ...