datasheet
超过460,000+ 应用技术资源下载
pdf

基于ARM与Linuz的无线传感器网络节点设计与实现

  • 1星
  • 日期: 2014-03-05
  • 大小: 5.7MB
  • 所需积分:1分
  • 下载次数:2
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 无线传感器网络网络网络节点设计

无线传感器网络是一项融合计算机技术、半导体技术、通信技术、传感器技术等的新兴技术,它在军事、工业、农业、建筑、医疗、交通等各个领域均有广阔的应用前景。无线传感器网络中包含众多关键技术,因此需要一种功能强大的节点支持网络的正常运行,为用户提供多功能的服务。 目前无线传感器网络节点的硬件平台绝大部分是基于单片机实现的,它们具有有限的存储和处理能力,只能完成简单的传感器数据采集、处理和转发功能。有少部分硬件平台采用32位的处理器,但是这些平台的价格昂贵或者灵活性较差,不利于无线传感器网络的实验研究及应用的拓展。 基于上述研究现状,本文设计并实现一个基于32位ARM处理器和Linux操作系统的无线传感器网络节点。该节点具有强大的存储、处理能力,而且成本和功耗较低,能够配合不同类型的传感器节点使用,便于二次开发,对于无线传感器网络各种理论和算法的验证及实现各种应用有重大意义。论文主要分为三部分: 1、无线传感器网络节点硬件设计:在分析现有硬件平台缺点的基础上,设计本文的无线传感器网络节点硬件结构,进行硬件选型并分析各个模块的结构和硬件原理,搭建好硬件平台。 2、无线传感器网络节点软件实现:根据设计的无线传感器网络节点硬件结构分析软件应包含的内容及层次结构。由于Linux支持多种体系结构、开源等优点,因此本文选择其作为无线传感器网络节点的操作系统,并分层次地实现基于Linux的整个软件系统,包括引导程序、内核、根文件系统、驱动程序。 3、无线传感器网络节点的应用:在1、2部分完成的基本功能上需要扩充具体的应用程序才能将该节点应用到实际环境中。这部分首先分析本文所实现的节点的几种典型应用场景,然后在该节点上实现几种常用的服务程序,最后设计并实现质心定位应用案例,展示了在此节点上可方便地实现功能扩充和特定应用开发,同时也说明了该节点强大的功能。

