劉立功 韓霜 劉健
摘要:無(wú)線船舶氣象儀終端是通過(guò)氣象傳感器來(lái)獲取氣象要素的設(shè)備。該文采用高性能CPU搭建硬件平臺(tái),對(duì)基于嵌入式Linux操作系統(tǒng)開(kāi)發(fā)的船舶氣象儀接收終端作了概述,利用組建的ZigBee無(wú)線通訊技術(shù)將氣象要素輸入數(shù)據(jù)接收終端處理,從而實(shí)現(xiàn)了對(duì)氣象數(shù)據(jù)的直觀觀測(cè)。整個(gè)設(shè)計(jì)流程主要實(shí)現(xiàn)了ZigBee無(wú)線網(wǎng)絡(luò)組建、嵌入式Linux啟動(dòng)項(xiàng)bootloader的編寫、Linux的移植以及圖形系統(tǒng)的加載。整個(gè)系統(tǒng)完成了對(duì)數(shù)據(jù)的輸入采集、進(jìn)程處理以及圖形化顯示,實(shí)現(xiàn)了接收終端的功能。
關(guān)鍵詞:ZigBee;接收終端;Linux;啟動(dòng)項(xiàng);圖形系統(tǒng)
中圖分類號(hào):TP355+.3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)23-5704-02
The Data Receiving Terminal of Ship Meteorological Design and Implement
LIU Li-gong, HAN Shuang, LIU Jian
(Navy Maritime Security Repair Factory, Qingdao 266071, China)
Abstract: Ship Meteorological instrument sensors and data processing terminal equipment access to the data of the Meteorological Ele? ments, high-performance CPU to build the hardware platform, ship meteorological instrument based on embedded Linux operation sys? tem developed by the receiving terminal are summarized in meteorological elements of the input data by the receiving terminal processing in order to achieve a visual observation of the meteorological data. Throughout the design process of embedded Linux startup items written in the bootloader, Linux migration and graphics system load. The entire system to completing the collection of data input, process handing and graphical display of the receiving terminal.
Key words: meteorological; receiving terminal; Linux; startup items; graphic system
由于艦船在航行中依賴于氣象數(shù)據(jù)的采集與分析,因此船舶氣象儀起著采集、分析、計(jì)算氣象要素的作用。當(dāng)前船舶氣象與電子信息技術(shù)結(jié)合越來(lái)越緊密,尤其是對(duì)設(shè)備的智能化要求也在不斷提高。在智能系統(tǒng)的應(yīng)用中,操作系統(tǒng)是必不可少的一環(huán)。Linux操作系統(tǒng)以穩(wěn)定、安全、開(kāi)放、核心可以自主掌握、內(nèi)核能夠?qū)崿F(xiàn)多任務(wù)處理等他點(diǎn),能夠?qū)崿F(xiàn)對(duì)設(shè)備數(shù)據(jù)的多進(jìn)程與實(shí)時(shí)性操作,因此將其作為了系統(tǒng)軟件平臺(tái)。該文給出了整個(gè)系統(tǒng)包括ZigBee組建、底層硬件組成、內(nèi)核與文件系統(tǒng)的移植、設(shè)備驅(qū)動(dòng)的編寫以及圖形系統(tǒng)的實(shí)現(xiàn),并且在應(yīng)用層代碼中利用RS485串口驅(qū)動(dòng)接口接收氣象數(shù)據(jù)的方法,實(shí)現(xiàn)了對(duì)氣象數(shù)據(jù)的收集與處理[1],在實(shí)際應(yīng)用中具有可靠性。
1硬件平臺(tái)構(gòu)成
該系統(tǒng)使用S3C2440處理器為核心搭建嵌入式硬件平臺(tái),加載FLASH存儲(chǔ)器、SDRAM存儲(chǔ)器、顯示控制模塊、接口驅(qū)動(dòng)以及相應(yīng)控制部件[2],數(shù)據(jù)的獲取由電源供電電路提供系統(tǒng)需要的+5v直流電,整體結(jié)構(gòu)如圖1所示。
ZigBee無(wú)線網(wǎng)絡(luò)基于IEEE802.15.4國(guó)際標(biāo)準(zhǔn)、上層協(xié)議為ZigBee協(xié)議棧,具有低功耗、短時(shí)延、高可靠、抗干擾以及冗余性能等優(yōu)點(diǎn)。本系統(tǒng)采用了CEL公司MeshConnect ZICM2410模塊,它由一個(gè)含有基帶modem的射頻收發(fā)器(cc2430),MAC和一個(gè)內(nèi)嵌的8051微處理器,支持SPI,串口等外設(shè),支持的傳輸距離為1000米。
2軟件平臺(tái)設(shè)計(jì)
2.1 bootloader的編寫與加載
Bootloader是嵌入式操作系統(tǒng)設(shè)備在啟動(dòng)之前首先運(yùn)行的固定代碼。通過(guò)這段代碼系統(tǒng)可以初始化設(shè)備、建立內(nèi)存空間的映射,為最終在內(nèi)存中調(diào)用和加載操作系統(tǒng)內(nèi)核建立正確的環(huán)境。程序設(shè)計(jì)流程如圖2。
CPU上電會(huì)自動(dòng)運(yùn)行處在FLASH存儲(chǔ)器上零地址處所拷貝的bootloader異常向量表并執(zhí)行指令,之后對(duì)硬件進(jìn)行設(shè)置并對(duì)RAM內(nèi)存空間進(jìn)行映射規(guī)劃,設(shè)置堆棧,然后引導(dǎo)代碼將操作系統(tǒng)拷貝到RAM空間運(yùn)行,最后將對(duì)CPU的控制權(quán)交由Linux操作系統(tǒng)執(zhí)行。
2.2 Linux操作系統(tǒng)的移植
Linux操作系統(tǒng)是整個(gè)軟件結(jié)構(gòu)的核心,由于具有多任務(wù)實(shí)時(shí)性強(qiáng)的有點(diǎn)在氣象探測(cè)領(lǐng)域中應(yīng)用中具有相當(dāng)大的優(yōu)勢(shì)[3]。氣象終端設(shè)備平臺(tái)基于Linux2.6.27.8內(nèi)核版本,此核心支持任務(wù)的實(shí)時(shí)搶占,因此能夠提高系統(tǒng)實(shí)時(shí)接收以及動(dòng)態(tài)處理氣象數(shù)據(jù)的性能。
Linux操作系統(tǒng)移植主要為配置、修改和裁剪Linux2.6.27.8內(nèi)核版本,首先修改編譯器以便搭建交叉編譯環(huán)境,設(shè)置編譯路徑;然后修改FLASH分區(qū)、校驗(yàn)信息以及啟動(dòng)選項(xiàng),使其與bootloader的配置相符合;修改內(nèi)核版本的時(shí)鐘配置;對(duì)需要使用的各種設(shè)備、總線、文件系統(tǒng)等進(jìn)行圖形化下的配置;使用命令make進(jìn)行內(nèi)核的編譯,成功之后會(huì)生成zImage可執(zhí)行文件,用于加載至內(nèi)存供CPU運(yùn)行[4]。
2.3設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件之間的門戶,對(duì)用戶提供了統(tǒng)一的接口。一般來(lái)說(shuō)是把設(shè)備映射為一個(gè)特殊的設(shè)備文件,用戶程序經(jīng)過(guò)操作系統(tǒng)可以像對(duì)其它文件一樣對(duì)此設(shè)備文件進(jìn)行操作。用戶應(yīng)用程序是通過(guò)設(shè)備文件同硬件打交道,對(duì)設(shè)備文件的操作方式就是利用操作系統(tǒng)內(nèi)核提供的系統(tǒng)調(diào)用,如open,read,write,close,select,ioctl[5],分別代表對(duì)設(shè)備的打開(kāi)、讀、寫、關(guān)閉、檢查設(shè)備以及對(duì)設(shè)備執(zhí)行讀寫以外的操作,并且通過(guò)數(shù)據(jù)結(jié)構(gòu)file_operations和驅(qū)動(dòng)程序相關(guān)聯(lián)。
在氣象探測(cè)設(shè)備中針對(duì)RS485設(shè)備接口驅(qū)動(dòng)中所實(shí)現(xiàn)的file_operations,其中的open、read等接口都對(duì)應(yīng)文件的打開(kāi)、讀取等函數(shù)。在應(yīng)用中通過(guò)對(duì)設(shè)備號(hào)來(lái)取得對(duì)應(yīng)的設(shè)備文件以及相關(guān)操作。通過(guò)命令mknod建立文件與設(shè)備的索引節(jié)點(diǎn),將定義的設(shè)備號(hào)和設(shè)備名稱加入內(nèi)核,并調(diào)用命令insmod加載驅(qū)動(dòng),則用戶在操作系統(tǒng)中就能通過(guò)設(shè)備名稱對(duì)其進(jìn)行操作。需要從設(shè)備中接收讀取氣象數(shù)據(jù)時(shí),可以調(diào)用函數(shù)open(“/dev/uart485”, O_RDWR)在操作系統(tǒng)中通過(guò)調(diào)用uart_open函數(shù)打開(kāi)設(shè)備;再通過(guò)系統(tǒng)調(diào)用uart_read函數(shù)來(lái)進(jìn)行讀取。此函數(shù)主要是循環(huán)讀取緩沖區(qū)內(nèi)數(shù)據(jù)并通過(guò)調(diào)用接口copy_to_user將數(shù)據(jù)發(fā)送至應(yīng)用層,整個(gè)數(shù)據(jù)的接收通過(guò)中斷觸發(fā),驅(qū)動(dòng)的初始化由static int __init uart_init(void)函數(shù)完成。
3圖形系統(tǒng)設(shè)計(jì)
圖形系統(tǒng)提供了友好的操作界面和控制方式,并給操作系統(tǒng)完整的工具集和相應(yīng)的應(yīng)用程序,可以實(shí)現(xiàn)對(duì)設(shè)備的直觀控制。該文所設(shè)計(jì)的氣象數(shù)據(jù)接收終端采用了nicrowindows圖形系統(tǒng)與在其之上的TinyWidget控件集。兩者基于X窗口系統(tǒng),能夠保證在對(duì)設(shè)備基本操作的基礎(chǔ)之上,占用較少資源,可以提供給用戶良好的界面和方便的操作。
系統(tǒng)采用了服務(wù)器與客服端的處理模式。其中底層提供對(duì)顯示界面、鼠標(biāo)、鍵盤等外接控制設(shè)備的驅(qū)動(dòng),通過(guò)操作系統(tǒng)可以將數(shù)據(jù)信息傳遞至應(yīng)用程序;中間層為一個(gè)與設(shè)備無(wú)關(guān)的圖形引擎,其程序常駐內(nèi)存的服務(wù)器端,基于底層驅(qū)動(dòng)之上提供建立線程、圖形繪制、字體與文本的管理等功能;窗口API與控件層利用圖形引擎的功能來(lái)進(jìn)行窗口的管理、設(shè)計(jì)、發(fā)送繪制請(qǐng)求以及對(duì)事件的處理,事件處理包括風(fēng)向風(fēng)速顯示、溫濕度顯示、參數(shù)裝訂功能。程序首先使用GrOpen()初始化圖形系統(tǒng)Nano-X庫(kù),并且和服務(wù)器端的圖形引擎建立連接,同時(shí)調(diào)用設(shè)備驅(qū)動(dòng)初始化顯示儀、鍵盤、鼠標(biāo)等I/O設(shè)備;然后調(diào)用GrNewGC創(chuàng)建圖形句柄GC,分配一個(gè)圖形上下文的數(shù)據(jù)結(jié)構(gòu)并建立圖形窗口并設(shè)置窗口的各項(xiàng)屬性;在Nano-X中必須告訴窗口哪些事件需要處理,例如是對(duì)風(fēng)向風(fēng)速的計(jì)算或者是對(duì)設(shè)備的檢測(cè)等任務(wù),都使用GrSelectEvevts函數(shù)進(jìn)行事件的注冊(cè)與選擇;最后使用GrMapWindow函數(shù)顯示窗口并調(diào)用GrMainLoop函數(shù)讓主程序進(jìn)入消息處理循環(huán)。在事件發(fā)生之后,系統(tǒng)每接收到一個(gè)消息就會(huì)喚醒對(duì)應(yīng)的注冊(cè)事件處理函數(shù)來(lái)對(duì)消息進(jìn)行處理,處理函數(shù)為一個(gè)switch-case結(jié)構(gòu)的選擇語(yǔ)句,每個(gè)事件對(duì)應(yīng)case語(yǔ)句不同的響應(yīng)與處理。在應(yīng)用中引入了操作系統(tǒng)的多線程處理。
4結(jié)論
該文采用S3C2440處理器的硬件平臺(tái),搭建基于嵌入式Linux操作系統(tǒng)與microwindows圖形系統(tǒng)的軟件平臺(tái),通過(guò)對(duì)系統(tǒng)的引導(dǎo)、操作系統(tǒng)與文件系統(tǒng)的移植、設(shè)備驅(qū)動(dòng)的加載以及圖形界面的設(shè)計(jì),實(shí)現(xiàn)了船舶氣象數(shù)據(jù)接收終端。本系統(tǒng)能夠方便地應(yīng)用于數(shù)據(jù)接受處理終端領(lǐng)域,具有穩(wěn)定性好、實(shí)時(shí)性強(qiáng)、核心技術(shù)自己掌握的優(yōu)點(diǎn)。隨著應(yīng)用的進(jìn)一步增加,系統(tǒng)會(huì)將得到進(jìn)一步的完善。
參考文獻(xiàn):
[1]周武斌.ZigBee無(wú)線組網(wǎng)技術(shù)的研究[D].長(zhǎng)沙:中南大學(xué),2009.
[2]王勇,柳林濤.武漢地區(qū)GPS氣象網(wǎng)應(yīng)用研究[J].測(cè)繪學(xué)報(bào),2007,36(2).
[3]于慧彬,李小峰.基于嵌入式系統(tǒng)和MiniGUI的船舶氣象儀圖形界面設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2009,17(1).
[4]方涵先,黃思訓(xùn).用于大氣探測(cè)系統(tǒng)的Linux平臺(tái)研究[J].解放軍理工大學(xué)學(xué)報(bào):自然科學(xué)版,2004,5(2).
[5]杜文軍,侯立剛,王艷梅.基于ARM的Linux移植分析與實(shí)現(xiàn)[J].遼寧石油化工大學(xué)學(xué)報(bào),2009,29(2).
[6]毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.