TinyOS和Deluge的安装模拟(一)
介绍
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的安装模拟(一)的更多相关文章
- TinyOS和Deluge的安装模拟(二)
TinyOS的安装 TinyOS的安装是一件麻烦的事情,它不像其他的开发环境那样配置简单.要想成功安装好TinyOS,需要选择好PC操作系统,TinyOS安装文件的版本,工具链的版本…….总之,安装过 ...
- skyeye安装+arm-elf-gdb安装+模拟s3c44b0x+执行ucos4skyeye
[假设你要引用.请阅读所有,这里是我的为期两天的过程只是一个记录] skyeye安装:ubuntu12.0432 llvm2.8 skyeye1.3.3 http://blog.chinaunix.n ...
- PISCES P4-vSwitch 安装以及一次失败的测试
本文参考 (1)Varant Download:点我 (2)Mac上安装Git:戳我 (3)Github P4-vSwitch/Varant:点我 (4)Mac强制重新启动:戳我 实验环境: Mac ...
- Hadoop 2.8集群安装及配置记录
第一部分:环境配置(含操作系统.防火墙.SSH.JAVA安装等) Hadoop 2.8集群安装模拟环境为: 主机:Hostname:Hadoop-host,IP:10.10.11.225 节点1:Ho ...
- 单元测试模拟-moq
1.moq 支持 net core 2.moq 通过一个接口类型 可以产生一个新的类 3.举例 //define interface to be mocked public interface ITe ...
- Oracle RAC 更换存储实验
实验环境准备: RHEL 6.5 + Oracle 11.2.0.4 RAC (2nodes) OCR和Voting Disk使用的是OCR1磁盘组,底层对应3个1G大小的共享LUN,一般冗余: DA ...
- 常用的Firefox浏览器插件、Chrome浏览器插件收藏
[血的教训] 不要去下载“Firefox中国版(谋智网络)”,默认情况下会给你安装好多的莫名其妙的插件,推荐去Firefox官方下载原版. Firefox 原版官方网址: https://www.mo ...
- 谈谈Grunt,NPM,Gulp
随着前端工程化的趋势,产生了越来越多的构建工具,而其中比较优秀的就是grunt,npm,gulp,今天我来说说这三者间的区别以及他们的优缺点. 相信一般前端开发者选择构建工具的时候,更多的是看个人习惯 ...
- 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 ...
随机推荐
- Intellij IDEA 配置Subversion插件
在使用Intellij的过程中,突然发现svn不起效了,在VCS–>Checkout from Version Control中也未发现Subversion这一项.如下图: 一.原因查找 经过分 ...
- 便宜有好货:Oracle免费的便捷Web应用开发框架
APEX 总体来说,APEX是我见过最便捷最高效的开发框架,用起来比PHP还舒服.上手简单,学习成本极低,曾经有个做行政的小女生,在我指导下两天就可以开发出简单的审批管理站点.如果企业要做一些内部应用 ...
- c# 小数取整
向上取整 math.ceiling() = math.ceiling( math.ceiling( 向下取整 math.) = math. math. C#取整函数实例应用详解 C#取整函数的相关使用 ...
- 39. Volume Rendering Techniques
Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, D ...
- ABAP报表中负值展示问题的处理方法
现象描述 在使用ABAP报表展示数据的时候会涉及到金额类字段,在手动计算金额的时候,有时会发生存在负值而无法正常展示的情况. 处理过程 ABAP报表的数据展示常用的方法有两种,分别是表控制和ALV ...
- 【转帖】自助式BI的崛起:三张图看清商业智能和大数据分析市场趋势
自助式BI的崛起:三张图看清商业智能和大数据分析市场趋势 大数据时代,商业智能和数据分析软件市场正在经历一场巨变,那些强调易用性的,人人都能使用的分析软件正在取代传统复杂的商业智能和分析软件成为市场的 ...
- Kafka 消息监控 - Kafka Eagle
1.概述 在开发工作当中,消费 Kafka 集群中的消息时,数据的变动是我们所关心的,当业务并不复杂的前提下,我们可以使用 Kafka 提供的命令工具,配合 Zookeeper 客户端工具,可以很方便 ...
- android一键分享功能不使用任何第三方sdk
在android中有自带的一键分享功能,不过它会把所有带分享的应用都找出来,如果我们只需要一些常见的分享应用,该如何做呢? 下面看我的效果图(横屏和竖屏自动适配): 接下来看我的调用(支持图片和文字分 ...
- mysql 显示行号,以及分组排序
建表: CREATE TABLE `my_tb` ( `id` ) NOT NULL AUTO_INCREMENT, `parent_code` ) DEFAULT NULL, `code` ) DE ...
- 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息
如何处理64位SQL访问32位SQL执行脚本语句问题 链接服务器"SERVER_YBJK"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 &qu ...