介绍

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. 100+诡异的数据集,20万Eclipse Bug、死囚遗言等

    摘要:近日,Robert Seaton整理了100多个最有趣的数据集,其中包括Jeopardy真题,死囚的最后一句话,20万个Eclipse Bug,足球比赛相关,柏拉图式的爱情,太阳系以外的行星,1 ...

  2. count有关

    1.count有两个作用:统计某个字段有值的记录数:统计结果集的记录数.2.count括号内的表达式不为null,就是统计结果集的记录数.也就是说,count(1),count(*),count(10 ...

  3. UVA 1101 To Add or to Multiply

    首先我们观察加操作和乘操作会对区间产生那些影响.加操作只会平移区间,而乘操作既能移动区间还能放大区间.因此我们不难想到,如果m>1的话乘操作是log级别的,一方面是因为区间的大小不能超过s-r, ...

  4. MYSQL INSERT INTO SELECT 不插入重复数据

    INSERT INTO `b_common_member_count` (uid) SELECT uid FROM `b_common_member` WHERE uid NOT IN (SELECT ...

  5. VirtualBox不能为虚拟电脑 Ubuntu 打开一个新任务

    今天在用Vbox中的Ubuntu系统准备测试Python代码时,Vbox报了一个错误:"不能为虚拟电脑 Ubuntu 打开一个新任务".因为之前用的时候还好好的,也不知道是不是最近 ...

  6. BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库

    介绍 通常情况下,报告需要在一个类似树的结构来显示数据.通过启用此特性在SAP BW层次结构.高级数据显示的层次结构的顶层节点.更详细的数据可以向下钻取到的层次结构中的下级节点的可视化. 考虑一个例子 ...

  7. jQuery Mobile 移动开发中的日期插件Mobiscroll使用说明

    近期在移动方面的开发,使用jQuery Mobile ,移动方面的插件不如Web 方面的插件多,选择的更少,有一些需要自己去封装,但功力尚不足啊. 日期插件JQM也提供了内置的,但样式方面不好看,只好 ...

  8. 同时大量PPPoE连接请求,攻击PPPoE服务器,导致的用户异常掉线故障分析

    前几天接一个客户电话,PPPoE下用户异常掉线,掉线后拨号困难 到达后,我首先查看PPPoE日志,发现一秒钟内有大量PADI包,浪费服务器的SESSION,同时让服务器无法处理其他用户的请求. 打开W ...

  9. 在 Visual Studio 中打开编辑 cshtml 文件时出现错误:未能完成该操作 无效指针 的解决方法

    第一步:关闭 Visual Studio: 第二步:删除 %LocalAppData%\Microsoft\VisualStudio\14.0\ComponentModelCache 下的所有文件: ...

  10. SQL SERVER 安全性体系

    主体和安全实体 在 SQL Server 2008中,“主体”就是可以访问受保护资源且能获得访问资源所需权限的任何个人.组或流程.与旧版 SQL Server 一样,可以在 Windows 中定义主体 ...