西南交通大学 硕士学位论文 基于ARM与Linux的无线传感器网络节点设计与实现 姓名:周应宾 申请学位级别:硕士 专业:通信与信息系统 指导教师:陈红 20090501 西南交通大学硕士研究生学位论文 摘要 第1页 无线传感器网络是一项融合计算机技术、半导体技术、通信技术、传感 器技术等的新兴技术,它在军事、工业、农业、建筑、医疗、交通等各个领 域均有广阔的应用前景。无线传感器网络中包含众多关键技术,因此需要一 种功能强大的节点支持网络的正常运行,为用户提供多功能的服务。 目前无线传感器网络节点的硬件平台绝大部分是基于单片机实现的,它 们具有有限的存储和处理能力,只能完成简单的传感器数据采集、处理和转 发功能。有少部分硬件平台采用32位的处理器,但是这些平台的价格昂贵或 者灵活性较差,不利于无线传感器网络的实验研究及应用的拓展。 基于上述研究现状,本文设计并实现一个基于32位ARM处理器和Linux 操作系统的无线传感器网络节点。该节点具有强大的存储、处理能力,而且 成本和功耗较低,能够配合不同类型的传感器节点使用,便于二次开发,对 于无线传感器网络各种理论和算法的验证及实现各种应用有重大意义。论文 主要分为三部分: 1、无线传感器网络节点硬件设计:在分析现有硬件平台缺点的基础上, 设计本文的无线传感器网络节点硬件结构,进行硬件选型并分析各个模块的 结构和硬件原理,搭建好硬件平台。 2、无线传感器网络节点软件实现:根据设计的无线传感器网络节点硬件 结构分析软件应包含的内容及层次结构。由于Linux支持多种体系结构、开 源等优点,因此本文选择其作为无线传感器网络节点的操作系统,并分层次 地实现基于Linux的整个软件系统,包括引导程序、内核、根文件系统、驱 动程序。 3、无线传感器网络节点的应用:在1、2部分完成的基本功能上需要扩 充具体的应用程序才能将该节点应用到实际环境中。这部分首先分析本文所 实现的节点的几种典型应用场景,然后在该节点上实现几种常用的服务程序, 最后设计并实现质心定位应用案例,展示了在此节点上可方便地实现功能扩 充和特定应用开发,同时也说明了该节点强大的功能。 关键词无线传感器网络;节点;ARM;Linux;质心定位 西南交通大学硕士研究生学位论文 Abstract 第1I页 Wireless Sensor Networks(WSN)is a new developing technology which is all integration of computer technology, semiconductor technology, communications technology,sensor technology and SO 011.It has wide application prospect in the military,industry,agriculture,construction,medical,transportation and other fields.Wireless Sensor Networks includes many key technologies,SO a powerful network node is needed to support the normal operation and provide users with multi.functional services. At present,most hardware platforms of Wireless Sensor Networks node are based on Microcontrollers which have limited storage and processing capacity. These nodes Can only complete simple data acquisition,processing and forwarding. There are still a small number of hardware platforms using 32-bit processors,but they are expensive or have bad flexibility,SO they are not conducive to the study and expansion of Wireless Sensor Networks. Based on the above research,the thesis designed and implemented a 32-bit ARM processor and Linux operating system based Wireless Sensor Networks node.The node has a great storage,processing power,and relatively lower cost and power consumption,to meet the needs of different types of sensor nodes used for the secondary development for a variety of theories and algorithms validation and implementation of a wide range of applications.The thesis is mainly divided into three parts: 、 1.Wireless Sensor Networks node hardware design:After the analysis of the shortcomings of the existing hardware platform,hardware architecture of Wireless Sensor Networks node of this thesis is designed.Then the thesis describes hardware selection and analysis of the structure of each module and hardware principle. 2.Wireless Sensor Networks node software implementation:In accordance with the design of Wireless Sensor Networks node hardware structure,the content and hierarchical structure analysis of software is described.Because Linux 西南交通大学硕士研究生学位论文 第ⅡI页 supports a wide range of architecture and it is 0pell source,so it is chosen as the operating system used in this thesis.Then different levels of the entire Linux-based software system ale implemented,including bootloader,kemel,root file system,drivers. 3.Wireless Sensor Networks node application:The basic function of the Wireless Sensor Networks node is accomplished in part 1 and part 2.But some specific applications should be added to satisfy the actual environment.At first several typical application scenario of the node are analysed.Then several commonly used applications are introduced.At last a centroid location application is designed to demonstrate the functionality of the node implemented in this thesis. Key words:Wireless Sensor Networks;Node:ARM;Linux;Centroid Location 西曲南交爻通大学 莩 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学 校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查 阅和借阅。本人授权西南交通大学可以将本论文的全部或部分内容编入有关 数据库进行检索,可以采用影印、缩印或扫描等复印手段保存和汇编本学位 论文。 本学位论文属于 1.保密口,在 年解密后适用本授权书; 2.不保密d使用本授权书。 (请在以上方框内打“4") 学位论文作者签名:夕虱弘虽 日期:妒7.岁.7多 J 指导老师签名:叩屯名k 日期: 如口罗.f,f岁 西南交通大学学位论文创新性声明 本人郑重声明:所呈交的学位论文,是在导师的指导下独立进行的研究 工作所得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个 人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集 体,均已在文中作了明确的说明。本人完全意识到本声明的法律结果由本人 承担。 本学位论文的主要创新点如下: 本文在研究无线传感器网络对节点的要求,以及现有无线传感器网络节 点软硬件平台优缺点的基础上,设计了一个通用的无线传感器网络节点。 1.文中设计的节点将无线通信部分与数据处理部分分开。无线通信部 分可采用现有传感器节点,兼容性强,通用性高。数据处理部分采 用功能强大但价格相对较低的32位ARM处理器,可靠性高,接口 丰富,将节点的处理和存储能力提高到一个新的等级。文中还设计 了一种串口通信协议,用于无线通信部分与数据处理部分之间的通 ^- 儒o . 2.为了屏蔽对硬件结构的依赖,选择了可支持多种硬件体系结构的 Linux操作系统。为了实现完整、通用稳定的软件平台,文中完成以 下工作:实现了Bootloader与Linux内核移植、根文件系统的建立以 及设备驱动程序的开发。为节点搭建了通用、强大、可移植性强、 便于二次开发的软件平台。 3.文中实现的节点功能强大,可以作为无线传感器网络中功能强大的 关键节点,如分簇无线传感器网络的簇头节点、网关节点和服务器 节点。为了便于二次开发,文中实现了Linux操作系统上的常用用户 程序:数据库,WEB服务器,FTP服务器和SSH工具包。为节点上 功能强大的应用程序的实现奠定了基础。 4.此外,文中在节点上实现了传感器网络最基本的应用案例:节点定 位。实验结果表明,节点正常运行,功能强大且可靠性高,达到了 预期目标。 闫趣矸川了 西南交通大学硕士研究生学位论文 第1章绪论 第i页 1.1课题研究背景 随着半导体技术、微系统技术、计算机技术、通信技术等的飞速发展, 20世纪90年代末在美国发展了现代意义的无线传感器网络(Wireless Sensor Networks。wsN)技术。后来,美国商业周刊和MIT技术评论在预测未来技 术发展的报告中,分别将无线传感器网络列为21世纪最有影响的21项技术 和改变世界的10大技术之一。无线传感器网络的应用前景非常广阔,能够广 泛用于军事、环境监测和预报、健康护理、智能家居、建筑物状态监控、复 杂机械监控、城市交通、空间探索、大型车间和仓库管理,以及机场、大型 工业园区的安全监测等领域。随着传感器网络的深入研究和广泛应用,传感 器网络逐渐深入到人类生活的各个领域11】。因此国内外各大公司和科研机构 都纷纷参与到无线传感器网络的研究当中,并且出现了许多相关的软硬件产 品和实际应用案例。 典型的无线传感器网络体系结构如图1.1所示。网络中的节点统称为无 线传感器网络节点,按照功能划分为三类:传感器节点(SensorNode)、网关 节点(Gateway Node,又称基站、汇聚节点、Sink节点)和管理节点(Management Node)[11。 图1.1无线传感器网络体系结构 西南交通大学硕士研究生学位论文 第2页 传感器节点部署于监测区域中,负责监测区域内的信息采集,节点之间 通过某种组网方式构成网络,将采集到的数据以多跳的方式发送到网关节点。 部分传感器节点具有路由功能,能够转发其他传感器节点的数据,在图1.1 中将这些节点称为路由传感器节点,其他传感器节点称为普通传感器节点。 普通传感器节点功能简单,通常是一个微型的嵌入式系统,其处理能力、存 储能力、通信能力较弱,一般采用电池供电。而路由传感器节点需要具有路 由计算和数据转发功能,因此需要较强的处理、存储和通信能力。 网关节点是无线传感器网络中的关键节点,功能强大,需要接收、处理 大量采集到的数据,并将数据通过其他网络(如Intemet、GPRS、WLAN) 发送到管理节点。 管理节点负责数据的分析和显示,用户可以利用这些数据了解监测区域 的情况,或者控制监测区域中的节点。管理节点一般是通用PC机或者其他手 持终端,如PDA。 无线传感器网络是一项复杂的网络技术,涉及到许多关键技术,主要分 为通信协议、管理、应用支撑技术三个方面【2】【3】。通信协议主要有物理层、数 据链路层、网络层等;管理主要包括能源管理、拓扑管理、网络管理、QOS 支持与安全等;应用支撑技术则包括时间同步、定位技术、数据融合、应用 服务接口等。因此,在无线传感器网络广阔的应用前景下,除了无线传感器 网络节点的硬件之外,节点中需要实现的软件也非常复杂。 1.2国内外研究现状 无线传感器网络中涉及到众多的软硬件技术,在学术领域和应用领域都 开展了大量的讨论、研究和设计工作,其中涌现出许多优秀的研究成果,主 要涉及硬件平台、操作系统、协议栈等几方面。 1.2.1硬件平台 在无线传感器网络中主要涉及两类硬件平台:传感器节点、网关节点。 传感器节点主要分为四个部分:处理器模块,通信模块(主要是射频芯片)、 传感器模块和电源模块。网关节点主要包括处理器模块、网内通信模块(与 西南交通大学硕士研究生学位论文 第3页 传感器节点通信)和网外通信内模块(与其他网络通信)。目前,传感器节 点的处理器主要采用ATMEL AVR系列和TI MSP430系列单片机,部分节点 使用ARM处理器(如Imote2采用Intel Xscale PXA271);射频芯片主要采 用TI CC2420 ZigBee芯片,也有使用CCl000、nRF905等其他射频芯片的; 传感器模块根据具体应用的不同,差异很大。网关节点则主要是有不同类型 的网内通信模块和网外通信模块以支持不同类型的传感器节点和其他网络。 CrossBow致力于无线传感器网络节点软硬件平台的设计和开发,是业内 影响力较大的公司之一。该公司的硬件产品主要包括Imote平台(包括 Imote2.IPR2400,ITS400,IIB2400),处理器/射频模块(包括IRIS、IRIS OEM、 MicaZ、MicaZ OEM、TELOSB<MCS410),传感器板(包括MTS420/400、 MTS310/300、MDAl00、MDA300、MDA320),网关节点(MIB510、MIB520、 MIB600、Stargate)【4】【5】o 此外,Ember、Jennic、中科院等也都开发了各自的硬件平台,如中科院 的GAINZ节点。 ’ 文献[6]实现了基于PXA270和Linux的汇聚节点,节点包括串12/以太网 口/USB 13/CFII口和与传感器节点(如Mica2/Micaz等)相连的DB51接口。 文献[7]实现了基于S3C2410、nRF905与Linux的嵌入式网关节点。 文献[8]采用¥3C2410和Windows CE实现了Zigbee无线通信节点,主要 包括以太网接El/zigbee无线通信模块和人机接口,功能比较完善。 1.2.2操作系统 目前,嵌入式操作系统的种类较多,其中比较流行的有uC/OS II、Linux、 eCos、Windows CE、VxWorks、QrCX等。这些嵌入式操作系统在开放性、实 用性以及性能等方面各有千秋,其中Linux是受众多开发者和用户偏爱的一 种操作系统。 也有很多针对无线传感器网络特点而开发的专用操作系统,如TinyOS、 MANTIS OS、SOS、MagnetOS、SenOS、PEEROS、AmbitentRT、Bertha等, 它们的结构大致可以分为组件结构、虚拟机、层次结构、状态机、函数库等 几种【9】o TinyOS[10】是组件结构的系统;科罗拉多大学(Colorado University) 的MANTIS OS[11】主要突出动态重编程的特性;加州大学洛杉矶分校 西南交通大学硕士研究生学位论文 第4页 (University of California,Los Angeles)的SOS[12】采用动态重编程的思想, 实现单个节点动态装卸代码模块;康奈尔大学(Comell University)的 MagnetOS[13】采用虚拟机的思想,应用程序具有动态性;汉城国立大学(Seoul National University)的SenOS[14】是一个基于有限状态机模型的操作系统,易 于扩展;EYES研究项目的PEEROS[15】是一个采用了基于EDF实时调度算法 的轻量级版本EDFI调度算法;Ambient Systems的AmbientRTtl6]实现以数据 为中心的结构,采用实时调度,运行时的重配置。 文献[17】在分析无线传感器网络和其节点的基础上,主要分析了无线传感 器网络节点操作系统TinyOS的组件模型、通信模型、能量管理机制、事件驱 动机制、调度策略和编程语言等,重点分析nesC语言的编译过程,完成nesC 语言和TmyOS的移植;同时改进了TinyOS的调度机制。文献【1 8]、[19]分别 将TmyOS移植到PIC和ARM处理器上。 1.2.3协议栈 适合于无线传感器网络的协议包括WLAN、Bluetooth、ZigBee、6Lowpan、 IPv6等。ZigBee协议应用最广,TI、Microchip、Ember、Atmel等分别开发 了自己的ZigBee协议栈[20】。此外,许多公司也开发了自己的协议,如CrossBow 研制了XMesh多跳自组织网络协议【2¨,Millennial Net研制了MeshSpace网 络协议【22】。 文献[23]、【24]在Linux中设计并实现ZigBee无线网络协议,主要是以开 发Linux协议为主,兼以修改相关驱动程序与管理应用程序,希望能为ZigBee 架构在Linux中的运作空间,并让未来的应用程序设计者能以较通行的应用 程序设计方式来设计Linux ZigBee应用程序,尽量发挥Linux作为ZigBee Coordinator或ZigBee Router的优势。 文献[25】采用IEEE802.15.4作为MAC层,IPv6作为网络层,设计通用节 点,软件模块化设计,引入有限状态机进行系统模式调度,设计实现了既能 独立运行又支持嵌入式操作系统的节点适应层软件。 文献[26]描述了IPv6应用到无线传感器网络中需要解决的关键问题。 西南交通大学硕士研究生学位论文 第5页 1.2.4其他技术 除了硬件平台、操作系统和协议栈之外,无线传感器网络中还涉及到许 多复杂的关键技术,比如时间同步、定位技术、安全技术、数据融合、数据 管理等。TinyOS操作系统中就包含了一个数据库TinyDB[271。文献[28】从现有 的无线传感器网络数据库分析入手,并着重设计和实现了基于TaraxOS无线 传感器网络操作系统的数据库TaraxDB。 1.3课题研究意义 无线传感器网络以其独特的应用前景和意义,已经成为全球未来三大高 科技产业之一。无线传感器网络节点是无线传感器网络组成的基本单元,节 点的软硬件设计在整个无线传感器网络的构建中举足轻重。 目前,大部分无线传感器网络节点采用单片机作为处理器,处理、存储 和通信能力有限,不适合无线传感器网络中较复杂的任务,一般只能用作功 能简单的普通传感器节点。另外对于科研来说,需要验证传感器网络中的某 些算法的可用性等,而基于单片机的节点实现比较困难。例如基于TinyOS的 Mica系列节点,在使用该系列节点时需要熟悉专门为无线传感器网络设计的 TinyOS和NesC编程语言,对于这种非普及类的操作系统和编程语言,无疑 会延长开发时间,增加开发难度;而对GAINZ节点的编程是直接操作单片机 硬件,需要熟悉单片机及外围硬件,这对于没有硬件基础的研究人员来说也 是一项巨大挑战。 也有少部分公司或团体研究开发的网关节点采用32位处理器(如 .iMote2),提高了节点的处理、存储能力,能够提供强大的功能。但无论从设 计、处理器的选择、操作系统的选择,还是平台的通用性、多硬件体系结构 的支持等方面考虑,都存在某方面的缺陷和不足。例如,Crossbow基于32 位处理器开发的节点,其处理器选择Intel XScale架构,节点价格较高;文献 [6]实现的汇聚节点,由于其与传感器节点通信采用DB51接口,因此只能使 用CrossBow提供的传感器节点,灵活性不高,对传感器节点的选择有很大的 局限性;文献[7]实现的网关节点,其射频芯片选择nRF905,但是nRF905在 目前的无线传感器网络中使用较少,因此能与该嵌入式网关结合应用的产品 西南交通大学硕士研究生学位论文 第6页 也相当有限;文献[8】实现的无线通信节点,操作系统选择了Windows CE,价 格较高,降低了系统的性价比;文献[191将TinyOS移植到ARM处理器上, 虽然该操作系统在低功耗等方面表现突出,但是功能并不强大,可移植性差, 应用程序开发也相对复杂。 由于当前计算机通信领域的软硬件已经朝着模块化、通用化方向发展, 而且应用需求也在逐步扩大,对无线传感器网络节点的要求也越来越高。首 先,要求节点的存储、处理和通信能力较强,能够满足当前以及日后应用的 发展需求;其次,价格始终是引导产品选择的一个主要因素,因此要求在节 点的软硬件选择上,能够提高系统的性价比;再次,要求操作系统能够支持 多种硬件体系结构,降低节点的软件与硬件关联性;最后,为了满足不同的 应用场景,需要平台能够保证接入多种传感器节点,实现平台的通用性。基 于以上几点考虑,本文的研究具有重要的实际意义。 1.4论文研究内容与组织结构 本课题对无线传感器网络这项新兴技术进行研究,在熟悉无线传感器网 络的发展现状后,分析现有软硬件平台的缺陷,设计并实现基于ARM处理 器和Linux操作系统的无线传感器网络节点。利用成本和功耗较低但功能强 大的ARM处理器¥3C2410,为节点提供强大的处理能力、存储能力和通信能 力,适合于无线传感器网络各项技术的理论和算法的验证并应用到实际系统 中。另外,本文选用Linux作为操作系统,它一款开源、便于移植的通用操 作系统,在Linux上的应用程序开发简单、方便使得本文实现的无线传感器 网络节点能够方便地进行二次开发。 为了描述本课题所做的主要工作,论文按照如下方式组织: 第1章是绪论部分,课题的研究背景介绍无线传感器网络的概念,体系 结构及关键技术,然后简要介绍国内外的研究现状,最后结合无线传感器网 络的应用前景和现状提出课题的研究意义。 第2章结合无线传感器网络中现有软硬件平台的缺陷设计本文的无线传 感器网络节点的硬件结构,进行硬件选型,然后详细介绍各部分硬件的结构 及原理。 西南交通大学硕士研究生学位论文 第7页 第3章先介绍在第二章中设计的无线传感器网络节点上进行软件系统开 发包含的三大内容,然后按照嵌入式Linux系统的开发流程分节介绍Linux 系统的实现过程。 第4章描述了基于第2章与第3章所实现的无线传感器网络节点的几个 典型应用场景。然后介绍为了扩充无线传感器网络节点的功能,可以利用 Linux的开源项目方便地移植用户程序到节点上。最后在这些工作的基础上实 现质心定位应用,利用无线传感器网络节点上已经实现的功能充分展示该节 点在数据处理、存储和通信方面的能力。 最后是结论部分,总结了论文的工作,并提出了未来工作的研究方向。 西南交通大学硕士研究生学位论文 第2章无线传感器网络节点硬件设计 第8页 2.1无线传感器网络节点总体结构 由于目前的无线传感器网络节点的硬件设计存在某些缺陷,本章将按照 以下几点思路设计无线传感器网络节点的总体结构,如图2.1所示: >节点处理器的存储、处理和通信能力强,可满足当前以及日后应用的 发展需求; >在处理器的选择上需要考虑价格因素,提高系统性价比; >硬件平台能接入多种传感器节点,实现平台的通用性。 核心传感器节点(CSN) 传感器节点模块(SNM) 传感器节点(SN) 核心处理模块 CPM 传感器模块 SM 传感器通信模块—. SNCM —召一一 传感器通信模块 SNCM 传感器模块 SM 塔;f 传感器SN处PM理模块 传感器处理模块 SNPM 图2.1.传感器节点结构 图2.1中的SN表示传感器节点(SensorNode),可以是任意类型或者自 行设计的节点,如CrossBow公司的Mica系列、中科院的GAINZ节点。 >SNPM表示传感器节点处理模块(SensorNode Processing Module), 负责传感器节点的控制; >SNCM表示传感器节点通信模块(Sensor Node Communication Module),负责传感器节点之间的相互通信; ‘ >SM表示传感器模块(Sensor Module),负责环境数据的采集。 CSN表示核心传感器节点(Core Sensor Node),是本文所要设计的无线 传感器网络节点。 >CPM表示核心处理模块(Core Processing Module),是核心传感器节 点的重要部分,也是本文的主要工作。它负责传感器节点数据的处理、 存储。通过CPM提供的接口,CSN可以与其他不同网络内的平台通 西南交通大学硕士研究生学位论文 第9页 信,为其提供强大的通信能力。该模块应选用处理能力较强的处理器。 >SNM表示传感器节点模块(Sensor Node Module),可以是任意类型 或者自行设计的传感器节点,如GAINZ、MicaZ、TelesB等。选择 的节点要能够提供UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)接口与CPM通信,且 能与传感器节点SN通信。 >通过UART,CPM可以对SNM进行配置,并与SNM收发数据。 2.2硬件选型 2.2.1传感器节点模块 核心传感器节点的传感器节点模块通过UART与核心处理模块通信,同 时还需要与其它传感器节点通信。因此要求传感器节点和传感器节点模块应 该是同类型、能相互通信的节点,并且自带UART。目前实验室购买了中科 院的GAINZ和CrossBow的Micaz节点,由于GAINZ节点本身自带UART 电平转换芯片,提供DB9接口,可以直接连接PC机串口,方便开发调试【291, 故本文实现时选用GAINZ节点作为传感器节点模块。 2.2.2核心处理模块 核心处理模块是主要的数据处理、存储、通信部件,需要提供强大的处 理能力、存储能力和通信能力。在32位嵌入式处理器中,常用的类型有ARM、 MIPS、PowerPC等,其中ARM处理器占了绝大部分市场份额,而且部分ARM 处理器的价格与单片机相差不大,因此选用ARM处理器设计无线传感器网 络节点是非常实际的。 在选择ARM处理器时需要考虑如下问题poJ: 、 >ARM微处理器内核:如果需要使用WindowsCE或Linux操作系统, 则需要选择带MMU(Memory Management Unit,内存管理单元)的 ARM内核,如AI洲920T; >系统的工作频率:它决定了ARM处理器的处理能力; >芯片内存储器的容量:部分ARM芯片内部自带了部分存储器; 西南交通大学硕士研究生学位论文 第10页 ≯片内外围电路、片外设备:利用芯片提供的片内外围电路可以简化系 统设计,如果使用片外设备则需要设计较多的片外外围电路: ≯价格、功耗等其他因素。 综合考虑以上因素,最后选用三星公司的ARM920T内核芯片¥3C2410, 它拥有足够的片内外围电路,可以简化核心处理模块的设计。 2.3传感器节点模块的硬件结构 传感器节点模块应能与传感器节点和核心处理模块通信,本文选用中科 院的GAINZ节点。该节点的实物图如图2-2所示,硬件结构如图2-3所示””。 传感器节点模块的处理嚣是ATmegal28L,它是ATMEL公司的AVR系列单 片机,内部自带128KB Flash、4KB SRAM、4KBEEPROM、SPI接口、两个 可编程串行USARTmniversal SynchronousAsynchronousReceiver,ffransmitter, 通用同异步收发传输器)、53个可GPIO口”。与传感器节点的通信通过CC2420 完成,它是一款符合1EEE802 15.4标准的射频收发芯片,采用直接序列扩频, 传输速率可达250kbps[3“。通过三个不同颜色的LED可以指示传感器节点模 块运行的状态。使用Connector接口可以外接传感器模块、电源模块等,以实 现完整的传感器节点功能。通过ATmegal28L的UARTI与核心处理模块相连 实现两部分的数据交互。 图2-2 GAINZ节点实物图 西南交通大学硕士研究生学位论文 第1 1页 图2—3 GAINZ节点硬件结构 2.4核心处理模块的硬件结构 2.4.1¥3C2410处理器 三星公司推出的¥3C2410是一款低成本、低功耗、高性能的32位精简指 令集微处理器产品,主要为手持设备和_般类型的应用提供解决方案。 ¥3C2410使用ARM920T内核,内部带有MMU功能,采用0.18urn工艺,工 作主频可达203MHz[331。其结构框图如图2_4所示。 其片上主要功能包括: >采用1.8V和3.3V双电压供电,内核工作电压1.8V,存储器及外部 I/O工作电压3.3V; >带16KB指令Cache,16KB数据Cache和MMU; >带内存控制器,可提供SDRAM控制及片选逻辑; >带Nand Flash Boot Loader,支持从Nand Flash启动; >带DMA功能的LCD控制器,最大支持4K色STN和256色TFT; >带外部请求引脚的4通道DMA; >3通道UART及2通道SPI: >l路IIC总线,1路IIS总线; >SD主机接口1.0版本,兼容MMC协议2.11版 西南交通大学硕士研究生学位论文 >2通道USB(Host/Device): >4路PWM定时器和1路内部定时器; >看门狗定时器; > 117个通用I/O,24路外部中断; >功率控制:包含正常、慢速、空闲及掉电四种工作模式; >8路10位ADC和触摸屏接口; >带日历功能的实时时钟; >带PLL的片上时钟发生器。 第12页 仁参厂可 筒[i] 牟令l 蜊o f §令I RTC ∞ ∞[霍至豳] 、■■曩■■■鼍■—置喇 图2-4 S3C2410结构框图【33】 西南交通大学硕士研究生学位论文 第13页 2.4.2核心处理模块的总体结构 核心处理模块的处理器¥3C2410能为系统提供强大的处理能力、存储能 力和丰富的网络功能,它的硬件结构如图2-5所示。 图2-5核心处理模块硬件结构 S3C2410工作频率可达203MHz,具有强大的处理能力;外扩的64MB .SDRAM、64MB Nand Flash能提供强大的存储能力;利用CS8900A可以提供 以太网连接从而接入Intemet;通过USB Host接口可以连接USB接口类型的 GPRS卡或WLAN卡从而与这些类型网络通信,还可以接U盘以扩展核心处 理模块的存储能力或者提供数据备份能力。另外还提供几个LED及按键,可 以实现简单的用户交互功能。 由于本文的侧重点不在于硬件开发,也为了节省成本(自己制作PCB板 的成本比直接买开发板高得多),本文选用广州友善之臂的开发板SBC2410。 它提供了图2.5中所有的硬件模块,能够满足要求,价格也较低,其实物图 如图2.6所示【34]。 亘塑茎望查兰里圭竺窒兰兰堡笙茎 至!:墨 图2-6 SBC2410实物图 2 4.3核心处理模块的硬件原理 在使用开发板SBC2410之前,首先需要对将用到的设各硬件原理进行分 析,在此分别介绍各部分硬件。 1、SDRAM SDRAM在系统中主要用作程序的运行空间、数据及堆栈区。由于其存 取速度远高于Flash,系统上电后先从Flash中运行启动代码,在完成初始化 后会将代码调入SDRAM运行。SDRAM采用电容作为存储单元,在运行过 程中需要定时刷新以免数据丢失。¥3C2410提供了SDRAM刷新控制逻辑, 可以方便地与SDRAM接口。核心处理模块使用两片HY57V561620CT”“, 提供64MB的存储空间,它们与¥3C24|0的连线图如图2—7所示。 西南交通大学硕士研究生学位论文 第15页 ADDR2加DRl 4 DATAm巾IATA 1 5 DATAl6、DATA3l A0叫~12 DQ0~DQl5 ADDR24 ADDR25 11GCS6 BAO BAl nSCS nWP 其他信号 其他信号 HY57V56 1 620CT A0 ̄JAl2 DQ0-DQl5 BAO BAl nSCS 其他信号 HY57V56 1 620CT 图2.7两片HY57V561620CT与¥3C2410连线图 2、Nand Flash 目前常用的Flash有Nor Flash和Nand Flash两类,Nor Flash具有芯片内 执行的特点,其连接方式类似于SDRAM,但是Nor Flash的存储密度、写入 和擦除速度、生命周期都不如Nand Flash,然而Nand Flash的使用需要特殊 的系统接口。S3C2410专门提供了Nand Flash接口,可以方便地使用Nand Flash及运行存储在Nand Flash当中的程序。因此本文选用Naiad Flash做为固 态存储器,以存储程序和数据,所用的芯片型号为K9F1208UOM[36】,它是三 星公司生产的容量为64MB的Nand Flash,常用于手持设备等消费类电子产 品。K9F1208UOM与¥3C2410的连接示意图如图2.8所示。 西南交通大学硕士研究生学位论文 D峨憾 ̄D讯Ⅺ /1 ~ R/nB ALE/GPAl8 CLE/GPAl 7 nFCE/GPA22 nFRE/GPA20 nFWE/GPAl9 S3C24 l 0 卜、 100 ̄107 , R/nB ALE r CLE , nCE nRE nWE n、肿 K9F1208UOM 图2.8 KgFl208UOM与¥3C2410连线图 3、以太网 第16页 V 核心处理模块内置10M/100M以太网接口,可以为系统提供丰富的网络 功能和软件升级及远程管理功能。在此选用CS8900A低成本局域以太网控制 器。它包括片上RAM、10Base.T发送和接收滤波器,以及一个有24mA驱动 器的直接ISA.Bus接口【371。CS8900A与S3C2410的连线图如图2-9所示。 — ADDR0叫∞DRl 9 DATA0~DATAl5 noE SA0~SAl9 -SD0~SDl5 nlOR ADDR24 n、肫 llIoW nGCS3 nBEl:nWBEl:DQMl nWAIT EnqT9/GPG l AEN nSBHE loCHRDY rNTRQ0 C¥8900A 图2.9 CS8900A与S3C2410连线图 4、USB Hoat ¥3C2410内部集成了USB Host控制器,完全兼容OHCI 1.0、USBl.1标 西南交通大学硕士研究生学位论文 第17页 准,支持低速和全速USB设备。因此能够很方便地实现USB Host接口,其 电路图如图2.10所示。 。……… ……~:,………~1~二。:::::j, :+;::;;.::’ j:…V阴并酝;… 。 。:一:::; 蠢…;::-:…::…:o::i 0:。’:: :。:::,::’5;;;:::.;::_jr,,;::?,~’一+。:■ 图2.10 USB Host原理图 5、UART 作为传感器节点模块的GAINZ节点与核心处理模块的¥3C2410之间通 过UART接口连接,只需使用简单的数据发送引脚TXD和数据接收引脚RXD 即可,,原理图如图2.11所示。 ·… ……: VCC3V 2。VDD33V. __ 9 I …… VCCw 1:【Dl,GPH4 RXDl,GPH5 . . : RXD0 T)E10 GND 上 GND …j¥3C2410……………i……丐……………j。GAINZ一一.…,… 图2.11 UART连接原理图 6、LED ¥3C2410提供117个GPIO(General Purpose I/0 Ports,通用输入/输出端 口),通过GPIO能够设置或者读入引脚的电平状态,因此能方便地控制LED 西南交通大学硕士研究生学位论文 第18页 的状态。核心处理模块提供了四个LED,分别接到四个GPIO上,其原理图 如图2.12所示。 7、按键 =≥:≥:::参:。;~:::≯:茹::;j二=善=:==五=茹=o,j3c24垮 图2.12 LED原理图 核心处理模块提供四个按键,分别接到具有中断能力的GPIO上,其原 理图如图2.13所示。通过一个上拉电阻将处理器的GPIO引脚拉高,电阻的 另一端连接按钮并接地。当按键按下时GPIO引脚电平为低,松开按键后GPIO 引脚电平为高。 . 二o~二,。喜,;::。,:;,。:-叠二≮:::z…:,亨…Z:::二 图2.13按键原理图 西南交通大学硕士研究生学位论文 2.4.4硬件资源占用情况 第19页 结合前面对硬件原理的分析和¥3C2410数据手册,总结出在核心处理模 块中各部分硬件的资源占用情况,如表2.1所示。其中Nand Flash、USB Host、 UART、LED、按键的操作均通过寄存器完成,CS8900A、USB Host、UART、 按键对应¥3C2410的部分中断源。 硬件 SDR√6LM 表2-1硬件资源占用表 片选 基地址 寄存器地址 nGCS6 0x30000000 大小 64MB 中断 C¥8900A nGCS3 Nand Flash 0xl 9000300 0x4E000000-4)x4E000014 64M旧 EINT8——23 USBHost U蜮1 LED 按键 0x49000000~0x49000058 0)60004000--4)x50004028 Ox560000 1 0^一Dx560000 1 8 O)66000050一加x56000058 INT——USBH 心nNARTl EINTl—也INT3、 EINT4——7 备注:表中未填的项表示该项不适用于对应的硬件 2.5本章小结 本章结合无线传感器网络中现有硬件平台的缺陷和应用需求,将要实现 的无线传感器网络节点分为两个主要部分:传感器节点模块SNM和核心处理 模块CPM,并选择了实现这两部分内容的硬件平台。然后详细描述了传感器 节点模块和核心处理模块的硬件结构和原理。传感器模块基于单片机 ATmegal28L和CC2420实现,主要负责与传感器节点通信和传感器数据采集。 核心处理模块基于32位ARM处理器¥3C2410,扩展了系统必须的SDI乙w、 Flash、以太网、USB Host、UART、LED及按键,能提供强大的处理、存储 和通信能力。 西南交通大学硕士研究生学位论文 第3章无线传感器网络节点软件实现 第20页 3.1软件涉及内容 本文设计的无线传感器网络节点包括两大部分:传感器节点模块和核心 处理模块。传感器节点模块的处理器为ATMEL的AVR系列单片机 ATmegal28L。核心处理模块的处理器为三星公司的¥3C2410 ARM9处理器, 而且为了提供强大的软件功能,在¥3C2410上需要运行操作系统,因此这两 大部分的软件开发方法大不相同。传感器节点模块上的软件是在单片机上进 行编程,直接操作单片机的寄存器即可,开发工具采用AVR单片机的集成开 发环境AVR Studio。基于操作系统的软件实现需要遵循该操作系统的软件层 次、开发流程和方法。 此外,传感器节点模块和核心处理模块之间通过UART进行通信,因此 本文还设计实现了两部分通信的串口通信协议。下面分别介绍各部分软件的 实现内容。 3.1.1传感器节点模块的程序 传感器节点模块选用中科院的GAINZ节点,该节点采用一个基于环形队 列的任务调度机制。在系统上电后跳转至主函数入口,并执行一系列的初始 化工作,完成之后进入无限循环,维护任务队列并执行任务调度。当有外部 事件或者内部中断发生时,系统执行中断服务程序并将产生的任务放入任务 队列,之后返回并继续维护任务队列。当队列中有任务时执行该任务,否则 系统处于等待状态。因此在对传感器节点模块进行编程时需要遵循这个任务 调度规则【2引。 传感器节点模块的功能比较简单,主要涉及到串口和CC2420的数据收 发问题。结合GAINZ节点模块的任务调度机制,其程序实现结构如图3.1 所示。底层是各部分硬件的驱动程序,它们分别操作不同的硬件。CC2420驱 动主要包括CC2420的初始化、发送数据、通过中断方式接收数据。当产生 数据接收中断时调用任务管理中的提交任务方法将数据读取和解析任务放到 西南交通大学硕士研究生学位论文 第21页 任务队列中。UART驱动主要包括串口初始化、数据的接收和发送,当产生 发送或接收中断时,提交数据处理任务到任务队列中。LED驱动主要实现LED 的点亮和熄灭。在传感器节点模块中实现的应用程序部分只需要完成硬件设 备初始化便可进入任务处理的无限循环当中。当有中断产生时会添加任务到 任务队列中,从而执行相应的中断处理任务。、 软件 应用程序 'r 任务管理 + + ', CC2420驱动 ●L ,r UART驱动 —L —r LED驱动 ●r CC2420 'r UART 硬件 'r LED 图3-1传感器节点模块程序结构 传感器节点模块基于ATMEL公司的AVR单片机ATmegal28L,其程序 的实现比较简单,只需要在AVR Stduio中编辑、编译程序,并通过编程器将 程序烧写到单片机中即可【38】。 3.1.2核心处理模块的软件系统层次结构 核心处理模块需要提供强大的功能,并且能够方便地进行程序扩充和二 次开发,所以需要借助操作系统。目前常用的嵌入式操作系统有Linux、 WindowsCE、Vxworks、uC/OS II等。其中Linux的如下特点使得它是最适合 本文工作的操作系统【”】。 >开放源代码,开发者可随意获取和修改内核源代码 >支持多种体系架构,可移植性强 西南交通大学硕士研究生学位论文 第22页 >支持动态加载内核模块,可以限制内核大小和方便地扩充内核功能 >提供强大的网络功能,可以方便地实现各种网络通信 >具有设备类的面向对象的设备模型、热插拔事件,可以方便地实现电 源管理和设备管理 。 一个基于嵌入式Linux系统的软件通常可以分为四个层次【加】: ◆引导加载程序:包括固化的Boot代码(可选)和Bootloader两大部 分。Boot代码是由处理器在上电时自动执行的,用户不需要对此进行 操作。例如¥3C2410设置为从Nand Flash启动时,它会自动将Nand Flash中最低地址处的4KB代码拷贝到自身的SRAM当中运行。而 Bootloader需要结合嵌入式板卡的硬件配置进行移植或者自己编写。 目前常用的Bootloader有U-boot、B10b、Vivi、PPCBoot等。U.boot 是一种开源的支持多种体系结构和操作系统的Bootloader,因此本文 选用U-boot并将其移植到本文的硬件平台中。 ◆Linux内核:特定于嵌入式板卡的定制内核以及内核的启动参数。这 需要根据板卡及实际应用进行内核裁剪和配置,或者进行相关的内核 修改及外设的驱动开发。 ◆文件系统:包括根文件系统和建立于Flash内存设备之上的文件系统。 关于文件系统类型的选择和配置需要结合硬件配置的Flash设备及应 用需求来决策,常用的文件系统类型有Cramfs、Romfs、J凰2、Yaffs 等。 ◆用户应用程序:特定于用户的应用程序,也是灵活性最大的一部分。 有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用 户界面以完成一些基于图形界面的应用。应用程序通常放在根文件系 统中,根文件系统包含了一些必要的系统支撑程序。应用程序是在后 继的开发过程中逐步加入的。 核心处理模块选用的开发板SBC2410提供了丰富的软件资源,但是所采 用的Bootloader是三星专用的vivi,Linux内核是老版本的Linux2.4.18,相应 的驱动程序、Lib库、应用程序的版本都较低,因此本文未采用开发板提供的 软件,选择自行移植和开发较新的、通用性更强的版本,唯一利用到的就是 它提供的Nand Flash的烧写工具Jflash.s3c2410。 西南交通大学硕士研究生学位论文 第23页 Linux是一个开源的操作系统,除了内核之外,其他还有很多开源的工具 或软件,利用这些开源软件可以实现完整的Linux系统。结合Linux系统四 个层次的内容及相应的开源软件,核心处理模块的软件实现方法、流程及各 部分功能如图3.2所示【4l】。中间实线部分表示基于Linux的各部分软件实现 的流程,左边虚线部分表示对应部分的实现方法,右边虚线部分表示对应部 分大致的功能。 医磊赢瓦丽鬲五i丽i~{ …。L空!!!堂二兰竺至竺!堡.!堕三:.兰登竺三一j i硬件初始化、基本的设备驱动、进程管理、 l内存管理、进程问通信、文件系统、网络等i L............——............——…..........————..........——.............j :…………………………………一…’: i..~………一.…….…..………........J i Linux目录结构,其中包含init进程、常用的i }Lmux命令、Lib库等 !………………………………………一……。+: …一1}L…各……部.。分..—外—.设.—的.…驱层..动硬..件 程..接 序..口 .,.支 .为.—持系—…统..调..用.,提..…供….底..ij |≤三=一 r………~……~……一一……………‘1 } 系统将用到的部分用户程序,如数据库 …一{ .艇llitc、web服务器boa、卸服务器等 j 图3-2软件实现方法、流程及各部分功能 在开发之前,先要规划好Flash地址空间使用,核心处理模块的Flash设 备为64MB Nand Flash,地址空间为Ox0000 0000~0x03FF FFFF,将其规划 为嵌入式Linux系统所需的4个部分,其组织和大小如图3.3所示。Bootloader 部分存储引导加载程序及其参数,大小为1MB;Linux kemel部分存储Linux 内核映像,大小为3MB;Root filesystem部分存储文件系统,大小为40MB; User Data部分存储用户数据,大小为20MB。 B∞n蚺der LjtllnX kernel Root filesysCem 晰m扭 霉 1M 3M 40M 20M 图3-3 64MB Nand Flash组织图 西南交通大学硕士研究生学位论文 第24页 3.1.3串口通信协议 传感器节点模块通过UART与核心处理模块相连,它需要与传感器节点 通信。而传感器节点又具有不同的参数,如节点’D、数据发送频率、数据发 送功率等,并且要能对这些参数进行设置。因此传感器节点模块要能实现数 据的透明传输并能够灵活地进行参数设置。为此本文为传感器节点模块和核 心处理模块定义了一套串口通信协议,以实现对传感器节点模块的配置和两 个模块之间的数据收发。 本文设计的串121通信协议对UART的设置如下:波特率为115200bps; 数据位为8位;停止位为1位;无奇偶校验。 串口通信协议的帧结构如图3_4所示。其中各部分含义如下: 图3-4串口通信协议帧格式 > 同步头:值为0x7E,用来确定数据帧的开始和结束; >控制字:利用该字节来确定正文部分的内容及含义,其值、含义及对 应的正文内容见表3.1; >校验和:同步头以外的其它字节累加和校验。 串口通信协议的动态行为包括: >传感器节点模块通过UART的接收中断和发送中断驱动,在接收中 断中处理核心处理模块发送的数据,并根据接收到的数据进行相应的 操作,如通过射频部分发送数据、返回操作结果、返回自身信息等。 另外,传感器节点模块还要接收传感器节点发送的数据,当其接收到 传感器节点发送的有效数据后通过UART将数据发送给核心处理模 块; >核心处理模块接收到传感器节点模块发送的数据后对数据进行解析, 当需要向传感器节点模块发送数据时按照定义的包格式发送即可。 值 Ox00 Ox01 0x02 0)【03 0x04 Ox05 0)65 0x宦 Ox77 西南交通大学硕士研究生学位论文 表3.1串口通信协议中控制字类型及含义 第25页 含义 正文内容 查看自身信息 空 返回自身信息 频率、功率、组D高字节、组D低字节、节点 m高字节、节点D低字节 修改发射频率 频率 修改发送功率 功率 修改组D 组D高字节、组D低字节 修改节点D 节点D高字节、节点D低字节 返回操作结果 0xff..操作失败 0x55:操作成功 收发数据包 数据包内容 子协议扩展 子协议定义内容 3.2开发环境及搭建 嵌入式的开发方法跟PC机软件的开发有很大的区别,嵌入式开发的程序 编写和编译在PC机上完成,但是目标程序是在嵌入式目标平台上运行,这种 开发模式叫做交叉开发。因此在进行开发之前需要将目标平台和PC之间的软 硬件环境搭建好。本文采用虚拟机上运行Red Hat Linux 9.0的方法完成核心 处理模块的开发工作,其硬件环境如图3.5所示。 安装Red Hat Linux9.0 图3.5硬件环境搭建示意图 网络节点 西南交通大学硕士研究生学位论文 第26页 需要的硬件设备有:目标平台(即核心处理模块)、JTAG小板(用于烧 写Bootloader)、PC机一台(即图3.5中的PCI,图中的PC2是虚拟出来的, PCI和PC2之间的虚线表示它们之间有一条虚拟通道,可以实现互相访问)。 PCI和无线传感器网络节点之间有三种连接方式:JTAG小板、串口、以太网。 JTAG小板主要用于Bootloader程序的烧写和调试,其一端连接PCI的 并口,另一端连接无线传感器网络节点的JTAG接口。图3—5中JTAG小板 和PC2之间的虚线表示这条链路是虚拟出来的。串口主要用于信息打印、调 试和作为系统的控制终端。以太网主要用于内核映像和根文件系统的下载。 软件方面需要做的工作有:在PCI上安装WindowsXP操作系统和虚拟 机软件VMware,另外还需要安装串口工具SecureCRT,代码编辑器和阅读器 Sourcelnsight,tap服务器软件等。利用PCI的Ⅵ讧Wm创建虚拟PC2,在 PC2上安装Red Hat Linux 9.0,并在Red Hat Linux 9.0中配置所需要的系统服 务如nfs,安装交叉开发所用的交叉编译工具、Bootloader烧写程序 Jflash-s3c2410等。 交叉编译工具需要根据所用的硬件及软件选用不同的版本,本文使用的 处理器为ARM,操作系统为Linux,所以选用arm-linux.gcc交叉编译工具。 在编译源码时需要用到两个不同的版本arm.1inux.gcc-2.95.3和 arm—linux-gcc-4.1.1。 arm.1inux.gec.2.95:3提供了编译完成后的安装包,其安装过程相当简单。 从ARM工具链的官方网站邱:l/tip.arm.1inux.org.uk/pub/arm-linux./toolchain /cross2.95.3.tar.bz2进行下载。然后将cross2.95.3.tar.bz2拷贝到Linux主机的 根目录下并解压,解压完成之后,arm-linux.gee2.95.3即安装到Linux主机的 /usr/local/arm/2.95.3目录下,可执行文件a11.1inux.gcc、a11.1inux.1d等所在 的路径为:/usr/local/arm/2.95.3/bin。 arm.1inux.gcc.4.1.1没有现成的工具包,需要下载源码自行编译。本文在 /opt/crosstool目录下编译arm-linux.gcc-4.1.1,最终生成的可执行文件 arm-9tdmi—linux-gnu—gcc等所在的路径为:/opt/crosstool/gCC-4.1.1-glibc一2.3.2/ arm-9tdmi—linux—gnu/bin。 在建立好上述交叉编译环境之后,就可以在宿主机上利用交叉编译环境 编译一个嵌入式Linux系统。 西南交通大学硕士研究生学位论文 3.3 Bootloader分析与实现 第27页 BootLoader是在系统上电时执行的一段小程序,它的作用类似于PC的 BIOS,主要用于初始化硬件设备、建立内存空间的映射图,从而将系统的软 硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好合适的 环境。系统加电或复位后,所有的CPU通常都从某个固定的地址上取指令。 CPU在复位时通常从地址0x00000000取它的第一条指令。而嵌入式系统通常 都有某种类型的固态存储设备(比如:ROM,EEPROM或FLASH等)被映射 到这个预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader 程序。 Boofloader一般有两种操作模式:启动模式和下载模式。启动模式用于加 载、运行操作系统,不需要用户介入,一般用于产品发布。在下载模式下, 开发者可使用Bootloader提供的命令通过串口、网络或USB等从主机下载文 件并将它们烧写到Flash设备当中,另外还可以设置Boofloader的各项参数, 查看硬件状态等,此模式用在系统开发过程中M。 常用的Bootloader有U.boot、vivi、ppcboot、blob等,其中U.boot支持 不同的体系结构和操作系统,是应用最为广泛的开源Bootloader。本文选用 U.bootl.1.4,其源码可以从http://sourceforge.net/projects/uboot下载。Booloadler 韵实现非常依赖于硬件,即使使用相同的CPU,它的外设也可能不同,所以 不可能有一个Bootloader支持所有的CPU、所有的电路板。所以需要对下载 的U-boot源码进行修改以支持核心处理模块。本文中所做的修改有三方面: 添加硬件平台、U-boot第一阶段、U.boot第二阶段。 3.3.1添加硬件平台 在U—boot中每一个开发板对应一个board,它有相关的初始化文件、配 置文件等,对于一块新的开发板来说,首先要做的就是在U.boot中添加这个 开发板的支持。本文使用的开发板与U-boot支持的smdk2410类似,可以借 鉴smdk2410进行添加,并将本文的硬件平台命名为wsn2410。添加的内容包 括三部分:顶层Makefile中添加编译选项、include/configs目录下中添加硬件 平台的配置头文件、board目录下添加wsn2410的目录并在该目录下包含硬件 西南交通大学硕士研究生学位论文 平台的操作函数。 第28页 3.3.2 U.boot第一阶段 U-boot的启动过程分为两个阶段,第一阶段的代码在cpu/arm920t/start.S 中,采用汇编语言编写,主要实现硬件设备初始化、栈设置、为第二阶段代 码运行准备RAM空间、将第二阶段代码复制到RAM中等,其启动流程如图 3-6中左边部分所示。默认是从Nor Flash启动程序的。本文设计的系统使用 Nand Flash,需要将程序烧写到Nand Flash中并从Nand Flash启动,因此需要 对U.boot进行修改。 首先介绍一下¥3C2410对NAND Flash启动的支持。¥3C2410支持从Nor Flash和Nand Flash启动,当OMl、OMO引脚均为低电平时从Nand Flash启 动。此时系统上电复位后会将Nand Flash的前4K的代码拷贝到内部的一个 叫做“steppingstone”的高速SRAM中并从SRAM开始执行。在这前4K的 代码中要实现将Nand Flash中所有的U-boot代码拷贝到系统的SDRAM中, 然后跳转到SDRAM中执行,这就实现了U-boot的Nand Flash启动。修改后 U-boot的启动流程如图3-6中右边部分所示,只需将原来的“复制Bootloader 第二阶段代码到RAM空间”修改为“从Nand Flash中复制所有代码到RAM 空间”即可,其它代码不做修改。 硬件设备初始化 (CPU工作模式设置为SVC模式、关闭看门狗、 设置时钟、关闭MMU等) 』 硬件设备初始化 (CPU工作模式设簧为¥VC模式、关闭看门狗、 设置时钟、关闭MMU等) 1L 为加载第二阶段代码准备RAM空间 (设置存储控制器) 为加载第二阶段代码准备RAM空间 (设黄存储控制器) RAM…一一一一二 钏一l卜:一I一一一~. 复制Bootl姐der第 段代码到 空间 > 从Nand Fl器h中复制所有代码到RAM空间 y 一 j 工 设置好栈 设置好栈 土 』 跳转到第二阶段代码的C入口点 跳转到第二阶段代码的C入口点 图3_6 U-boot第一阶段流程 西南交通大学硕士研究生学位论文 第29页 3.3.2 U—boot第二阶段 第二阶段从lib azm/board.c中的start armboot函数开始,主要完成的工 作有:初始化本阶段要用到的硬件设备、检测系统内存映射、将内核映像和 根文件系统从Flash上读到RAM空间中、为内核设置启动参数、调用内核。 当进入用户模式时则循环读取串口数据并执行相应命令,如烧写Flash、下载 文件、设置参数等。对本阶段的修改主要是添加对Nand Flash操作的支持。 在U.bootl.1.4中包含了上层对Nand Flash的操作支持,如Nand Flash的 命令接口do hand和do nandboot等。但是并不包含底层对Nand Flash的直接 操作接口,如读、写Nand Flash函数。因此在U.bootl.1.4中添加对Nand Flash 操作的支持即是要添加Nand Flash的直接操作函数并将这些函数与 U-bootl.1.4中原有的接口关联起来。在此需要修改的文件主要有两个: common/cmd hand.c和include/configs/wsn2410.h,下面分别介绍如何对这两 个文件进行修改。 在cmd nand.C中添加的主要内容是Nand Flash的底层操作函数,其中包 括NF Conf,NF Cmd,NF CmdW,NF Addr,小强SetCE,NF WaitRB, NF—Write,NF—Read,NF—Init—ECC,NF—Read—ECC,nand—init,NF—Init, NF Reset: 在wsn2410.h中主要有两个任务:在CONFIG COMMANDS宏定义中打 开对Nand Flash支持选项CFG CMD NAND和将cmd nand.C中添加的Nand Flash底层操作函数与U.bootl.1.4中原有的接口关联起来并添加必要的宏定 义。 在U.bootl.1.4的上层已经实现对Nand Flash的支持,它们会调用底层 Nand Flash的操作接口实现最终对Nand Flash的擦除、读、写等操作。调用 的接口包括NAND—WAIT—READY,NAND—DISABLE—CE,NAND— ENABLE—CE,WRITE—NAND—COMMAND,WRITE—NAND—COMNL6NDW, WRITE NAND ADDRESS,W砒TE NAND,READ NAND等,因此在 wsn2410.h中将cmd hand.C中实现的Nand Flash底层操作函数通过宏定义来 实现需要的接口。 西南交通大学硕士研究生学位论文 第30页 3.3 4u-boot使用 完成移植工作后执行make wsn2410-config及nqake CROSs-COMPILE= /usrflocal/ann/2 95 3/bin/arm.1imLx一命令后会在U-bootl 1.4的根目录下生成 u-boot.bin文件,利用JTAG该文件烧写到NandFlash当中即可运行。烧写时 需要用到¥3C2410在Linux平台下的Flash烧写工具Jflash—s3c2410。该程序 是按照扇区来擦写Nand Flash的,所以要将烧入的地址换算成扇区号,一个 扇区的大小是16K。其在Linux主机上的使用方法为:Jflash—s3c2410 u—bootbin /t-5。程序烧写界面如图3—7所示,选择“0:K9S1208 Program”及为0的 blocknumber将u-bootbin烧写到64MBNandFlash的0地址处。 图3—7 U-boot烧写界面 烧写成功后复位开发板,U.boot便可启动。使用SecureCRT工具通过串 口看到的启动界面如图3_8所示。 图3-8 U-boot启动界面 西南交通大学硕士研究生学位论文 第31页 U-boot移植成功后,便可通过它下载内核映像、文件系统并将它们烧写 到Naud Flash对应位置,还可以设置内核启动参数等。在进行下载时用U.boot 的t邱命令,Nand Flash烧写用nand erase、hand write等命令,进行参数设置 用setenv命令。 3.4 Linux内核移植 Boofloader的移植完成后就需要移植Linux内核。内核的移植主要是根据 所用的硬件平台进行内核裁剪、修改和配置,然后用交叉编译器生成二进制 映像文件。在进行移植之前首先介绍一下Linux内核相关的知识。 Linux的软硬件层次结构如图3-9所示【42】。用户应用程序直接或者间接 (使用C库)地调用系统调用接口,从而使用Linux内核提供的各项功能。 Linux内核主要包括内存管理、进程管理、文件系统、设备驱动、网络等几部 分。内存管理对有限的内存资源进行分配、映射、回收等。进程管理主要负 责进程创建、销毁、调度以及它们之间的通信等。文件系统包括统一的虚拟 文件系统和建立在不同设备上不同类型的文件系统,从而可以使用相同的接 口操作不同的设备。设备驱动位于硬件和内核功能之间,它能操作硬件并向 操作系统提供相应的接口函数。网络主要包括各种类型网络协议的实现。 本文选用较新的linux.2.6.24内核版本,可以从http://www.kemel.org下载。 核心处理模块使用的存储设备为Nand Flash,并且将其规划为四个分区,需 要对内核进行修改。下面是内核的配置、修改过程: >编辑Makefile,修改目标epu体系结构和交叉编译工具的路径 vi Makefile 修改ARCH和CROSS—COMPILE为: ARCH ?=a11Tl CROSS—COMPILE ?:,/opt/crosstool/gcc-4.1.1-glibc一2.3.2/arm一9tdmi- linux··gnu/bin/arm-9tdmi··linux·-gnu·- >复制配置文件到linux-2.6.24目录下面,移植过程以sdmk2410开发板 为模板: . cp arch/arm/configs/s3c241 0 config ._defconfig 西南交通大学硕士研究生学位论文 用户应用程序 C库 系统调用接口 进程 管理 内存 管理 Linux内核 文件系统 字符 设备 驱动 磁盘/Flash 文件系统 块设备驱动 套接字 TCP仃P 网络设备 驱动 第32页 硬件 图3-9 Linux软硬件层次关系【42】 >修改Nand Flash分区信息 根据本文对Nand Flash使用的规划修改arch/arm/plat.s3c24xx /common.smdk.c文件中的第1 08行smdk_default_nand__part[]为如下内 容: static struct mtd__partition smdk_defaultnand__part[]={ [0]={ .name =”U-Boot¨, .size =SZ 1M, .offset=0, ), [1]-{ .name =”Linux Kernel”, .offset=SZ_IM, 西南交通大学硕士研究生学位论文 第33页 ), [2]={ }, 【3]={ .¥1ze =SZ_3M, .name =¨Root”, .offset=SZ_4M, .size =SZ一4M球10, .name =”User", .offset=SZ一4M掌1l, .size =SZ一4M宰5, ), >; > 为了让内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂 载/dev为devfs文件系统。编辑fs/Kconfig文件,在902行menu”Pseudo filesystems¨下面添加如下代码: config DEVFS—.FS bool"/dev file system support(OBSOLETE)” default Y config DEVFS——MOUNT bool”Automatically mount at boot” default Y depends on DEVFS——FS >配置内核选项 执行make menuconfig,在配置菜单中,选择system type一>s3c2410 machines中的smdk2410,其他的arch.machines全部取消;配置与开发板 相关的各种特性和支持的驱动程序等。 > 因为使用的Bootloader是U—boot,需要把zImgae转换成U-boot可以 使用的ulmage。在编译时输入make ulmage即可实现自动转换,但需 要mkimage工具支持,将U-boot编译后生成的tools/mkimage文件拷 西南交通大学硕士研究生学位论文 第34页 贝到/bin目录下面即可。 >编译 在以上的配置和修改工作完成后输入make uImage进行编译。编译完 成后生成的arch/arm/boot/uImage文件即是可以利用U-boot烧写到Nand Flash中的内核映像。 >烧写 在生成uImage后要利用U-boot提供的tfIp下载方式和Nand Flash操 作命令将ulmagc烧写到Nand Flash中。在U.boot启动后配置好ipaddr、 serverip等参数。ipaddr为硬件平台的IP地址,serverip为刚编译好的Linux 内核映像所在的Linux主机的IP地址。此外,在PC机上需要开启tftp 服务器软件并设置好Linux内核映像所在路径。 准备工作完成后在U-boot的命令行中执行如下三条命令即可将 uImage烧写到从100000地址开始处的Nand Flash中: titp 30008000 ulmage nand erase l 00000 300000 hand write 30008000 1 00000 300000 3.5根文件系统建立 Linux内核在系统启动期间进行的最后操作之一就是安装根文件系统。根 文件系统一直都是所有Unix系统不可或缺的组件。Linux的文件系统需要遵 循文件系统层次结构标准(Filesystem Hierarchy Standard,FHS)【43J。在Linux 主机的某个目录创建一个目录存放待创建的根文件系统,本文创建该目录的 命令为:mkdir/opt/root。然后在/opt/root目录下创建Linux系统必备的目录 结构并适当修改各个目录的权限。创建的目录结构如图3.10所示。 bin目录下存放所有用户都能使用的基本命令,如cp、Is等。 dev目录下存放设备文件,其中的设备文件创建方法有3中:使用mknod 命令手动创建、使用devfs文件系统、使用udev用户程序。本文在Linux内 核中配置了支持sysfs文件系统,并采用Busybox提供的udev简化版mdev 在/dev目录下创建设备文件。 西南交通大学硕士研究生学位论文 l 第35页 bin dev etc sbin home lib sys proc usr mnt root val- Imp opt 厂]_』T] moju。懿厂]J—T—I ^ fstab init.d inittab profile bin sbin lib share logⅥ,、州 rcS 图3.10文件系统层次结构图 etc目录下存放各种配置文件,如fstab、rcS、inittab、profile等。sbin 存放只有管理员能够使用的系统命令,系统命令还可存放在/usr/sbin、 lusrllocallsbin目录下。 home目录为用户目录,每个普通用户在home目录下有一个以用户名命 名的子目录。 I.b下存放共享库和可加载模块(modules目录下),共享库用于启动系 统、运行根文件系统中的可执行程序,编译好的内核模块存放在modules目 录下,用户可以使用insmod命令将模块插入到内核中。 sys目录用于挂载sysfs文件系统。 pFoc目录存放系统运行时的相关信息,如内存使用情况、支持的文件系 统类型等。 usr目录存放共享的、只读的程序和数据,其下一般还有bin、sbin、lib、 share等子目录。 mnt目录用于临时挂接某个类型的文件系统,可以用来挂载U盘等。 root为根用户的目录。 var目录存放可变的数据,如log目录下存放系统相关日志文件,WWW 存放web站点数据。 tmp目录用于存放临时文件。 opt目录用于存放可选的程序。 创建了文件系统层次之后,需要往文件系统中添加内容,对于配置文件 可以直接编辑,对于应用程序可以利用Busybox生成,对于库文件可以从交 叉编译工具的库文件目录中拷贝。 在Lblux系统启动过程中会使用几个重要的配置文件,如profile、inittab、 西南交通大学硕士研究生学位论文 第36页 fstab、rcS等。profile用于设置相应的环境变量,如PATH、 LD LIBRARY PATH等。在inittab文件中设置初始化脚本等。在fstab文件 中设置需要自动挂载的文件系统类型。在etc/init.d目录下创建初始化文件 rcS并在其中添加系统初始化时需要执行的相关程序。 Busybox是构建内存有限的嵌入式系统的一个优秀工具。BusyBox通 过将很多必需的工具放入一个可执行程序,并让它们可以共享代码中相同的 部分,从而对它们的大小进行了很大程度的缩减,BusyBox对于嵌入式系统 来说是一个非常有用的工具Ⅲ】。在对Busybox进行配置、编译后会生成 Busybox应用程序,同时还会生成各个应用程序的链接文件,将它们安装到 创建的文件系统中即可包含Linux系统常用的各种命令,如cd、ls等。 根文件系统可以采用两种部署方式:NFS方式和JFFS2方式。NFS (Network File System,网络文件系统)是一种在网络上的机器间共享文件的 方法,文件就如同位于客户的本地硬盘驱动器上一样,NFS对于在周一网络 上的多个用户间共享目录很有用途【45】。NFS方式主要用在开发过程当中,利 用NFS文件系统,可以方便地对用户开发的程序进行调试、更新。JFFS2 (Joumalling Flash File System,version 2)是Flash上应用最广的一个日志结 构文件系统。它提供的垃圾回收机制,不需要马上对擦写越界的块进行擦写, 而只需要将其设置一个标志,标明为脏块,当可用的块数不足时,垃圾回收 机制才开始回收这些节点。同时,由于JFFS2基于日志结构;在意外掉电后 仍然可以保持数据的完整性,而不会丢失数据【46】。JFFS2在嵌入式系统中被 普遍的应用,主要用在系统最终部署到实际环境中。 >NFS方式 (1)、在Linux主机上正确安装NFS服务器之后,修改/etc/exports文件, 在该文件中添加如下行: /opt/root 192.1 68.O.宰(rw,sync.no_root_squash) 然后重启NFS服务 (2)、设置U-boot的参数 setenv autostart yes setenv bootcmd‘nboot 30008000 0 1 00000’ setenv bootargs‘noinitrd root=/dev/nfs刑nfsroot=1 92.1 68.0.1 1:/opt/root 西南交通大学硕士研究生学位论文 ip=192 168 0 9 console--ttySACO,115200’ 系统成功启动后的界面如图3-11所示。 第37页 ≯JFFS2方式 图3-11NFS方式启动 (1)、在Lmux主机上安装JFFS2文件系统制作工具:mkfsdffs2 执行如下命令生成文件系统: nlkfsjffs2一r/op“root—o rootfs.jffs2一e Ox4000一-pad=0xA00000一s 0x200·1"1 (2)、烧写文件系统到Nand Flash并设置好U.boot的参数 t邱30800000 rootfsjffs2 hand erase 0x400000 Ox2800000 naad write 0x30800000 0x400000 0x2800000 setenv autostart yes setenv bootcmd‘nboot 30008000 0 100000’ setenv bootargs‘noinitrd root=/dev/mtdblock2 rootfstype刁ffs2 rw console2nySAC0,115200 init=/linuxrc mem=64M’ 系统成功启动后的界面如图3.12所示。 西南交通大学硕士研究生学位论文 第38页 图3—12 JFFS2方式启动 3.6设备驱动程序开发 3.6.1设备驱动开发概述 Linux提供了模块方式对内核功能进行扩充,模块不被编译入内核映像, 可咀有效控制内核大小,另外模块一旦被加载,它就和内核中其他部分完全 一样。利用insmod、rrnmod、lsmod三个命令也可以方便地对内核模块进行 插入、删除和查看H”。在用insmod插入模块时,会执行模块的初始化函数, 在用rmmod删除模块时,会执行模块的卸载函数,如图3-13所示。因此采 用模块方式可以方便地进行Linux内核开发,特别是对于驱动程序的开发非 常有利。 设备驱动程序的开发流程如图3—14所示。设备驱动程序是内核和硬件之 间的接口,它为应用程序屏蔽了底层硬件的细节。在编写驱动程序之前首先 要熟悉硬件原理,懂得如何操作硬件。 Linux设备外设分为3娄;字符设备、块设备和嘲络设各。字符设备以字 节流的形式访问设备,块设备以块的形式进行访问,网络设备则通过网络接 口进行操作。这三类设备的驱动程序实现框架不太相同,需要熟悉不同类型 设各驱动程序的实现框架。对于字符设各和块设备来说,它们拥有一个主设 各号和一个次设备号,主设备号用于关联该类设备的驱动程序,次设备号用 西南交通大学硕士研究生学位论文 第39页 于对应具体的某个设备。另外,在文件系统中/dev目录下都有对应的设备文 件,使用open、close、read、write、ioctl等函数操作这些设备文件即可访问 对应的设备,在驱动程序中需要实现相应的操作函数,如图3.13所示。 剁初始化函数 y open read write ioctl 用户程序 调用 ’r Linux系统调用 间接调用 叫—卜\ 清除函数 close 图3.13设备驱动程序与用户程序间的关系 早黑羁:翊 图3一14设备驱动开发流程 设备文件的创建有三种方式:用mknod命令手工创建、使用devfs在驱 动程序中自动创建、使用udev创建。手工方式不灵活,使用麻烦;devfs在 Linux2.6内核中已经废弃。Linux2.6内核引入了系统文件系统(sysfs)为每 个系统的硬件树进行分级管理,它提供了设备的基本信息。系统文件系统结 合用户态的udev脚本可以动态地维护/dev目录下的设备文件,为特定设备提 西南交通大学硕士研究生学位论文 第40页 供固定的设备名,方便用户使用。在建立根文件系统时,已经利用BusybOX 实现了udev简化版本mdev,因此可以利用sysfs动态创建设备节点,只需要 在驱动程序初始化函数中创建相应的类及设备即可。 在Linux2.6内核中,编译驱动程序有两种方式: >把驱动程序代码放置到内核源代码的drivers目录下相应目录,修改 Makefile和Kconfig文件并在配置菜单中将驱动程序对应的菜单项设 置为111,使得在编译模块时将该驱动程序编译为后缀为ko的文件; >驱动程序可以放置在任意位置,编译时使用.C选项指定内核源码所 在目录,M指定驱动程序所在目录。 对驱动程序进行测试时,需要编写相应的测试程序,在测试程序中对驱 动程序对应的设备文件进行操作。在测试程序编译完成之后,需要将驱动程 序以模块方式插入到内核中,然后执行测试测试程序以测试驱动程序的各部 分功能。 3.6.2 LED驱动 一核心处理模块提供了四个LED,通过四个GPIO来控制,原理图如图2.12 所示。要点亮LED,令相应引脚输出0即可;要熄灭LED,令相应引脚输出 1即可。LED为输出类型的字符设备,可以不实现read、write函数,而仅通 过ioctl函数进行操作。因此LED的驱动程序主要包括:模块初始化函数 wsn2410 leds init、模块卸载函数wsn2410 leds exit、设备文件打开函数 wsn2410 leds open、设备控制函数wsn2410 leds ioctl。 在wsn2410 leds init函数中调用register chrdev、class create、 class device create函数分别注册字符设备、创建相应的类和设备(主设备号 设置为231,从设备号为O,设备名为WSN2410.1eds)。在wsn2410 leds exit 函数中执行与wsn2410 leds init函数相反的操作。 在wsn2410 leds open函数中对四个LED进行初始化,将四个GPIO设 置为输出。 wsn2410 leds ioctl函数接收两个参数:cmd和arg。cmd为1时表示点 亮LED,为0时表示熄灭LED。Arg则为led的编号。因此,只需要根据这 两个参数对LED进行操作即可。 西南交通大学硕士研究生学位论文 第4I页 在LED的测试程序中调用open函数打开/dev/WSN2410-leds设备文件, 通过ioctl函数传递操作类型及LED编号便可对调用驱动程序中的 wsn2410一leds ioctl函数对LED进行控制。测试程序、模块加载(insmod)、 卸载(rmmod)命令与驱动程序之间的调用关系如图3-15所示。 图3—15 LED测试程序、模块使用命令与驱动程序之问的关系 驱动程序和测试程序都编译好后,将驱动程序模块wsn2410 ledsko拷贝 到根文件系统中Oib/modules目录下,执行insmodwsn2410 led.ko将驱动程序 插入内核,此叫系统会自动在/dev目录下创建WSN2410一leds设备文件,然后 执行测试程序leds_app便可对LED进行操作。测试界面如图3-16所示,其 中·1、2、3、4表示对相应LED进行操作,最后的参数0表示熄灭,1表示点 亮。 图3-】6LED驱动程序删试界伯 西南交通大学硕士研究生学位论文 3.6.3按键驱动 第42页 核心处理模块共有四个按键,其原理图如图2.13所示,利用按键变化产 生中断。按键属于输入类型的字符设备,其驱动程序跟LED的不同,按键信 息的获取采用中断方式实现。按键的驱动程序主要包括:模块初始化函数 、设备文件打开函数.keys wsn2410. init 、模块卸载函数 wsn2410 keys.exit. wsn2410_keys 、设备文件关闭函数 、设备文件读取 中的函数类似。在.init 来实现进程的阻塞。.waitq 及中断处理函数.read keys wsn2410_keys poll open、设备文件查询函数wsn2410_keys.clo以sewsn2410 keysinterrupt。另外,还需要一个等待队列button wsn2410 keys 、 wsn2410 keys.exit 函数与 LED wsn2410 keys 函数中需要设置 为中断类型并调用 中断处理函数..open ,当按键G按P下IO后会产生 CPU 注册 该中.中i断n ,re t从 equ r而 resut调 pir t用qkeys 断处理函数。在中断处理函数keys interrupt中读取GPIO的状态保存到缓冲 区中并唤醒等待数据的进程。在wsn2410 函数中,’如果没有键按_kys.read 下的记录则将进程阻塞,否则将按键的值复制到用户空间。在 wsn2410 keys.poll函数中将进程添加到等待队列并返回设备是否可读的掩码 位。在wsn2410 keys close中调用free irq将中断释放。 · ‘在按键的测试程序中调用select函数查询设备是否可读,如果可读则调 用read函数读取按键值。通过ioctl函数传递操作类型及LED编号便可对调 用驱动程序中的wsn2410 leds ioctl函数对LED进行控制。测试程序、模块 加载(insmod)、卸载(rmmod)命令与驱动程序之间的调用关系如图3.17 所示。 匝习 甲围困 甲 测试j wsn2410 keys_open 11 wsn2410_keys_read||wsn24 10_keys._poll||wsn2410_keys_close -I H button_waitq keys_)nterrupt wsrd410_keys_init 崮 wsn24 10_keys_exit 崮 系统命令 图3.1 7按键测试程序、模块使用命令与驱动程序之间的关系 在驱动程序和测试程序都编译完成后,其测试方法跟LED的相同,测试 西南交通大学硕士研究生学位论文 界面如图3-18所示。 第43页 图3.18按键驱动程序测试界面 3.6.4网络设备驱动 网络设备驱动的开发跟LED、按键大不相同,需要遵循Linux中网络体 系结构的规定。Linux网络设各驱动程序的体系结构如图3.19所示,由上到 下分为4层,依次为网络协议接口层、网络设备接口层、提供实际功能的设 备驱动功能层以及网络设备与媒介层㈣。 数据包发送 dev_queue xmit0 } 数据包接收 netif_rx0 , 网络协议接口层 struet net device 【 t 刚络设备接u层 数据包发送 hard start xmit() 中断处理 (数据包接收) 设备驱动功能层 嘲络物理殴备媒介 嗍络鞋备与媒彳r层 图3-19 Linux嘲络设备驰动程序体系结构m] 核心处理模块中使用CS8900A作为以太网控制器,实现其驱动程序时主 要包括设备注册、初始化、注销、数据包的发送与接收。在Linux内核中己 西南交通大学硕士研究生学位论文 第44页 经包含有CS8900A网卡驱动程序,源文件为drivers/net/cs89x0 c,但是需要 根据硬件设计进行相应的修改。修改内容主要有基地址、总线位宽、中断号 等。 修改完成后,将CS8900A网卡驱动程序编译到内核中,需要在内核配置 菜单中选中Network device supporI一>Ethernet(10 or 100Mbit)·>CSS0x0 support选项,并重新编译内核。 网络设备驱动的测试可以利用现有网络程序,如使用ifconfig配置网络接 口的IP地址,使用ping测试网络连通性,测试界面如图3-20所示。 图3—20网络驱动程序测试界面 3 6 5USB驱动及u盘使用 USB主机控制器有三种规格:OHCI(Open Host Controller Interface)、 UHCI(UniversalHostControllerInterface)和EHCI(EnhancedHostController Interface)。OHCI驱动程序用来为非PC系统上以及带有SiS和ALi芯片组的 PC主机板上的USB芯片提供支持。UHCi驱动程序多用来为大多数PC主板 卜的USB芯片提供支持。EHCI由USB2 0规范提出,能兼容OHCI和UHCI_4…。 ¥3C2410的USB主机控制器兼容OHCll 0标准。Linux2 6.24内核中实现 了¥3C2410 USB丰机控制器的相关驱动.另外还实现了几娄通用的USB设 备驱动,如通信设备娄、人机接口类、海量存储设备类、打印设备娄、集线 器设备类等,一般的通用设各都不需要开发者再编写驱动程序。 u盘属于海量存储类设备,在Linux内核中有很好地支持,不需要自己 编写驱动程序。另外,U盘在Linux中会被模拟为SCSI设备去访问,需添加 对SCSI的支持,Linux内核中也有很好的支持。因此只要配置合适的选项即 西南交通大学硕士研究生学位论文 第45页 可,经过实验测试,在配置内核时需要进行配置的项有:SupportforHost—side USB、OHCI HCD Support、USB Mass Storage support、SCSI device support、 SCSI disk support及支持U盘使用的相关文件系统配置选项。在此将这些支持 选项都编译到内核当中,烧写到Flash上。 使用U盘时的测试界面如图3—21所示,当U盘插上之后会打印U盘的 相关信息,从这些信息或者从/proc/partitions的内容中可以找到U盘的设备名, 将u盘挂载到/mnl/usb目录下即可以使用u盘。 图3_21 U盘使用实倒 借助于Linux内核中实现的USB主机控制器和设备的驱动程序,可以很 方便地实现USB接ll类型的GPRS、WLAN、Bluetooth网络接口卡,从而实 现无线传感器刚络节点与这些网络的通信。 3.7本章小结 本章首先描述了基于ARM与Linux的系统软件层次结构和如何措建系统 开发环境。然后逐步描述了各个软件层次在本文设计的硬件平台上的实现过 程和如何将晟终完成的这些软件模块部署到硬件上运行。另外,本章还设计 西南交通大学硕士研究生学位论文 第46页 了SNM程序中的串口通信协议和描述了SNM的程序结构。 本章工作完成之后,本文实现的无线传感器网络节点的基础工作已经结 束,已经可以将该节点作为一个系统运行,也可以在其上进行二次开发。 西南交通大学硕士研究生学位论文 第4章无线传感器网络节点的应用 第47页 4.1典型应用场景 本文第2章与第3章针对当前无线传感器网络节点的局限性,设计并实 现了一种基于ARM与Linux的无线传感器网络节点,该节点功能强大,性价 比高,平台通用性好,而且选择了可以支持多种硬件体系结构的Linux作为 操作系统。至此,无线传感器网络节点的硬件与核心软件已经设计开发完毕。 以该节点的多种特性,其可以解决当前传感器网络的多种问题,提高网络整 体性能。下面是几种典型应用场景。 4.1.1代替有线传输 目前许多传感器网络中的数据传输采用有线方式,需要铺设大量的线缆, 导致系统部署困难,应用受到很大限制。本文设计的传感器节点模块采用无 线传输方式,恰恰可以解决这个问题。只要原数据采集设备能够提供串口(几 .乎所有的处理器都支持串口通信),利用本文实现的节点可以轻松地替代原有 的有线通信方式,替代方案组网示意图如图4.1所示。 >将本文实现的传感器节点模块与原数据采集设备通过串口相连,对原 设备中的有线传输程序稍作修改,采用串口通信协议将数据采集设备 中的数据发送到传感器节点模块; >传感器节点模块与网关节点之间采用无线通信方式收发数据; > 网关节点直接采用本文设计的核心传感器节点,处理接收到的数据, 通过串口或以太网将数据发给PC机。 这样以无线传输代替有线传输,方便了系统部署,拓宽了应用范围。 西南交通大学硕士研究生学位论文 第48页 敦笔浸◇ ◇、翮 扒 敦怠竺竺夕 --/ 姗炱强恻块”“…”。妒 图4.1代替有线传输的组网示意图 4.1.2作为分簇无线传感器网络的簇头节点 分簇技术作为无线传感器网络的主要技术之一,是延长无线传感器网络 寿命、提高网络可扩展性及实现网络负载均衡的有效手段。在分簇无线传感 器网络中,簇头首先要按照路由协议的规则计算网络内的路由,然后对收集 到的数据作简单的数据融合,最后按照计算好的路由转发给网关节点。这些 工作对簇头节点的平台选择要求都较高。而本文设计的无线传感器网络节点 的性能足够满足簇头节点的需求,可以作为网络中的簇头节点使用。其组网 示意图如图4.2所示。 簇头 簇头 簇头 么y ㈣ 石 传感器节点 传感器节点 传感器节点 图4-2作为簇头节点的组网示意图 4.1.3作为无线传感器网络的网关节点 网关节点是无线传感器网络中的关键节点,功能强大,需要接收、处理 大量采集到的数据,并将这些数据通过其他网络(如Intemet、GPRS、WLAN) 西南交通大学硕士研究生学位论文 第49页 发送到管理节点。本文设计的无线传感器网络节点也可以作为网关节点。其 组网示意图如图4.3所示,网关节点、管理平台服务器端和管理平台客户端 都连接到互联网,网关节点将无线传感器网络的数据发送到管理平台服务器 端,客户端可以通过互联网访问服务器端,了解整个监测区域内的各种信息。 端 传 管理平台.客户端 图4-3作为网关节点组网示意图 4.1.4作为无线传感器网络的服务器节点 本文实现的无线传感器网络节点基于Linux操作系统,可以提供强大的 网络功能,它可以作为无线传感器网络的服务器节点使用,如图4.4所示。 传感器节点将采集到的数据以无线方式发送到服务器节点,服务器节点将接 收到的数据进行融合、处理、存储。服务器节点通过以太网接口可以连接到 Intemet上,管理平台客户端通过互联网就可以访问服务器节点,了解整个监 测区域内的信息。 为了让客户端通过服务器节点就能了解整个监测区域内的情况,服务器 节点必须提供网络服务,如WEB服务、FTP服务、远程登陆服务等。利用 WEB服务可以在服务器节点上创建WEB站点,客户端通过Intemet网络访 问该服务器节点,从而获取无线传感器网络的信息。利用FTP服务,客户端 可以远程下载服务器节点上存储的数据,从而进行分析。利用远程登陆服务, 在客户端就可以直接操作服务器节点,对无线传感器网络进行配置、查看等。 西南交通大学硕士研究生学位论文 第50页 传 图¨作为服务器节点组网示意图 管理平台.客户端 4.2常用用户程序实现 在4.1节中,介绍了本文设计的无线传感器网络节点的几种典型应用场 景。当其作为服务器节点使用时,需要能够提供网络服务,如4.1.4提到的 WEB服务和FTP服务。由于本文的无线传感器网络节点采用Linux操作系统, 利用Linux中丰富的开源软件项目可以很方便地扩充各方面的用户程序。在 第3章中在制作根文件系统时,本文已经利用Busybox建立了很多Linux用 户程序,如文件及目录管理、用户管理等命令。除了这些程序之外,为了方 便硬件平台使用以及后续应用程序的开发,本节实现四种常用的用户程序: 数据库,WEB服务器,FTP服务器和远程登录SSH。 4.2.1数据库sqlite 在嵌入式Linux系统中常用的数据库有PostgreSQL、mSQL(mini SQL)、 Berkeley DB、sqlite等。其中sqlite支持绝大多数标准的SQL92语句,采用 单文件存放数据库,速度又比MySQL快上1~2倍,存储量也不是问题。在 操作语句上更类似关系型数据库的产品使用,非常方便。sqlite的版权允许无任 何限制的应用,包括商业性的产品【481。因此,本文选择对sqfite进行移植, 采用版本为sqlite.3.3.8。 >编译sqlite3.3.8生成用于移植的库文件 从http://www.sqlite.org下载sqlite3.3.8.tar.gz解压进入sqlRe3.3.8目录。 西南交通大学硕士研究生学位论文 第51页 将Makefile.1inux.gcc复制为Makefile并修改这个文件。对Makefile的修改主 要包括两个方面:首先是将编译器、归档工具等换成交叉工具链中的对应工 具,比如,gcc换成arm-limtx.gcc,aT换成ar-linux.al-,ranlib换成arm-linux-ranlib 等等;其次是去掉与TCL相关的编译选项,因为默认情况下,将会编译sqlite3 的Tel语言绑定,但是在移植到ARM.Linux的时候并不需要,因此将两个与 TCL有关的行注释掉。对Makefile的修改总结如表4.1所示。 位置 原值 表4—1 Makefile修改情况 修改为 17行 TOP=../sqlite 73行 TCC=gcc-06 81行 AR=al"cr 83行 RANLIB=ranlib TOp=. TCC=GCC4.1.1_BIN/arm-9tdmi-linux—gnu-gcc-06 AR=GCC4.1.1_BIN/arm一9tdmi—linux-gnu—ar cr RANLIB=GCC4.1.I_BIN/arm一9tdmi-linux-gnu-ranlib 86行 MKSHLIB 2 gcc-shared MKSHLIB=GCc4.1.1_BIN/arm-9tdmi·linux—gnu-gcc-shared 96行 TCL.-FLAGS=-I/home/ #TCL--FLAGS=-I/home/drh/tcltk/8.41inux drh/tcltk/8.41inux ● - 103行 LIBTCL= /home/drh/ #LIBTCL=/home/drh/tcltk/8.41inux/libtcl8.49.a-lm—ldl :cltk/8.41inux/libtcl8.49.a ·lm—ldl Makefile文件包含了mam.mk,需要对其进行修改。找到这个文件中 的下面一行: select。O table.O tclsqlite.O tokenize.0 trigger.o l 将其修改为: select,0 table.0 tokenize.O trigger.o| 修改工作完成后通过make命令编译sqlite3。编译完成后在sqlite3.3.8 目录下生成libsqlite3.a库文件、sqlite3.h头文件和sqlite3可执行文件。 >部署sqlite3到根文件系统 将生成的libsqlite3.a和sqlite3.h拷贝到根文件系统的库文件目录/lib 下;将sqlite3应用程序拷贝到根文件系统的应用程序目录bin下。 西南交通大学硕士研究生学位论文 第52页 开发板启动后执行sqlite3测试移植是否成功,移植成功后的界面如图 4-5所示。 图4-5 sqlite3移植成功后的执行界面 ≯应用sqlite3进行数据处理 sqlRe3移植成功后,在shell中可以直接输入SQL语句对数据库进行 操作,也可以在应用程序中调用sqlRe3 open、sqlite3一close、sqlite3 oxec 等函数对数据库进行操作。 4.2.2WEB服务器Boa 随着WEB技术的发展,几乎改变了现在的信息表达形式,很多应用都是 基于WEB技术的。由于HTML语言的标准统一性.只要在嵌入式设备中有 个微型WEB服务器,就可以使用任意一种WEB浏览器接收和发送信息。Web 服务器为我们管理、控制和监测各种各样设备提供了一个很好的途径。目前 国外的相关研究很多,如Pharlap公司的MicroWeb、AgranatSystems公司的 EmWeb、EmWare公司的emMicro、Allegro公司的RomPager、WindRiver公 司的Wind.还有Boa、Enea、PicoWeb、ChipWeb、Ipic、NetAcquire、Voyager、 Quiotix等,国内的有WeNt[4…。其中Boa是一款单任务的HTTP服务器,与 其他传统的WEB服务器不同的是当有连接请求到来时,它并不为每个连接单 独创建进程,也不通过复制自身进程来处理多链接,而是通过建立HTTP请 求列表来处理多路HTTP连接请求,同刚它只为CGI程序创建新的进程,这 样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。同时它 还具有自动生战目录、自动解压文件等功能,因此具有很高的HTTP请求处 理速度和效率,在嵌入式系统中具有很高的应用价值口…。本文选}f]Boa作为 WEB服务器进行移植。 ≯编译Boa 从boa网站http:l/wwwboa.org下载boa.0 9413mr.gz源代码,解压后 进入boa一0 94—13/src目录执行/configure命令。 将Makefile的3lq2行内容: 西南交通大学硕士研究生学位论文 第53页 CC=gcc CPP=gcc-E 修改为 CC:/usr/local/arm/2.95.3/bin/arm-linux-gcc CPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc-E 修改完成后执行make进行编译,编译结束后在boa.0.94.13/src目录 下生成boa应用程序。 >安装配置Boa服务器 将boa拷贝到根文件系统的应用程序目录bin下。 Boa启动时需要一个配置文件boa.conf,该文件的缺省目录由 src/defmes.h文件的SERVER ROOT定义,或者在启动boa的时候通过参 数“.c’’指定。其中指定的默认目录是:/etc/boa/。在根文件系统的etc目录 下创建boa目录,将boa-0.94.13/boa.conf拷贝到boa目录下并进行修改。 修改的内容有Group、User、ScriptAlias、ServerName等,修改总结如表4.2 所示。 位置 .原值 表4.2 boa.conf修改情况 修改为 48行 User nobody Usetboa 49行 Group nogroup Group user 94行 #ServerName www.your.org.here ServerName www.mywsn.org 193行 ScriptAlias/c西-bin//usr/lib/cgi-bm/ ScriptAlias/cgi-bin//var/www/cgi-bin/ 将mime.types文件复fl;lJ/etc目录下,通常可以从Linux主机的/etc目 录下直接复制即可。创建日志文件所在目录/var/log/boa,创建HTML文 档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin。 在开发板上添加用户组user并在这个组中添加用户boa。 >运行测试Boa 创建index.html文件并拷贝到根文件系统的/var/www目录下, index.html内容如图4-6所示,它的作用是在浏览器中输出“Welcome to my WSN!This is a boa test page!”,以便于测试Boa是否移植成功。 西南交通大学硕士研究生学位论文 曲tⅢJ, ‘nead, t:ttl e、welcome to mvwsn,/12it]e, z 7head, 第54页 <bo曲, Wekome to州孵NIThis is a boa test page <,bodv 、,htlll 图445mdex hual内容 运行Boa后在IntemetExplorer中输入http://192.168.0.10,如果出现如图 4.7所示界面则表示Boa移植成功,其中192.169.0 10为本文实现的硬件平台 的IP地址。 %f牛CD编辑(目查看(蝴收瓤出 工具(I)帮4岫 。后退,o,西萄。2/;=’1擞谈’幅夹@毒-、≥型- 地址叫莉http:l/192 168 o Io/ wd…to myIssIthi:is·-ottest ptEe‘ 图4—7Boa授4试结果 除了静态网页之外,Boa还支持CGI功能,可以利用它实现动态交互功 能。 4.2 3FTP服务器VSftpd 文件传输协议(FileTransferProtocol,FTP)的目的是在互联网上进行平 台无关的数据传输,它基于客户机/服务器模式,提供一个数据传输信道和一 个控制信息传输信道。常用的FTP服务器有vsftpd,pro邱d,pureftpd,其中 vs邰d占用空间少,功能也较强大Oi】,因此选择将其移植到本文的无线传感 器网络节点中。 从vsfc口d的官方网站hrtp://vsftpd.beasts org/下载源码后进行交叉编译即 可生成vs邱d应用程序,再对FTP服务器进行配置即可。 西南交通大学硕士研究生学位论文 第55页 4.2.4 SSH工具包Dropbear Telnet是登录远程网络主机的简单方法,但是它是一个非常不安全的协 议,而且各种文件大量报道了它的弱点。可以改用加密能力强的协议或是可 以确保通信机密性的其他机制。目前完成此事的最佳方式是SSH协议以及相 关工具程序包【411。OpenSSH是一个开放源码的SSH工具包,但是其占用空间 较大,不太适合嵌入式系统【521。本文选用一个轻量级的SSH2服务器和客户 端Dropbeart”】,它可以从http://matt.UCC.ash.au/dropbear/dropbear.html网站下 载。在移植Dropbear时,首先需要编译zlib库,并修改Dropbear相关的编译 选项再进行编译即可。编译完成后将生成的应用程序部署到系统当中便可以 使用SSH的服务器端和客户端。 4.3定位应用案例 位置信息是传感器节点采集数据中不可缺少的部分,没有位置信息的监 测信息通常是毫无意义的。确定事件发生的位置或采集数据的节点位置是传 感器网络最基本的功能之一【l】。因此在无线传感器网络的节点上通常都会实 现定位算法。在定位算法中质心算法是一种比较简单,容易实现的定位算法。 因此本文以质心算法的定位应用为例子,旨在描述在本文实现的无线传感器 网络节点上实现二次开发的方便性,并充分利用该节点的强大功能(利用文 件和前面实现的数据库sqlite3对数据进行存储),增强对定位结果的表示方式 (利用WEB服务器Boa提供WEB页面实现远程监测、利用F11P和SSH提 供远程访问和文件下载能力),而不考虑质心算法本身的定位性能。 4-3.1质心定位原理 多边形的几何中心称为质心,多边形顶点坐标的平均值就是质心节点的 坐标。如图4-8所示,多边形ABCDE的定点坐标分别为A(x。,Y。),B(x:,少2), C(x,,Y,),D(x4,Y4),E(x,,Y,),其质心坐标为 b)-(型专学垫,韭业产业) 西南交通大学硕士研究生学位论文 第56页 质心定位算法首先确定包含未知节点的区域,计算这个区域的质心,并 将其作为未知节点的位置。 B C A E 图4.8质心定位算法图示【1】 在质心算法中,有两类节点:信标节点和未知节点。信标节点周期性地 向邻近节点广播信标分组,信标分组中包含信标节点的标识号和位置信息。 当未知节点接收到来自不同信标节点的信标分组数量超过某一个门限k或接 阢,‰)-(半/t:,竽半) 收一定时间后,就确定自身位置为这些信标节点所组成的多边形的质心: \ 庀 , 其中伍n,b 1..伍腩,%)为未知节点能够接收到其分组的信标节点坐标【11。 4.3.2质心定位方案设计 根据质心算法原理,将节点分为信标节点和非信标节点,其组网示意图 如图4-9所示,其中信标节点选用中科院的GAINZ节点,非信标节点利用本 文实现的无线传感器网络节点。非信标节点通过串口和以太网连接到PC机 上,在PC机上通过多种方式展示非信标节点的定位结果。 图4.9质心定位组网示意图 1、信标节点 西南交通大学硕士研究生学位论文 第57页 信标节点的任务比较简单,仅是周期性地发送信标分组(内容包括节点 类型,组ID,节点ID,坐标X,坐标y),每次发送完一个分组后节点上的绿 灯变化一次。此外,利用本文中定义的串口通信协议,可以利用PC机的串 口对每个信标节点进行设置,包括设置节点组D、节点ID、数据发送频率及 功率、坐标X、坐标Y,从而方便地部署各个信标节点。信标节点的工作流程 如图4.10所示。 团 初始化Io I初始化cC2420 章蜀 图4.10信标节点工作流程 在初始化定时器完成后,定时器会周期性地触发中断,从而在这个中断 处理程序中发送信标分组。此外,通过串口中断可以接收对节点的设置和查 看命令。 2、非信标节点 非信标节点接收信标节点发送的信标分组并对这些数据进行处理和存 储,利用非信标节点提供的串口和以太网接口,还可以在PC上通过多种方式 察看定位的结果。非信标节点定位程序的主流程如图4。11所示,主要完成必 要的初始化工作。 西南交通大学硕士研究生学位论文 初始化定时器 ■■ 初始化信标分组链表 第58页 I创建UART数据l 接收线程 l } 等待用户输入 ● 处理用户输入 图4.11非信标节点程序主流程 在UART数据接收线程中循环接收来自UART的数据,当接收完一个正 确的数据帧时将其添加到信标分组链表中。此时在传感器节点模块实现的 UART通信协议基础上定义定位应用的帧格式如图4.12所示。 同步头(0x7E) 子协议控制字 控制字(o)‘77) 子协议正文 子协议正文 校验和 同步头 图4.12定位应用的UART通信协议帧格式 其中子协议控制字的含义及对应的子协议正文部分的内容如 表4.3所示。 串口数据接收线程中利用状态图来实现,设置一个flag标记,当其为O 时表示收到的是一般数据,为1时表示接收到帧头同步头,为2时表示接收 到帧尾同步头,状态图如图4.13所示。 西南交通大学硕士研究生学位论文 第59页 值 0x仃 0X00 0x01 0X02 Ox55 表4-3串口通信协议中子协议控制字的值、含义及子协议正文对应表 含义 子协议正文内容 收发数据 节点类型(1:表示信标节点,2:表示非信标节点)、 组D高字节、组D低字节、节点D高字节、节 点D低字节、位置X、位置Y .。 查看节点位置信息 空 返回节点位置信息 位置x,位置Y 设置节点位置信息 返回操作结果 位置X,位置Y Oxff表示操作失败;0x55表示操作成功 符 图4.13串口接收数据状态图 当flag=l时,将接收到的字符放到缓冲区中。当由flag=l变为flag=2时, 数据帧接收完成,开始对其处理。 当收到一个有效的信标分组时附加一个值为O的生存时间liveTime并将 该信标分组加入到链表当中。一个定时器周期性(Tm伍R INⅡ!RVAI,)地触 发,并在其中断处理函数中处理分组链表和进行位置计算,该中断处理函数 的流程图如图4.14所示。当每次计算出位置信息后,将该位置信息打印出来 的同时保存到文件location.file和数据库location.db中。 西南交通大学硕士研究生学位论文 第60页 图4.14非信标节点定时器中断处理流程 4.3.3实现及测试 信标节点程序的实现利用AVR Studio开发工具和GAINZ节点提供的任 务调度操作系统进行编程。 非信标节点的实现与编写PC机上Linux应用程序没有区别,利用C语 言调用Linux标准的API即可,编程过程中完全不用考虑硬件细节。编程完 成后采用前面搭建的交叉编译工具编译即可。编译命令如下: /opt/crosstool/gcc-4.1.1一glibc一2.3.2/arm-9tdmi-linux-gnu/bin/arm一9tdmi-linu X-gnU-gcc—o location location.c-lpthred-lsqlite3-L/opt/root/lib-I/opt/root/lib 编译完成后将生成可执行文件location,将其放到根文件系统的 /opt/location目录下,基于系统提供的功能,可以通过如下几种方式实现此目 的: >直接拷贝到根文件系统,再将根文件系统重新烧写到Flash中; 西南交通大学硕士研究生学位论文 第61页 >利用网络提供的功能,如FTP将文件上传到系统中; >利用U盘将数据拷贝到文件系统中 本文在测试过程中选择利用NFS方式启动系统,所以直接将location应 用程序拷贝到PC机上创建的根文件系统中的对应目录即可。 在进行部署测试时,选用五个GAINZ节点,其中一个作为非信标节点的 传感器节点模块部分,另外四个作为信标节点。四个信标节点A、B、C、D 的位置信息(x,y)分别设置为(0,O),(O,100),(100,100),(100,O), 其示意图如图4.15所示。 y▲T●,f B(0,100) A(0,0) 图4-15质心定位示意图 非信标节点的传感器节点模块接收到信标分组后通过UART转发给核心 处理模块进行处理。核心处理模块利用质心算法计算出位置信息,并将这些 位置信息分别打印出来、记录到文件location.file和数据库location.db中。在 本文的测试场景下,接收到不同节点编号的信号时的定位结果如表4.4所示。 数据证明定位结果即为接收到信号的所有信标节点的质心,正是质心定位算 法的预期结果。 西南交通大学硕士研究生学位论文 表4-4质心定位结果对照表 第62页 编号 接收到信号的节点编号 定位结果 1 A(0,0)、B(O,100)、C(100,100) E(33.66) 2 A(0,0)、B(0.100)、D(100,0) E(33.33) 3 A(O.O)、C(160,100)、D(100,0) E(66.33) 4 B(0,100)、C(100,100)、D(100,0) E(66.66) 5 A(0,0)、B(0.100)、C(100,100)、D(100,0) 有三种方式可以记录定位结果: E(50.50) ≯串口打印 通过串口打印出的定位信息如图4.16所示,当有定位结果产生时直接打 印出计算得出的坐标值x和Y。 》文件记录 记录在文件location.file中的内容如图4.17所示,记录了定位结果记录 的时间和坐标x、Y。 》数据库记录 查询数据库location db中的定位结果如图4.18所示,其中一行表示一条 定位结果,最开始的数字为序号,然后是x、Y,最后是记录定位结果的时间. 图4.16打印显示的位置信息 西南交通大学硕士研究生学位论文 第63页 图4.17文件location.file记录的位置信息 图4-18数据库location db巾记录的位置信息 另外,通过4.2节实现WEB服务器功能在非信标节点上实现查看定位数 据的WEB页面,可以使远程用户方便地了解传感器网络中相关节点的位置信 息。 此外,用户还可咀通过FTP远程下载位置信息文件location file,或者通 西南交通大学硕士研究生学位论文 过SSH登录系统后查看文件location.file或者数据库location.db。 第64页 4.4本章小结 本章4.1节描述了本文设计实现的无线传感器网络节点的典型应用场景, 包括代替有线传输、作为簇头节点、网关节点、服务器节点。同时为了便于 后续应用程序的开发,在4.2节为服务器节点实现了四种常用用户程序:数据 库,Web服务器,FTP服务器,SSH工具包。4.3节中,为了测试节点功能, 验证二次开发的快捷,设计了一个定位应用案例。该案例中包括信标节点和 非信标节点,非信标节点接收信标节点的数据,利用质心定位算法计算本节 点的位置。非信标节点利用4.2节实现的常用用户程序,分别将定位结果存储 到文件和数据库中。使用PC机的串口工具可查看定位结果的打印信息。使用 非信标节点提供的服务功能,在PC机上可以以WEB页面、FTP下载文件和 SSH远程访问等方式查看定位结果。 西南交通大学硕士研究生学位论文 第65页 结论 :日 ◆匕 无线传感器网络是一项融合多项技术的新兴技术,由于它具有广阔的应 用前景,受到社会各界广泛关注,产生了很多研究成果。本文研究无线传感 器网络现有的软硬件技术,总结了无线传感器网络技术涉及的众多软硬件技 术,且软件层次结构较多,实现复杂。然而,目前的硬件平台大多基于单片 机,仅能提供有限的处理、存储、通信能力;少部分节点采用32位处理器, 但成本太高、灵活性差,大大限制了应用范围。因此,本文结合无线传感器 网络的特点和科学研究及实际应用的需求,设计并实现了一个基于ARM与 Linux的无线传感器网络节点。 确定了课题研究内容后,本文采用了模块化的设计方法将节点分为两大 部分:传感器节点模块和核心处理模块。它们之间利用UART进行通信,只 要具有UART接口的传感器节点即可跟本文设计的传感器节点兼容使用。然 后研究了这两部分的硬件原理并且选用中科院GAINZ节点和友善之臂的 SBC2410开发板作为基础硬件平台。 ,接下来描述了在设计的硬件平台上需要实现的软件内容,简单介绍了传 感器节点模块的程序结构、核心处理模块的软件层次结构及开发流程,设计 了传感器节点模块和核心处理模块通信的串口通信协议。然后详细描述了基 于Linux的核心处理模块各部分软件的实现,顺利搭建起了本文的无线传感 器网络节点平台。 最后,介绍了实现的无线传感器网络节点的几种典型应用场景,并为该 节点实现了几种常用服务功能:数据库、WEB服务、FTP、SSH远程登录。 为了测试节点的应用,本文还设计实现了质心定位应用,采用四个GAINZ节 点作为信标节点,一个GAINZ节点作为传感器节点模块,在已经移植好的 Linux平台上实现质心定位程序并部署测试。测试结果充分证明了本文设计实 现的无线传感器网络节点的可用性、易用性和二次开发的方便性。 在本文的工作基础上,今后可以开展以下工作: > 自己制作PCB板,将核心处理模块和传感器节点模块都实现为硬件模 块,方便今后应用中硬件的开发: >将串口通信协议进行再次封装,实现为库函数的形式,二次开发就可 以无需了解该协议的细节; 西南交通大学硕士研究生学位论文 第66页 利用开源软件项目在节点上部署SNMP Agent,在管理中心部署SNMP Manager,实现基于SNMP的无线传感器网络管理。 西南交通大学硕士研究生学位论文 致谢 第67页 在硕士论文完成之际,我要向在这两年多的学习期间给予我帮助的人们表 示我的感谢。 首先,感谢我的导师陈红副教授。在我攻读硕士学位期间,她给予了我很 多的指导和帮助。陈老师渊博的学识,严谨的求学作风给了我很大的影响,是 陈老师指导我在这一行业中打下坚实的基础。从课题的选择,到设计进行过程 中出现的问题,最后到论文的修改,这整个过程中陈老师都给了我很多细心的 指导。在此,我要向陈老师表示我诚挚的敬意和衷心的感谢。 在毕业设计过程中,我还得到了很多老师和朋友的帮助,在这里也向他们 表示感谢,谢谢大家给我提出的宝贵意见和建议。 最后,还要感谢我的家人,是他们的理解和支持,给了我源源不断的学习 动力,帮助我顺利地完成学业。 西南交通大学硕士研究生学位论文 参考文献 第68页 [1]孙利民等.无线传感器网络.清华大学出版社,2005年5月 [2】于海斌,曾鹏等.智能无线传感器网络系统.科学出版社,2006年1月 [3]曾鹏,于海斌等.分布式无线传感器网络体系结构及应用支撑技术研究. 信息与控制.2004年6月,第33卷第3期 [4】Crossbow Technology,Inc.Company Overview.http://www.xbow.com [5】Crossbow Technology,Inc.2007 Wireless Sensor Networks Product Reference Guide 【6]于超.基于PXA270的无线传感器网络汇聚节点设计与实现.西北工业 大学硕士论文.2006年 [7】阎诺.无线传感器网络关键技术的研究与实现.大连海事大学硕士论 文.2007年 [8】欧明,魏臻.¥3C2410在ZigBee无线通信中的应用.科学技术与工 程.2007年9月,第17期 [9]Adi Mallikarjuna Reddy V AVU Phani Kumar,D Janakiram,and G Ashok Kumar.Operating Systems for Wirele.ss Sensor Networks:A Survey Technical Report.Distributed and Object Systems Lab.Department of Computer Science and Engineering.Indian Institute of Technology Madras,Chennai,India [1 0]P.Levis,S.Madden,J.Polastre,R.Szewczyk,k Whitehouse,A. Woo,D.Gay,J.Hill,M.Welsh,E.Brewer,and D.Culler.TinyOS:An Operating System for Sensor Networks.EECS Department,University of Califomia,Berkeley,Berkeley,Califomia [11]Shah Bhatti,James Carlson,Hui Dai,Jing Deng,Jeff Rose,Anmol Sheth, Brian Shucker,Charles Gruenwald,Adam Torgerson,Richard Han. MANTIS OS:An Embedded MuRithreaded Operating System for Wireless Micro Sensor Platforms.ACMKluwer Mobile Networks& .Applications(MONET)Joumal,Special Issue on Wireless Sensor Networks,August 2005 西南交通大学硕士研究生学位论文 第69页 [12]SOS project.http://nesl.ee.ucla.edu/projects/SOS [13]Hongzhou Liu,Tom Roeder,KevinWalsla,Rimon Barr,Emin Gun Sirer.DESIGN MLEMENTATIoN AND OF A SINGLE SYSTEM IMAGE OPERATING SYSTEM FOR AD HOC NETWORKS.Department of Computer Science,ComeU University [14]Seongsoo Hong,Tae—Hyung Kim.Designing a State-driven Operating System for Dynamically Reconfigurable Sensor Networks.School of Electrical Engineering& Computer Science,Seoul National University.Department of Computer Science and Engineering Hanyang University 【1 5]Mulder,S.Dulman,L.Van Hoesel,and E Havinga.PEEROS一-System Software for Wireless Sensor Networks.Preprint,August 2003 [1 6]AmbitentRT.http://www.ambient-systems.net/ [17]赵建华.无线传感器网络节点嵌入式操作系统的研究与应用.电子科技 大学,2007年 7 【1 8]Ciar all Lynch and Fergus O’ Reilly.PIC-based TinyOS Implementation.Centre for Adaptive Wireless Systems,Cork Institute of r_ ‘ ‘ J ec/mology . [19]支iJ华,杨志家.基于ARM核处理器的TinyOS实现.信息与控制, V01.35,No.2,Apt.,2006 [20]ZigBee Alliance.ZigBee Specification,Version 1.0.December 1 4th, 2004 [2 1]Crossbow Technology,Inc.Mesh Networking.http://www.xbow.corn [22]Millennial Net:MeshScape Wireless Sensor Networking System. http:llwww.millelmialnet.com · [23】苏圣夫.在Linux系统中设计并实作ZigBee无线网路协定层.国立成功 大学资讯工程研究所,硕士论文 [24]沈仲九等.Linux核心中IEEE 802.15.4通信协定之设计与实作.长庚大 学资讯工程研究所 [25】霍宏伟等.一种IPv6无线传感器网络节点的设计与实现.计算机应用, 2006年2月,第26卷第2期 西南交通大学硕士研究生学位论文 第70页 [26]吴永祥,李黔蜀.IPv6在无线传感器网络运用中的关键技术.网络与通 信,2007年第23卷第4.3期 [27]TinyDB:A Declarative Database for Sensor Networks.htt'p:// telegraph.CS.berkeley.edu 【28]洪玲.无线传感器网络数据库的研究与实现.电子科技大学硕士论文, 2007年 [29]宁波中科集成电路设计中心.GAINZ节点产品白皮书.2005年12月 [30]廖日坤,ARM嵌入式用开发技术白金手册,中国电力出版社,2007 年4月 【3 1]ATMEL.8-bit AVR Microcontroller with 128K Bytes In—Sysmm Programmable Flash ATmegal28/ATmegal28L, Rev. 2467N·—AVR--03/06 【32]Texas Instruments.CC2420 Preliminary Datasheet(rev 1.O),2003-1 1-1 7 [33]¥3C24 1 0X 32一Bit RISC Microprocessor USERtS MANUAL Revision 1.2,SAMSUNG Electronics [34]广州友善之臂计算机科技有限公司.SBC2410硬件使用手册. 【35]Hynix.HY57V56 1 620C(L)T(P)4 Banks x 4M X 1 6Bit Synchronous DRAM.Rev.0.5,June 2004 [36]SAMSUNG Electronics CO.,LTD.K9F1208UoM-YCBO,酗F1208UOM· ⅥB0 FLASH MEMORY. ’ [37]Cirrus Logic,Inc.CS8900A Product Data SheeL2001 [38]马潮.高档8位单片机ATmegal28原理与开发应用指南(上).北京 航空航天大学出版社,2004年12月 [39]Robert Love著.陈莉君,康华,张波译.Linux内核设计与实现.机械工业 出版社,2006年1月 [40]韦山东.嵌入式Linux应用开发完全手册.人民邮电出版社,2008年11 月 [41]KAR/M YAGHMOUR,构建嵌入式Linux系统,中国电力出版社, 2004年12月 [42]宋宝华,Linux设备驱动开发详解,人民邮电出版社,2008年4月 西南交通大学硕士研究生学位论文 第71页 [43]Rusty Russell,Daniel Qumlan,Christopher Y.eoh.Filesystem Hierarchy Standard.Filesystem Hierarchy Standard Group,January 28 2004 [44]BusyBox:The Swiss Army Knife of Embedded‘Linux.http://www. busybox.net/ [45]Network file system.http://en.wikipedia.org/wiki/Network_file_.system [46]David Woodhouse.JFFS:111e Joumalling Flash File System.Red Hat. Inc. 【47】JONATHAN CORBET,ALESSANDRO RUBINI&GREG KROAH. HARTMAN著.Linux设备驱动程序.魏永明,耿岳,钟书毅译.中国电 力出版,2007年7月 [48]About SQLite.http://www.sqlite.org/ [49]刘文涛,胡家宝.嵌入式Web服务器的分析与研究.单片机与嵌入式系 统应用,2002年9月 [50]Boa Webserver:Introduction.http://www.boa.org/ [5 1]vsftpd Probably the most secure and fastest FTP server for UNIX.1ike systems.http://vsftpd.beasts.org/ [52]OpenSSH:http://www.openssh.tom/ [53]Dropbear SSH server and client:http://matt.UCC.asn.au/dropbear/ dropbear.html 西南交通大学硕士研究生学位论文 攻读硕士期间发表的论文 第72页 发表的论文: [1]周应宾,陈红.基于ARM与Linux的无线传感器网络节点设计.科协论坛, 2009年第3期 基于ARM与Linuz的无线传感器网络节点设计与实现 作者: 学位授予单位: 周应宾 西南交通大学 相似文献(10条) 1.期刊论文 魏雅川.梁彦.陈延军.周问天 无线传感器网络自适应声音目标定位算法 -传感技术学报2010,23(3) 基于声音能量的无线传感器网络目标定位算法因简单易行而受到广泛的关注.传统算法未考虑环境对衰减因子的影响,定位精度较差;提出一套辨识衰 减因子的方案,并针对不同环境自适应改变衰减因子以优化加权质心算法的权重,设计了一种自适应加权质心定位算法.实验结果表明,本文算法较之传统 加权质心定位算法大幅度提高了定位精度,且适用于更复杂的场景中. 2.期刊论文 钟森.周小佳.闫斌.Zhong Sen.Zhou Xiaojia.Yan Bin 基于移动锚节点的无线传感器网络三边质心定 位 -计算机测量与控制2009,17(7) 探讨了无线传感器网络(WSN)定位技术的意义,研究基于移动锚节点的测距定位技术;设计了移动锚节点运动轨迹,在利用无线电与超声波到达时间差 (TDOA)测得锚节点到待定位节点距离的情况下,给出了一种新的定位算法-三边质心定位算法,该算法通过求解待定位节点的定位近点所构成几何图形的质 心来完成定位;仿真结果表明,该定位技术能够明显减小定位误差与锚节点数量. 3.期刊论文 邓彬伟.黄光明.Deng Binwei.Huang Guangming WSN中的质心定位算法研究 -计算机应用与软件 2010,27(1) 节点定位是无线传感器网络(WSN)中的关键技术之一.通过对质心定位算法的分析,提出了一种改进的质心算法(CSA)--以距离未知节点最近的锚节点 为基准找出差异性最大的估计点,采用三角质心和多边质心计算估计点坐标提高定位精度.通过MATLAB仿真表明算法是有效可行的. 4.期刊论文 杨东勇.顾东袁.傅晓婕.YANG Dong-yong.GU Dong-yuan.FU Xiao-jie 一种基于RSSI相似度的室内定位 算法 -传感技术学报2009,22(2) 无线传感器网络中节点的位置信息在很多应用中具有重要意义.本文研究了实际环境中节点的RSSI特性,为提高无线传感器节点定位的精度,提出了无 线传感器节点在空间环境上的RSSI相似度概念,采用RSSI相似度作为权重因子,改进了加权质心算法.实验结果表明.改进后的算法具有更小的平均定位误 差、更强的环境干扰鲁棒性. 5.会议论文 王栋栋.孙燕 对加权质心定位算法的改进 2008 利用RSSI值的影响力对信标节点加权计算,已被证明是改善基本质心定位精度有效方法。但RSSI值受到地理环境和气候变化的影响较大,研究发现 ,RSSI值与距离的映射关系实际上是随机过程,用直接测得的RSSI值会引起较大的误差。本文提出一种根据环境情况对信标节点位置与RSSI测试值进行 关联修正方法。实验表明,该方法降低了环境变化引起的误差,明显提高了定位的精度。 6.期刊论文 高雷.郑相全.张鸿.GAO Lei.ZHENG Xiang-quan.ZHANG Hong 无线传感器网络中一种基于三边测量法和 质心算法的节点定位算法 -重庆工学院学报(自然科学版)2009,23(7) 针对无线传感器网络在节点均匀分布的情况下节点定位精度较差的问题,提出了三边质心定位算法.该算法利用节点均匀分布的先验信息将质心定位 思想引入到三边测量法中,通过计算相交圆的公共区域的质心来提高对未知节点位置估算的精度.仿真结果表明,三边质心定位算法与三边测量法相比有效 地降低了未知节点的位置误差,提高定位精度. 7.学位论文 王金鑫 基于多面体质心的无线传感器网络节点定位算法研究 2008 随着嵌入式计算、无线通信、分布式信息处理和微电子机械系统(MEMS)等技术的快速发展,具有感知、数据处理和无线通信能力的传感器以及由其 构成的无线传感器网络技术逐渐兴起。由于传感器节点在布设时采取随机投放的方式,无线传感器网络中大多数节点位置不能事先确定,但对于很多应 用,没有位置信息的监测消息是毫无意义的。因此,在传感器网络中,传感器节点的定位是各种应用的前提和基础。 本论文针对目前大多数传感器节点的定位研究都只局限于二维平面的情况,提出了一种面向三维空间的基于多面体质心的无线传感器网络自身定位 算法。该算法针对三维空间环境下的无线传感器网络,从空间几何的角度出发,通过充分考虑实际的三维空间环境对传感器节点信号传输的影响,引入 辅助三维坐标系,在可连通的传感器节点之间建立相应的空间几何关系,提出包含未知节点的不规则多面体构成方法;研究不规则多面体与平面多面体 的映射关系以及三维空间映射误差模型与修正补偿算法,使平面多面体不仅包含传感器未知节点,而且可容易通过计算平面多面体的质心来估计未知节 点的位置,从而减小定位算法计算量,节省网络能耗,提高定位精度。理论分析与仿真实验表明,该算法是一种完全基于网络连通性的分布式算法,算 法设计简单,计算量小,节点间通信开销少,适合于各种规模的无线传感器网络的节点定位。 为了增强算法实用性,满足某些特定场合的高精度的定位需求,本论文在多面体质心定位基础上提出了一种改进的使用遗传算法优化多面体质心定 位结果的方法。该方法通过建立节点定位相关的数学约束关系,将传感器节点定位问题转换成为函数极值的求解,然后引入遗传算法,在包含未知节点 的不规则多面体内求解该数学约束关系实现定位,仿真试验证明,该方法有效的提高了多面体质心定位算法的定位精度,适合高精度的节点定位要求。 8.学位论文 秦念庆 基于RSSI的无线传感器网络多边定位算法研究 2009 无线传感器网络是近年发展起来的一种新型数据获取技术,是现代传感器技术、MEMS、通信技术、嵌入式计算技术和分布式信息处理技术等综合交 叉起来的一个研究领域,在军事侦察、环境监测、医疗和建筑物监测等领域有着广阔的应用前景。 定位作为WSN的重要支撑技术之一,成为该领域的一个研究热点。虽然出现了接收信号角度定位、DV—hop定位、质心定位和近似三角形内点测试法 定位等多种定位算法,但总体而言,由于定位是一个不适定问题,目前的算法普遍存在定位精度不高的问题,本文针对无线传感器网络中的平面定位和 空间定位问题,提出利用Tikhonov正则化方法和迭代Tikhonov正则化方法解决多边定位中的不适定问题。研究了定位模型的建立、信道衰减指数的确定 、定位最优参考点数的选取、正则化参数的选取、迭代终止原则的确定等问题。 研究结果表明,在室外平面定位时,当RSSI测距的对数距离路径损耗模型信道衰减指数为4时测距误差最小,当定位参考点数为5时可获得最优定位 结果。采用Tikhonov正则化方法,正则化参数α取400,迭代Tikhonov正则化方法正则化参数α取700,迭代终止原则取△≤3时,这两种方法均可取得最 优的定位结果,最小可使误差降低到1m以内且迭代法在5步左右收敛。在室内空间定位时,针对有障碍物阻挡的情况,将对数距离路径损耗模型的信道衰 减指数修正为6时可获得最佳测量距离。Tikhonov正则化方法参数α取50,迭代Tikhonov正则化方法参数α取100,迭代终止原则取 △=‖Xi+1α,δ—Xiα,δ‖、△≤1时,正则化方法的定位结果各自达到最优且迭代法在5步左右收敛,定位误差普遍降低到2m左右,定位结果要明显 优于经典的极大似然法定位结果。 9.会议论文 金鑫 一种改进型无线传感器网络质心定位算法 2008 文中提出了一种基于接收信号强度指示(RSSI)加权的改进型无线传感器网络质心定位算法,并进行了算法仿真。相比普通的质心定位算法定位精度有 所提高。 10.期刊论文 郜丽鹏.朱梅冬.杨丹.GAO Lipeng.ZHU Meidong.YANG Dan 基于ZigBee的加权质心定位算法的仿真与 实现 -传感技术学报2010,23(1) 为了研究节点定位算法的实现方法,提出了一种新的加权质心定位算法.这种算法首先通过对无线电传播路径损耗模型的分析,结合具体环境的实验 ,得到信号传播的经验模型,然后利用信标节点对未知节点的不同影响力来确定加权因子,进行加权质心算法定位.最后在对定位数据处理和分析的基础上 ,选取三个RSSI最大的信标节点进行定位计算,进一步改善了节点定位精度.仿真和实验结果表明,这种加权质心算法可应用于区域定位. 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1573530.aspx 下载时间:2010年5月25日
更多简介内容

评论

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })