CN101916194B - 一种无线传感网节点程序的部署方法 - Google Patents
一种无线传感网节点程序的部署方法 Download PDFInfo
- Publication number
- CN101916194B CN101916194B CN 201010188806 CN201010188806A CN101916194B CN 101916194 B CN101916194 B CN 101916194B CN 201010188806 CN201010188806 CN 201010188806 CN 201010188806 A CN201010188806 A CN 201010188806A CN 101916194 B CN101916194 B CN 101916194B
- Authority
- CN
- China
- Prior art keywords
- replaceable component
- component
- source code
- nodes
- replaceable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种无线传感网节点程序的部署方法,步骤为:将应用程序区分为可替换组件和系统组件;使系统组件对可替换组件的调用方式变更为通过跳转表间接调用;将应用程序源代码和跳转表形成目标文件并链接为可执行文件;将可执行文件通过有线部署方式烧录到无线传感网所有节点中并重启所有节点;所有节点执行应用程序;用户修改可替换组件源代码;重新标注可替换组件源代码;对初次部署中使用的编译前跳转表添加表项;使可替换组件源代码和添加表项后的跳转表形成目标文件并链接为可执行文件;更新跳转表内容;修改可执行文件的可替换组件对系统组件的调用指令;将可替换组件和跳转表通过无线通信方式传输到无线传感网所有节点中并重启所有节点。
Description
技术领域
本发明涉及一种无线传感网节点(以下简称节点)程序的部署方法,特别是减少代码传输量、降低节点重启动开销和延长网络重编程生命周期的方法。
背景技术
无线传感网是一种基于无线通信的可以实现一定应用目的的新型网络,广泛应用于环境监测、目标定位等场合。无线传感网由相互通信的大量节点构成,节点上运行一定的应用程序,从而使整个网络呈现预先设定的应用功能。在无线传感网长期运行期间,节点上运行的应用程序可能由于除错、升级等原因需要进行变更。无线传感网部署环境复杂,很难将所有节点全部回收,并通过有线方式更新节点程序,因此如何通过对节点程序进行部署,是无线传感网络的重要支撑技术之一。
无线传感网节点程序的部署分为两个阶段:1)初次部署。节点程序进行初次部署时,节点中没有写入能够通过无线方式部署应用程序的代码,因此需要通过有线方式(如在电路编程ICP、在系统编程ISP等)将应用程序部署到传感网节点中。2)再次部署。初次部署的程序在节点中运行一段时间以后,由于应用程序出错、升级等原因需要进行再次部署,此时节点中的程序已经具有了可以进行应用程序无线部署的代码,因此可以通过无线通信的方式部署应用程序。这种多次部署的过程在无线传感网中也称为重编程。
TinyOS是目前主流的无线传感网操作系统之一,该系统采用nesC语言进行程序设计。nesC程序由不同的组件(components)组成,各个组件使用(uses)或者提供(provides)一个或多个接口(interface)。其中组件又分为模块(module)和配置(configure),接口又分为上层组件对下层组件的命令(command)和下层组件对上层组件的回调(event)。组件中包括了实现具体功能的源代码,配置中包括了不同组件之间的连线(wire)关系。nesC源代码通过nesC编译工具编译为c语言程序,然后通过c语言编译器(如gcc)编译为.o,最终由链接器链接为elf格式的二进制代码。
在TinyOS上,已经有一些重编程技术,如Deluge、Stream等。其中,Deluge将传感网络节点的整个代码映像进行分发,而且代码分发协议与用户程序编译在一起,在使用时需要分发大量代码,网络开销巨大;Stream通过将代码分发协议存放在单独的黄金映像(Golden Image)中,使其与用户程序分开,减少了代码传输量。上述两种重编程方法在编程结束后,都需要进行一次硬件重启,原有的路由表、邻居表等信息被重新初始化和重建,造成了时间和网络方面的开销。另外,现有的重编程技术多是将受到的代码存储到外部闪存(flash)上,这要求重编程时电源电压要高于2.7V,而目前普遍使用两节五号电池为节点供电,而这种电池在整个生命周期中,有3/4的时间低于2.7V,网络的重编程生命周期因此而严重缩短。
目前无线传感网节点硬件体系结构包括冯·诺依曼结构和哈佛结构。其中冯·诺依曼结构因为数据地址与指令地址共享同一个地址空间,因此数据存储器中存放的代码可以被直接运行,而哈佛结构因为数据地址和指令地址处于不同的地址空间,无法实现这一功能。
发明内容
本发明的目的是提供一种无线传感网节点程序的部署方法。
为实现以上目的,本发明所采取的技术方案是:该无线传感网节点程序的部署方法主要包括以下步骤:
(1)对无线传感网应用程序进行初次部署,包括:
1)使用记号对无线传感网的应用程序的源代码进行标注,以将所述应用程序区分为可替换组件和系统组件;
2)对系统组件的源代码进行修改,以使系统组件对可替换组件的调用方式变更为通过跳转表进行间接调用;
3)将系统组件和可替换组件的源代码和所述跳转表进行编译以形成二进制目标文件;
4)将步骤3)中编译生成的二进制目标文件链接为可执行文件,在该链接过程中将跳转表的二进制代码段、可替换组件的数据段和系统组件的数据段重定位到内存中,将可替换组件的二进制代码段定位到程序存储器中;
5)将所述可执行文件通过有线的部署方式烧录到无线传感网的所有节点中并以硬件重启方式重新启动所有节点;
(2)无线传感网的所有节点执行应用程序;
(3)用户对可替换组件的源代码进行修改;
(4)对无线传感网应用程序进行再次部署,包括:
i)对因用户修改而发生变化的可替换组件源代码进行重新标注;
ii)根据可替换组件源代码的变化情况,对初次部署中使用的编译前的跳转表添加表项;
iii)对可替换组件的源代码和添加表项后的跳转表进行编译以形成二进制目标文件;
iv)将步骤iii)中编译生成的二进制目标文件链接为可执行文件;
v)根据可替换组件在步骤iv)所述的可执行文件中的地址对跳转表的内容进行更新;并根据初次部署的步骤4)中所述的可执行文件中系统组件的地址,将步骤iv)所述的可执行文件中的可替换组件对系统组件的调用指令进行修改;
vi)将可替换组件和跳转表通过无线通信的方式传输到无线传感网的所有节点中并以软件重启方式重新启动所有节点。
进一步地,本发明在所述再次部署的步骤vi)中,以软件重启方式重新启动所有节点按以下步骤进行:
a)停止当前应用程序的运行;
b)初始化可替换组件的数据段;
c)初始化可替换组件的跳转表;
d)跳转到可替换组件的入口函数,以启动可替换组件的运行。
与现有技术相比,本发明的有益效果是:该方法将无线传感网节点应用程序划分为可替换组件和系统组件,通过在更新时只传输可替换组件与跳转表,从而减少代码传输量,通过将可替换组件定位在内存中运行,避免擦写外部flash,从而延长网络重编程生命周期,通过进行软件重启,降低节点重启开销。
附图说明
图1是本发明无线传感网络节点程序的部署方法工作流程图。
具体实施方式
本发明针对的是具有冯·诺依曼体系结构的TelosB平台。以下以初次部署一个典型的应用程序Blink(以下也称为“基础版本”),再次部署修改后的程序CntToLeds(以下也称为“更新版本”)为例进一步说明本发明,具体步骤如下:
(1)对无线传感网应用程序Blink(即基础版本)进行初次部署,包括以下步骤:
(1.1)将基础版本的源代码划分为可替换组件和系统组件,在源代码中用注解(annotation)进行标记,其中用replaceable()标记可替换组件,用system()标记系统组件。具体地,Blink的功能是定期闪烁一个发光二极管,其可替换组件是Boot.booted()和Timer.fired()两个函数,所以将这两个函数标记为replaceable()。类似的,将Boot、Timer、Leds三个接口标记为system()。
(1.2)在应用程序中设置跳转表,在基础版本中每个表项对应一个可替换组件在flash上的入口,由此,通过对系统组件的源代码进行修改,使系统组件对可替换组件的引用通过跳转表进行间接调用。对于Blink程序,跳转表包括两个表项,分别指向Boot.booted()和Timer.fired()这两个函数。
(1.3)通过noninline关键字防止编译器将可替换组件(即Boot.booted()和Timer.fired()这两个函数)进行内联优化,通过extern防止编译器将系统组件(即Leds接口)作为死代码去除。
(1.4)在应用程序中设置一组虚假函数(dummy function),该组虚假函数具有与可替换组件相同的函数原型(function prototype)和空函数体。在Blink程序中的可替换组件即为Boot.booted()和Timer.fired()两个函数。
(1.5)编译系统组件和可替换组件的源代码和步骤(1.2)所述跳转表,生成二进制目标文件。
(1.6)将步骤(1.5)编译生成的目标文件链接成可执行文件,包括两个阶段:
(1.6.1)根据步骤(1.5)编译生成的目标文件及以下公式(1)计算可执行文件中各个段的临时地址,并生成第一阶段的可执行文件,其中START是各段的起始地址,SIZE是各段的长度,END是各段的末地址,.jmptab是跳转表,.vbss是可替换组件无初值数据段,.vdata是可替换组件有初值数据段,.vtext是可替换组件代码段,RAM是数据存储器内存,flash是程序存储器闪存。其中各段的长度在编译过程完成后就可以全部确定下来。例如,在Telosb平台上,SIZE.vectors是固定值,为32;其他段的长度也可以在编译完成后确定下来。
START.vbss=ENDRAM-SIZE.vbss
START.vdata=START.vbss-SIZE.vdata (1)
START.jmptab=ENDflash-SIZE.vectors-SIZE.jmptab
START.vtext=START.jmptab-SIZE.vtext+.vdata
(1.6.2)根据步骤(1.6.1)生成的第一阶段可执行文件及公式(2)计算可执行文件中各个段的最终地址,并生成第二阶段的可执行文件,将跳转表的二进制代码段以及可替换组件的数据段重定位到内存中。公式(2)中,START、SIZE的含义与公式(1)中相同,.bss是系统组件的无初值数据段,.data是系统组件的有初值数据段,golden.vtext是flash上的基础版本可替换组件的代码段,golden.jmptab是基础版本跳转表在flash上的备份。同时为了以后部署更新版本,计算更新版本可替换组件的代码段所在的起始地址,即公式(2)中的STARTupdated.vtext。
START.jmptab=STARTRAM
START.data=START.jmptab+SIZE.jmptab
START.bss=START.data+SIZE.data
START.vdata=START.bss+SIZE.bss (2)
START.vbss=START.vdata+SIZE.vdata
(1.7)将基础版本的可执行代码通过计算机和节点的有线通信烧录到节点上。
(1.8)节点进行重启并开始运行,包括以下步骤:
(1.8.1)节点触发复位中断,进入复位中断处理函数;
(1.8.2)复位中断处理函数调用初始化函数开始执行内存初始化;
(1.8.3)将堆栈指针初始化到内存末地址;
(1.8.4)将跳转表golden.jmptab拷贝到START.jmptab地址处;
(1.8.5)将.data段的初始值拷贝到内存中START.data起始的位置;
(1.8.6)将.bss段用数据0x00填充;
(1.8.7)将.vdata段的初始值拷贝到内存中START.vdata起始的位置;
(1.8.8)将.vbss段用数据0x00填充;
(1.8.9)跳转到main()函数开始执行。
(2)无线传感网执行应用程序,即基础版本Blink,开始周期闪烁一个发光二极管。
(3)基础版本的可替换组件的源代码因用户的操作而被修改,即Blink程序的Boot.booted()和Timer.fired()两个函数被修改。修改后的程序使用三个发光二极管来显示一串递增的整数序列,程序名为CntToLeds(即更新版本)。
(4)用户使用更新版本(即CntToLeds程序)进行再次部署,包括以下步骤:
(4.1)对因用户修改而发生变化的可替换组件源代码进行重新标注。在本例中可替换组件仍是Boot.booted()和Timer.fired()两个函数,所以仍标注这两个函数为可替换组件。
(4.2)根据可替换组件源代码的变化情况,对初次部署中使用的编译前的跳转表添加表项。
(4.3)对步骤(3)修改后的可替换组件的源代码和添加表项后的跳转表进行编译以形成二进制目标文件并链接为可执行文件。
(4.4)将步骤(4.3)生成的可执行文件可替换组件对系统组件的引用(可替换组件即为Boot.booted()和Timer.fired()两个函数),按照步骤(1.6.1)生成的基础版本可执行文件中flash上相应函数的地址进行重定位。
(4.5)将步骤(4.3)生成的可执行文件中跳转表中可替换组件的函数地址,按照updated.vtext段(即更新版本可替换组件的代码段)的起始地址与这些函数在更新版本代码段中的偏移地址的和进行更新。
(4.6)通过基站和节点间的无线通信将代码分发给节点,包括以下步骤:
(4.6.1)基站向节点发送一个数据包,其中包括启动再次部署的指令;
(4.6.2)节点收到步骤(4.6.1)发出的数据包,将跳转表的内容修改为虚假函数的入口,从而停止可替换组件的运行;
(4.6.3)基站将更新版本的可替换组件和跳转表的可执行文件,按照无线传感网通信协议的要求划分为数据包,将数据包逐个发送给节点。这里通过无线方式传输的只是更新版本的可替换组件与跳转表的可执行文件,而不是整个更新版本的可执行文件,大大减少了代码传输量;
(4.6.4)节点在内存中将接收到的数据包组装为更新版本的可替换组件和跳转表的可执行文件,并记录接收和组装是否成功。
(4.7)对于更新版本(即CntToLeds程序),进行软件重启,包括以下步骤:
(4.7.1)将基础版本.vdata段的初始值拷贝到内存中START.vdata起始的位置;
(4.7.2)将.vbss段用数据0x00填充;
(4.7.3)写跳转表,如果步骤(4.6.4)成功接受了全部可执行文件,则将更新版本的跳转表写入.jmptab段,否则将golden.jmptab段的内容写入.jmptab段;
(4.7.4)跳转到main()函数开始执行。至此,软件重启完成,在整个软件重启过程中,需要读写的只是节点的内存,不需要读写flash,大大节省了能量消耗,延长了节点的可用时间。
Claims (2)
1.一种无线传感网节点程序的部署方法,其特征在于包括以下步骤:
(1)对无线传感网应用程序进行初次部署,包括:
1)使用记号对无线传感网的应用程序的源代码进行标注,以将所述应用程序区分为可替换组件和系统组件;
2)对系统组件的源代码进行修改,以使系统组件对可替换组件的调用方式变更为通过跳转表进行间接调用;
3)将系统组件和可替换组件的源代码和所述跳转表进行编译以形成二进制目标文件;
4)将步骤3)中编译生成的二进制目标文件链接为可执行文件,在该链接过程中将跳转表的二进制代码段、可替换组件的数据段和系统组件的数据段重定位到内存中,将可替换组件的二进制代码段定位到程序存储器中;
5)将所述可执行文件通过有线的部署方式烧录到无线传感网的所有节点中并以硬件重启方式重新启动所有节点;
(2)无线传感网的所有节点执行应用程序;
(3)用户对可替换组件的源代码进行修改;
(4)对无线传感网应用程序进行再次部署,包括:
i)对因用户修改而发生变化的可替换组件源代码进行重新标注;
ii)根据可替换组件源代码的变化情况,对初次部署中使用的编译前的跳转表添加表项;
iii)对可替换组件的源代码和添加表项后的跳转表进行编译以形成二进制目标文件;
iv)将步骤iii)中编译生成的二进制目标文件链接为可执行文件;
v)根据可替换组件在步骤iv)所述的可执行文件中的地址对跳转表的内容进行更新;并根据初次部署的步骤4)中所述的可执行文件中系统组件的地址,将步骤iv)所述的可执行文件中的可替换组件对系统组件的调用指令进行修改;
vi)将可替换组件和跳转表通过无线通信的方式传输到无线传感网的所有节点中并以软件重启方式重新启动所有节点。
2.根据权利要求1所述的一种无线传感网节点程序的部署方法,其特征在于在所述再次部署的步骤vi)中,以软件重启方式重新启动所有节点按以下步骤进行:
a)停止当前应用程序的运行;
b)初始化可替换组件的数据段;
c)初始化可替换组件的跳转表;
d)跳转到可替换组件的入口函数,以启动可替换组件的运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010188806 CN101916194B (zh) | 2010-06-01 | 2010-06-01 | 一种无线传感网节点程序的部署方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010188806 CN101916194B (zh) | 2010-06-01 | 2010-06-01 | 一种无线传感网节点程序的部署方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101916194A CN101916194A (zh) | 2010-12-15 |
CN101916194B true CN101916194B (zh) | 2013-06-12 |
Family
ID=43323711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010188806 Expired - Fee Related CN101916194B (zh) | 2010-06-01 | 2010-06-01 | 一种无线传感网节点程序的部署方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101916194B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622213A (zh) * | 2011-01-30 | 2012-08-01 | 上海三旗通信科技股份有限公司 | 一种生成一键升级工具系统及制作方法 |
US8806469B2 (en) * | 2011-02-22 | 2014-08-12 | International Business Machines Corporation | Runtime code replacement |
CN103024777B (zh) * | 2012-11-15 | 2016-07-06 | 无锡赛思汇智科技有限公司 | 一种非入侵式的无线传感器网络调试装置及调试方法 |
US9342285B2 (en) | 2012-11-30 | 2016-05-17 | Huawei Technologies Co., Ltd. | Method and apparatus for detecting code change |
CN103077062B (zh) * | 2012-11-30 | 2016-08-03 | 华为技术有限公司 | 一种代码改动的检测方法和装置 |
CN105094784B (zh) * | 2014-05-20 | 2019-09-17 | 上海新跃仪表厂 | 基于sram的间址跳转模式的在轨编程方法及装置 |
CN105740038B (zh) * | 2016-02-02 | 2019-04-23 | 浙江工业大学 | 一种面向物联网重编程的存储优化方法 |
CN108287727A (zh) * | 2017-12-19 | 2018-07-17 | 北京趣拿软件科技有限公司 | 组件的调度方法和装置 |
CN109067713A (zh) * | 2018-07-17 | 2018-12-21 | 北京元心科技有限公司 | 软件安全防护方法、装置、电子设备及计算机存储介质 |
CN108875320B (zh) * | 2018-07-17 | 2021-10-08 | 北京元心科技有限公司 | 软件安全防护方法、装置、电子设备及计算机存储介质 |
CN114237727B (zh) * | 2021-12-21 | 2024-05-14 | 深圳市有方科技股份有限公司 | 驱动加载方法、装置、计算机设备和存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5193191A (en) * | 1989-06-30 | 1993-03-09 | Digital Equipment Corporation | Incremental linking in source-code development system |
US6370686B1 (en) * | 1998-09-21 | 2002-04-09 | Microsoft Corporation | Method for categorizing and installing selected software components |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
US20050204351A1 (en) * | 2002-11-18 | 2005-09-15 | James Jiang | Dynamic addressing (DA) using a centralized DA Manager |
US7089270B2 (en) * | 2003-06-20 | 2006-08-08 | Innopath Software | Processing software images for use in generating difference files |
US20070132774A1 (en) * | 2005-12-01 | 2007-06-14 | Samsung Electronics Co., Ltd. | System and method for a patch minimization tool |
US7735075B2 (en) * | 2005-12-01 | 2010-06-08 | Samsung Electronics Co., Ltd. | System and method for a pseudo dynamic link library (DLL) linker for a monolithic image in a wireless device |
-
2010
- 2010-06-01 CN CN 201010188806 patent/CN101916194B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101916194A (zh) | 2010-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101916194B (zh) | 一种无线传感网节点程序的部署方法 | |
Dong et al. | Elon: enabling efficient and long-term reprogramming for wireless sensor networks | |
Koshy et al. | Remote incremental linking for energy-efficient reprogramming of sensor networks | |
Reijers et al. | Efficient code distribution in wireless sensor networks | |
CN103744709B (zh) | 补丁加载方法及装置 | |
Panta et al. | Efficient incremental code update for sensor networks | |
Shafi et al. | No-reboot and zero-flash over-the-air programming for wireless sensor networks | |
CN101963915B (zh) | 一种编译的构建方法及系统 | |
Panta et al. | Zephyr: Efficient incremental reprogramming of sensor nodes using function call indirections and difference computation | |
CN105704234A (zh) | 智能设备的控制方法及装置 | |
CN106371825A (zh) | 一种移动端应用界面表单动态生成方法及装置 | |
CN103475687A (zh) | 用于下载网站数据的分布式方法和系统 | |
CN101937356B (zh) | 一种编译WebKit浏览器的方法及装置 | |
CN104820586A (zh) | 一种航天器嵌入式软件在轨维护方法 | |
CN104133667A (zh) | 实现人工智能行为的方法、装置及人工智能编辑器 | |
CN101243412A (zh) | 用于安全检查模块中的可执行应用程序的系统、方法和计算机程序产品 | |
CN102065411B (zh) | 无线传感器网络的动态更新方法 | |
CN103645888B (zh) | 一种自动构建操作系统的系统及方法 | |
Bocchino et al. | Pyfuns: A python framework for ubiquitous networked sensors | |
CN106201625A (zh) | 一种软件版本更新方法、更新装置及其电子设备 | |
CN105446789A (zh) | 一种内置应用程序到安卓系统的方法及装置 | |
CN104199661A (zh) | 一种面向mc1321x的无线传感器网络wsn重编程方法 | |
CN107544813B (zh) | 一种静态库配置的切换方法和系统 | |
US20080040705A1 (en) | Method for building software project | |
CN103049300B (zh) | C和c++代码在支持flash的web平台上运行的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130612 Termination date: 20140601 |