王家兵,吳洪明,楊志剛
(1.重慶交通大學 圖書館,重慶400074;2.重慶交通大學 應用技術(shù)學院;3.重慶交通大學 機電與汽車工程學院)
無線傳感器網(wǎng)絡操作系統(tǒng)(WSNOS)在構(gòu)建高效、安全可靠、可擴展、分布式無線傳感器網(wǎng)絡(WSN)時起著核心作用。由于WSN節(jié)點往往處于苛刻的工作環(huán)境,計算能力、內(nèi)存、功率等資源相對有限,難以采用傳統(tǒng)操作系統(tǒng)和嵌入式操作系統(tǒng)。目前有TinyOS、Contiki、MANTIS、LiteOS、Nano-RK、t-Kernel等各種 WSNOS[1-3],人們特別是對 TinyOS[4]、Contiki[5]、Mantis[6]研究較多。這些 WSNOS各有優(yōu)勢,但也存在一些不足,如TinyOS采用nesC語言,學習曲線長;Contiki、Mantis支持的硬件平臺較少。近年來,拉脫維亞大學(University of Latvia)相關(guān)機構(gòu)研發(fā)的開源移動代理網(wǎng)狀傳感器網(wǎng)絡操作系統(tǒng) Mans-OS[7-9](Mobile agent netted sensor Operating System),其研究和發(fā)展相當活躍,在野生動物監(jiān)控[10]、道路狀況監(jiān)測[11]、環(huán)境監(jiān)測[12]等實際應用中獲得了良好的效果。本文對MansOS的架構(gòu)、相關(guān)特性及應用方法進行了分析、研究,供廣大WSNOS研究與使用者參考。
MansOS采用模塊化分層設計,劃分為三層:硬件表示層(Hardware Presentation Layer,HPL)、硬件抽象層(Hardware Abstraction Layer,HAL)和 硬 件 接 口 層(Hardware Interface Layer,HIL),體系結(jié)構(gòu)如圖1所示。其中最底層HPL是與硬件直接進行交互,定義了芯片等低級硬件的相關(guān)服務;中間層HAL包含了特定硬件平臺和擴展模塊相關(guān)代碼,完成芯片選擇、引腳分配和平臺參數(shù)設定等功能;最上層HIL定義了設備驅(qū)動與設備管理,為應用提供統(tǒng)一的、平臺無關(guān)的資源訪問服務。其體系結(jié)構(gòu)分離出了芯片相關(guān)、架構(gòu)相關(guān)、平臺相關(guān)、平臺獨立幾個層面的功能。MansOS沒有采用傳統(tǒng)操作系統(tǒng)單一、嚴格獨立的硬件抽象層,而允許用戶直接訪問所有層面功能,以更好利用特定的硬件設備,提高效率和靈活性,同時保持易于移植、代碼量小。
圖1 MansOS體系結(jié)構(gòu)[13]
MansOS整個源碼文件目錄如圖2所示,hil文件夾為硬件接口層,對用戶提供LED、ADC、USART、Sleep、無線通信以及傳感器等平臺無關(guān)的統(tǒng)一應用程序接口;kernel文件夾為操作系統(tǒng)核心,包含設備管理、系統(tǒng)引導、系統(tǒng)調(diào)用支持等;chips文件夾為硬件表示層芯片相關(guān)代碼,包含各個微處理器與設備驅(qū)動;arch文件夾為 MSP430、AVR等架構(gòu)相關(guān)代碼,platforms文件夾為Arduino、TelosB等平臺相關(guān)代碼,I/O引腳、功能函數(shù)、與平臺和架構(gòu)相關(guān)常量也在arch與platform層定義。
圖2 MansOS源碼文件目錄
1.2.1 內(nèi)核設計
MansOS內(nèi)核設計為支持事件驅(qū)動與多線程兩種應用執(zhí)行模式。系統(tǒng)啟動時調(diào)用initPlatform()進行平臺初始化并完成常用組件初始化,然后根據(jù)不同執(zhí)行模式,調(diào)用不同函數(shù)。事件驅(qū)動模式下,由于GCC不支持執(zhí)行main()函數(shù)后的事件響應,所以采用調(diào)用appMain()函數(shù)來代替main函數(shù)。多線程模式下,初始化完畢直接調(diào)用main()函數(shù),再創(chuàng)建核心線程和用戶線程兩個線程。
默認情形MansOS采用事件驅(qū)動模式。事件驅(qū)動模式的優(yōu)點是大量功能由中斷子程序?qū)崿F(xiàn),應用程序簡潔,代碼量小,只需管理一個堆棧,無需多線程時復雜的內(nèi)存管理,節(jié)省RAM占用量。不利的是,整個程序設計流程難以在代碼中反映,給程序編寫及調(diào)試帶來難度;另外,中斷嵌套要求整個操作系統(tǒng)代碼可重入,中斷子程序執(zhí)行時間太長可能導致系統(tǒng)阻塞。事件驅(qū)動模式下,應用程序中需注冊回調(diào)函數(shù),編寫相應的回調(diào)函數(shù)代碼,在主程序中通過調(diào)用sleep()進入低功耗省電模式。
對于線程模式,MansOS采用了核心線程與用戶線程層次式設計。核心線程負責系統(tǒng)事務處理,具有高優(yōu)先級別,用戶線程可以中斷其他用戶線程,但不能中斷核心線程,有多個用戶線程時則采用時間片輪轉(zhuǎn)法和優(yōu)化級兩種算法進行調(diào)度。MansOS采用了信號量機制以實現(xiàn)線程同步,用堆棧檢測來防止堆棧溢出。通過各線程主循環(huán)中調(diào)用sleep(),在主線程及用戶線程均不活動時,系統(tǒng)進入省電模式。
1.2.2 文件系統(tǒng)
MansOS設計了一個接口類似UNIX的簡單文件系統(tǒng),把物理Flash芯片抽象為邏輯文件,并提供了各種基本的文件操作命令,使得用MansOS構(gòu)造的無線傳感器節(jié)點能對采集到的數(shù)據(jù)進行保存和記錄。
MansOS文件系統(tǒng)把Flash芯片分成內(nèi)存段和固定大小的數(shù)據(jù)塊。一個內(nèi)存段是可一次擦除的最小內(nèi)存單元,含多個數(shù)據(jù)塊,數(shù)據(jù)塊的大小可以選定,一個文件由一系列的數(shù)據(jù)塊鏈接而成,這使得文件的大小可以動態(tài)地分配。各個數(shù)據(jù)塊所在段、已使用、未使用、可擦除等標識信息組成一個塊表,保存在EEPROM中。各文件的文件名、第一個數(shù)據(jù)塊號、文件大小等信息也保存在EEPROM中。MansOS文件系統(tǒng)采用單級目錄,數(shù)據(jù)只可追加,不可改寫,整個文件系統(tǒng)代碼小而管理簡單有效。
1.2.3 組件化設計與裁減機制
另外,在交通組織過程中,還需要融入交通綜合性以及交通科學性發(fā)展的目標,以充分利用原有交通設置為宗旨,保證最好的改擴建效果。根據(jù)項目實際情況,選擇最合理的施工方案,保證施工結(jié)果可以滿足實際安全需要。
為有效解決應用WSNOS時可能發(fā)生的目標代碼大、資源利用率低的問題,MansOS采用組件化的設計模式,以組件配置與選用來實現(xiàn)核心程序裁減。傳統(tǒng)桌面操作系統(tǒng)一般采用動態(tài)創(chuàng)建、動態(tài)終止線程與進程,資源受限的WSNOS一般采用靜態(tài)編譯。MansOS采用編譯時對組件進行充分選配,使運行時再次配置的情況最少,目標應用代碼達到最小。極端情況下,用戶甚至可把整個OS作為常用函數(shù)庫來使用。
內(nèi)核裁減方面,MansOS通過編譯時交互與非交互兩部分來完成。交互部分由配置文件實現(xiàn),用戶在系統(tǒng)默認配置模板基礎上進行平臺相關(guān)、架構(gòu)相關(guān)、應用相關(guān)的配置,定義組件間包含、互斥關(guān)系;非交互部分是GCC與GNU binutils等編譯工具自動完成的代碼優(yōu)化、無關(guān)代碼剔除等操作。
1.2.4 運行時管理與無線再編程支持
MansOS提供了一個命令行界面(shell)供用戶進行運行時的管理,其基于簡單系統(tǒng)消息協(xié)議(Simple System Message Protocol,SSMP),以廣播或單播的形式對整個網(wǎng)絡中可到達的節(jié)點進行管理。shell可采用交互形式,也可在腳本中執(zhí)行。
無線再編程使無線傳感器網(wǎng)絡能進行節(jié)點代碼遠程更新,使應用開發(fā)、部署及維護更具靈活性。MansOS實現(xiàn)了一個有效的無線再編程機制,把整個無線再編程分為4個階段,各階段內(nèi)容及實現(xiàn)方法如表1所列。
表1 MansOS無線再編程實現(xiàn)流程
應用無線再編程時,節(jié)點自舉后,引導程序會下載代碼替換原OS映像文件,完成OS映像文件更新。MansOS引導程序引入了檢測系統(tǒng)是否正確引導機制,多次引導失敗時,會自動重新加載上次OS映像,以防止無線再編程失敗時節(jié)點不可管理的現(xiàn)象發(fā)生。為節(jié)省更新時間和功耗,MansOS把代碼分成了用戶代碼段與核心代碼段,無線再編程可選擇對用戶代碼段或核心代碼段進行部分更新。實際應用中,無線再編程會引起節(jié)點代碼量增加,存在每次更新花費時間較長等問題,應根據(jù)具體情況選用。
1.2.5 可移植性與通信協(xié)議支持
為了能容易移植到各種處理器架構(gòu),MansOS采用了平臺與代碼盡可能獨立的設計,并且內(nèi)含MSP430、Atmel AVR以及PC架構(gòu)源碼,可直接應用于Arduino Duemilanove(ATmega328PMCU)、Tmote Sky(MSP430F1611 MCU)、AdvanticSYS XM1000(MSP430F261MCU)以及Zolertia Z1(MSP430F2617MCU)等平臺。MansOS對UART、SPI、I2C總線等通信提供了平臺獨立的統(tǒng)一應用程序接口,使外圍設備的驅(qū)動可應用于不同平臺,只在進行編譯時再鏈接具體的實現(xiàn)子程序庫即可。無線通信方面,MansOS支持IEEE 802.15.4兼容無線組網(wǎng),如2.4G ZigBee,并采用uIPv6實現(xiàn)對IPv6協(xié)議棧的支持。
MansOS發(fā)展源于LiteOS,架構(gòu)上融入了Contiki、MANTIS的一些優(yōu)點,使其在易用性、可裁剪性、目標代碼大小以及平臺可移植等方面均有良好表現(xiàn)。相比Tiny-OS,MansOS采用C語言,代碼更易編寫、理解和管理;相比Contiki,MansOS的組件化設計與裁剪機制使資源利用更合理,生成目標代碼更??;相比Mantis,MansOS把線程分為核心線程和用戶線程,且核心線程總優(yōu)先于用戶線程,使線程調(diào)度更簡單;相比LiteOS,MansOS分離出了架構(gòu)相關(guān)、平臺相關(guān)代碼,可移植性更好。
表2為TinyOS、Contiki、MANTI、LiteOS、MansOS在各性能方面的對比。
MansOS相關(guān)應用的開發(fā)需在Linux環(huán)境下進行交叉編譯鏈接,或在Windows平臺下,用Cygwin或 MinGW與MSYS進行。開發(fā)環(huán)境構(gòu)建包括源碼下載安裝、編譯器和編譯工具安裝等方面內(nèi)容。
MansOS的源碼可由http://code.google.com/p/mansos/下載[14],也可采用SVN從http://mansos.net/svn/mansos/獲取最新源碼。
編譯器和編譯工具安裝應根據(jù)目標平臺架構(gòu),選用對應的編譯器。對于 MSP430平臺,采用 MSP430MCU GCC工具鏈,可從http://mspgcc.sourceforge.net下載,包括 gcc-msp430、msp430-libc、binutils-msp430等。對于ATMega328PMCU 的 Arduino Duemillanove等 Atmega平臺,采用 AVR-GCC工具鏈,包括gcc-avr、avr-libc、binutils-avr、avrdude等,可 從 http://www.nongnu.org/avrlibc/查到相關(guān)說明文檔及下載。
MansOS開發(fā)環(huán)境還需要常規(guī)的UNIX命令行工具,如make等。另外,由于MansOS采用了Python腳本完成目標代碼鏈接,需安裝好Python。
實際工程應用開發(fā)中還有對應的目標板,如Tmote Sky、Arduino Duemillanove控制板等,在沒實際目標板時,僅可用MansOS內(nèi)建的PC仿真平臺進行初步仿真。
典型的 MansOS應用一般包括config、Makefile、main.c三個文件。config是應用配置文件,包括MansOS組件的選配、編譯常量以及MCU型號、CPU主頻等相關(guān)定義;Makefile為GNU make使用文件,用于為各種架構(gòu)生成目標代碼及上載代碼到目標板;main.c為應用程序C源碼文件。MansOS在apps/demo文件夾提供了一系列基本應用、傳感器應用、無線通信應用以及設備驅(qū)動等源碼示例,供開發(fā)者參考。開發(fā)應用時,編寫好config、Make-file、main.c文件,再運行make完成編譯、鏈接及目標代碼下載到目標板。一個MansOS簡單應用的main.c源碼如下:
表2 操作系統(tǒng)性能對比
MansOS應用程序的調(diào)試與測試功能通??捎肞RINTF、PRINT及PRINTLN函數(shù)來實現(xiàn)。默認情形下,對應的輸出發(fā)送到串口,通過監(jiān)聽串口輸出可得到相關(guān)的信息。Linux下可采用minicom,Windows下可采用putty,監(jiān)聽前先設置好串口:波特率38 400,數(shù)據(jù)位8位,停止位1位,無校驗,無流控制。MansOS也提供了一個python腳本(mos/pc/tools/dumpserial/dumpser.py)用于串口監(jiān)聽,另外,通過應用配置文件中設置CONST_DPRINT_TO_RADIO=1,可改變串口輸出到無線通信端口,在有LCD時,相關(guān)信息也可發(fā)送到LCD上顯示。
MansOS提供了一個命令行工具(mansos/pc/shell),可通過串口或無線通信進行WSN節(jié)點的控制和配置,包括所有節(jié)點列表、讀傳感器值、設置傳感器、重啟、下載代碼、上載代碼等操作。對于MSP430MCU的傳感器板,MansOS還支持使用mspsim工具進行調(diào)試。
利用WSNOS結(jié)合成熟硬件平臺來部署和實現(xiàn)各種應用,部署快速,編程簡潔,同時滿足穩(wěn)定、低功耗等要求,是WSN重要的發(fā)展方向。
MansOS作為一款功能齊全、可移植性強、易于使用的開源WSNOS,具有巨大的發(fā)展?jié)摿Α?/p>
MansOS從2007年開始發(fā)展,目前仍處于從研究走向?qū)嶋H應用的階段,不斷進行著更新,一些特性仍在實際應用中進行測試、研究和改進。如開發(fā)環(huán)境方面,其集成開發(fā)環(huán)境在功能及適用性方面仍存在很多不足,需作大量的改進以更好地支持實際工程的仿真、部署和測試;另外,需進一步開發(fā)以支持更多種硬件平臺及無線通信協(xié)議,特別是在目前WSN與云計算整合的發(fā)展趨勢下,如能考慮添加與云計算平臺的融合,則能實現(xiàn)更多、更強大的應用。
[1]劉金娟.無線傳感器網(wǎng)絡協(xié)議及操作系統(tǒng)研究[D].淮南:安徽理工大學,2009.
[2]Thang Vu Chien,Hung Nguyen Chan,Thanh Nguyen Huu.A comparative study on operating system for Wireless Sensor Networks[C]//Proceedings of International Conference on Advance Computer Science and Information System 2011(ICACSIS 2011).Indonesia Jakarta:IEEE eXpress Conference Publishing,2011:73-78.
[3]Farooq M O,Kunz T.Operating Systems for Wireless Sensor Networks:A Survey [J].Sensors 2011,11(6):5900-5930.
[4]段海龍,楊麗,任淑艷,等.無線傳感器網(wǎng)絡操作系統(tǒng)TinyOS的研究與實例開發(fā)[J].科技通報,2012,28(4):200-202.
[5]冀宇鑫,楊冬,秦雅娟,等.基于 WSNs平臺的Contiki通用移植方法研究[J].計算機技術(shù)與發(fā)展,2012,22(11):134-137.
[6]劉莉,黃海平.基于MantisOS的無線傳感器網(wǎng)絡應用開發(fā)模型[J].信息技術(shù),2010(6):127-129.
[7]MansOS[EB/OL].[2013-01].http://mansos.edi.lv.
[8]G Strazdins,A Elsts,L Selavo.MansOS:easy to use,portable and resource efficient operating system for networked embedded devices[C]//Proceedings of the 8th ACM Conference on Embedded Networked Sensor Systems(SenSys'10).New York:ACM,2010:427-428.
[9]A Elsts,G Strazdins,A Vihrov,et al.Design and Implementation of MansOS:a Wireless Sensor Network Operating System[J].Scientific Papers University of Latvia,2012,787:79-105.
[10]R Zviedris,A Elsts,G Strazdins,et al.LynxNet:Wild Animal Monitoring Using Sensor Networks[C]//Proceedings of the 4th international conference on Real-world wireless sensor networks.Berlin Heidelberg:Springer,2010:170-173.
[11]Artis Mednis,Atis Elsts,Leo Selavo.Embedded Solution for Road Condition Monitoring Using Vehicular Sensor Networks[C]//Proceedings of the 6th International Conference on Application of Information and Communication Technologies(AICT 2012).Germany Stuttgart:IEEE eXpress Conference Publishing,2012:248-252.
[12]Atis Elsts,Rihards Balass,Janis Judvaitis,et al.SAD-mote:A Robust and Cost-Effective Device for Environmental Monitoring[C]//ARCS'12Proceedings of the 25th international conference on Architecture of Computing Systems,Berlin Heidelberg:Springer,2012:225-237.
[13]MansOS [EB/OL].[2013-01].http://mansos.net/wiki/index.php/MansOS.
[14]MansOS[EB/OL].[2013-01].http://code.google.com/p/mansos.