范延青++王雪晶
摘 要
VxWorks操作系統以高實時性和穩定性在現階段被廣泛地應用于通信和軍事領域,但是由于界面開發的復雜性,開發人員一般通過上位機軟件來進行設備的配置和系統狀態的獲取。本文通過GoAhead WebServer的VxWorks嵌入,使用戶通過網頁與設備進行友好交互。
【關鍵詞】VxWorks GoAhead WebServer 嵌入式
有線通信設備是用于遠距離傳輸的通信設備,不具有人機交互界面。實現有線通信設備的配置只能通過pc進行。傳統配置方法是采用基于pc的上位機軟件通過網口或者串口來進行。此方法雖然能滿足配置需求,但是存在開發、調試周期長,不便于用戶安裝等不足。針對MPC860以及VxWorks操作系統的特點,在系統中嵌入GoAhead WebServer,可以在web瀏覽器中實現有線通信設備參數配置以及設備狀態的獲取。
1 問題的提出及分析
有線通信設備處理器采用飛思卡爾出品的MPC860。MPC860采用雙核結構,由控制模塊和通信處理模塊組成。MPC860同時帶有多個串行通信控制器、以太網控制器,支持多種通信協議,故主要用于通信領域。操作系統采用VxWorks。該系統是美國風河公司出品的嵌入式硬實時操作系統。該系統因為具有高實時性,高性能,內核容易裁剪被應用在通信、軍事、航空、航天等對實時性要求特別高的的行業中。
現階段流行的WebServer軟件主要有:BOA,Thttpd,MIni_httpd, GoAhead,httpd等,但是可以滿足要求且便于開發只有GoAhead是最佳的選擇。
GoAhead具有以下主要特點:
(1)支持多種嵌入式操作系統;
(2)支持ASP及JavaScript;
(3) 支持標準的CGI以及GoForm;
(4)反應迅速,最快請求處理速度可超過65p/s;
(5) 支持SSL及用戶管理。
Asp,CGI是GoAhead提供的人機交互的兩種方法。它們本質上是在設備端與系統內的某個C函數綁定在一起。Asp主要用來生成顯示在web頁面中的動態數據,CGI則用來處理響應用戶輸入來更新系統設置參數或者執行用戶設置的指令。開發者在GoAhead一般使用GoForms來處理web頁面中表單提供的內容。GoForm與傳統的CGI方法不盡相同。GoForm不是為每個web連接都創建一個新的進程,而是通過與GoAhead服務器共享地址空間直接訪問請求上下文。GoForm可以自動解析和訪問用戶傳遞的數據。
GoAhead內核支持使用SSL進行數據加密和認證,支持摘要認證機制。同時用戶管理功能允許不同的用戶具有不同級別的訪問權限。
2 GoAhead的VxWorks嵌入過程
GoAhead支持多種操作系統,因此基于VxWorks的應用也比較簡單。我們可以在tornado 底下建一個GoAhead的庫文件便于我們的鏈接調用。首先要建一個download類型的工程,選擇工程管理目錄下Builds選項卡,右鍵選擇Buid模式中的properties,在rules選項里選輸出格式archive,這樣就可以生成需要的庫文件。我們接下來在工程目錄下添加從官方下載的GoAhead源文件:asp.c、websuemf.c 等。此外我們還要編寫main.c文件為用戶提供使用接口。我們還需在系統宏定義選項卡里加上對GoAhead系統定義。具體內容為:
-D WEBS -D UEMF -D VXWORKS -D OS="VXWORKS" -D USER_MANAGEMENT_SUPPORT -D DIGEST_ACCESS_SUPPORT。編譯、鏈接,default文件夾下會出現生成的*.a的庫文件。設備使用的VxWorks工程中加載此庫文件,即可將GoAhead模塊編譯進映像。最后在主函數中通過taskSpawn 初始化GoAhead任務的主函數websvxmain即可實現WebServer隨設備啟動。
3 Web網頁設計
3.1 系統狀態顯示
GoAhead支持ASP動態網頁。內容可以采用嵌入式JavaScript來進行設計。如果在創建動態網頁的過程中要生成動態頁面,首先要生成擴展名為asp的web文件,此文件是顯示系統動態信息的主文件;然后在此文件中需要嵌入應用函數aa()的地方使用<% aa(); %>(假定aa()函數是web文件中顯示系統動態信息);再把aa()函數注冊到main.c文件中的initWebs()函數中:websAspDefine(T("aa"), bb)(假定bb()函數是我們VxWorks系統內部的函數,同樣用于動態顯示系統信息)。在執行web文件過程中,當出現aa()時系統就會調用bb()來生成新的顯示信息反饋到頁面中。必須注意bb()函數的格式:int bb(int ejid, webs_t wp, int argc, chart_t **argv); ejid參數作為JavaScript解釋器句柄,用來調用JavaScript相關函數。wp參數作為瀏覽器連接的句柄,用來調用GoAhead服務器函數,前面這兩個參數不能改動。argc和argv包含傳遞給asp過程的實參個數和內容。
3.2 配置系統參數
GoAhead使用GoForm來進行用戶配置信息的傳遞。在使用時需要在web文件中加上表單: 其中cc為GoAhead的注冊函數。當用戶提交form時會自動調用cc對應的系統函數并將用戶的配置參數傳遞進函數,來達到交互的目的。endprint
4 加載web文件到VxWorks系統
為了能夠使用戶直接在web瀏覽器中進行系統狀態的讀取和系統參數的配置,在使用之前應將先前制作的web文件加載到系統。我們可以采用以下兩種方式實現:
4.1 將文件拷貝到文件系統
VxWorks支持tffs文件系統,我們可以在文件系統中建立一個web文件的專屬文件夾。通過ftp工具將我們設計的web文件system.asp下載進("/tffs0/web")。設置文件的根目錄#define ROOT_DIR T("/tffs0/webs"),設置缺省主頁websSetDefaultPage (T("system.asp"));通過web瀏覽器鍵入 http:// 192.168. 200. 36 就可以訪問到system.asp 文件(設定有線通信設備默認地址為192.168.200.36)。
通過此種方式可以實時地將web下載進文件系統并進行訪問,適用于調試及生產階段。
4.2 生成rom網頁
GoAhead支持Rom網頁設計,并且專門為用戶的web文件壓縮進數組寫了一個文件合并程序。我們要先進入源代碼文件夾WIN下編譯webcomp.dsp生成webcomp.exe;然后將所用到的web文件和生成的webcomp.exe文件放到同一文件夾下;制作filelist.txt文件,將用戶所用到的網頁文件名以文本方式羅列如下:
System.asp
about.htm
Help.htm
每個文件擴展名只能以回車鍵結束。在windows系統中打開命令行,在其中輸入:webcomp.exe n filelist.txt > webrom.c 然后會生成所用到的web文件的固化數組文件webrom.c(n 為網頁文件的個數);然后將源文件中的同名文件替換即可;再編譯WIN文件夾下的webs.dsp可以生成windows系統下使用的webserver。通過運行這個可執行文件來測試我們生成數組文件是否可用。測試完成后我們還要進行頭文件Header.h的修改來支持rom網頁,即加上#define WEBS_PAGE_ROM。在tornado下編譯即可得到所需要的VxWorks映像文件。此映像文件包含網頁內容,不需要文件系統的支持。下載到有線通信設備,同樣通過web瀏覽器鍵入 http://192.168.200.36就可以訪問到system.asp 文件。
采用此種方法不必局限于文件系統的限制,而且所占空間遠遠小于使用文件系統,但是缺點是下載、編譯web文件麻煩,適用于生產階段以及沒有文件系統的設備。
參考文獻
[1]Rover2.GoAhead websever 移植小結[EB/OL].http://bbs.Edw.com.cn,2005-10.
[3]GoAhead Overview[DB/OL].http://www.goahead.com/products/webserver/default.aspx.
[3]劉妮.基于VxWorks和嵌入式Web服務器的遠程實時控制的實現[D].天津大學,碩士學位論文,2006-12.
作者單位
1.煙臺北方星空自控科技有限公司 山東省煙臺市 210000
2.中國聯合網絡通信有限公司煙臺市分公司 山東省煙臺市 210000endprint