練學(xué)輝,杜 清,付 林,朱 潤,王善民
(1. 海軍駐南京地區(qū)雷達(dá)系統(tǒng)軍事代表室,南京 211153;2. 中國船舶重工集團(tuán)公司第七二四研究所, 南京 210003)
VxWorks是一個運(yùn)行在目標(biāo)機(jī)上的高性能、可裁剪的嵌入式實(shí)時操作系統(tǒng)。它以良好的可靠性和卓越的實(shí)時性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時性要求較高的領(lǐng)域中。近年來,可視化用戶界面正成為現(xiàn)代計(jì)算機(jī)系統(tǒng)中受到高度重視的組成部分。許多廠家推出了便于使用的各種可視化操作界面??梢暬且环N更自然、直觀的視覺呈現(xiàn)方式,是處理大容量數(shù)據(jù)的一種有效手段。然而,VxWorks開發(fā)平臺WorkBench的調(diào)試和監(jiān)視功能不夠完善,且在使用中比較繁瑣和復(fù)雜。[1-2]
本文設(shè)計(jì)一種基于Telnet協(xié)議的VxWorks調(diào)試監(jiān)測軟件。它可以通過Telnet協(xié)議實(shí)現(xiàn)調(diào)試計(jì)算機(jī)與目標(biāo)機(jī)的交互,并且通過可視化界面展示調(diào)試結(jié)果和監(jiān)視內(nèi)容,有利于提高研發(fā)效率,縮短研發(fā)的周期。
基于Telnet協(xié)議的網(wǎng)絡(luò)通訊是本地計(jì)算機(jī)與VxWorks系統(tǒng)目標(biāo)機(jī)之間的主要連接方式。它利用客戶機(jī)/服務(wù)器模式可以實(shí)現(xiàn)調(diào)試計(jì)算機(jī)上通過以太網(wǎng)遠(yuǎn)程訪問和控制VxWorks系統(tǒng)目標(biāo)機(jī)。
面向連接的協(xié)議服務(wù)器端首先調(diào)用socket函數(shù)建立流式套接字,然后用bind將此套接字和本地地址綁定,接著調(diào)用listen準(zhǔn)備接收客戶端的連接,然后調(diào)用accept接收連接。當(dāng)接收到客戶端的請求后,則建立連接,accept返回新的套接字就可以在這新套接字上讀寫數(shù)據(jù)。原來的套接字則可以繼續(xù)通過accept調(diào)用等待另一個連接。
客戶端也首先調(diào)用socket函數(shù)建立流式套接字,然后調(diào)用connect向遠(yuǎn)程主機(jī)發(fā)起連接請求,連接建立后就可以在此套接字上進(jìn)行數(shù)據(jù)讀寫了。
上述執(zhí)行流程圖如圖1所示。
嵌入式系統(tǒng)本身資源很有限,如內(nèi)存小和CPU速度低等,而且大部分嵌入式系統(tǒng)硬件沒有顯示器和鍵盤,不足有效地運(yùn)行第三方軟件。另外,大部分軟件只使用于主流的硬件平臺,不可能普遍適用于種類繁雜的嵌入式CPU。所以,對大多數(shù)嵌入式系統(tǒng)的調(diào)試和監(jiān)測采用交叉方式,即把第三方軟件安裝在調(diào)試計(jì)算機(jī)上,通過某種方式連接目標(biāo)機(jī),并通過與目標(biāo)機(jī)交換信息完成調(diào)試和監(jiān)測工作。
VxWorks為目標(biāo)機(jī)提供了一個Shell,以方便應(yīng)用系統(tǒng)的開發(fā)和使用,簡稱為tShell。目標(biāo)機(jī)tShell是VxWorks系統(tǒng)與外部最主要的接口。它的主要功能是管理用戶與VxWorks操作系統(tǒng)之間的交互:等待用戶的輸入,向VxWorks操作系統(tǒng)解析用戶的輸入指令,然后調(diào)用VxWorks庫函數(shù),最后處理各種各樣的VxWorks操作系統(tǒng)的輸出結(jié)果。
VxWorks配置中包含“Target Shell”組件。包含該組件后,usrRoot函數(shù)會調(diào)用初始化函數(shù):shellInit(SHELL_STACK_SIZE,TRUE)。該函數(shù)會創(chuàng)建tShell任務(wù)以實(shí)現(xiàn)Shell功能。
VxWorks初始啟動時,如果VxWorks包含了網(wǎng)絡(luò)組件中的“telnetserver”組件,系統(tǒng)會創(chuàng)建tTelnetd任務(wù),這時就可以使用主機(jī)的Telnet通過網(wǎng)絡(luò)遠(yuǎn)程訪問tShell。主機(jī)和目標(biāo)機(jī)之間能完成信息交互。關(guān)健在于目標(biāo)機(jī)的符號表。利用符號表可以直接調(diào)用程序中的輸出函數(shù)名,這是VxWorks系統(tǒng)提供的一個獨(dú)特便利。
Telnet是TCP/IP協(xié)議的一個標(biāo)準(zhǔn)的服務(wù),其端口為固定的23。在主機(jī)和目標(biāo)機(jī)通訊的過程中,Socket先與IP地址和端口綁定,然后在套接字上讀寫數(shù)據(jù),直到數(shù)據(jù)交換完畢。
下面是軟件實(shí)現(xiàn)數(shù)據(jù)交互的主要代碼:
tcpclient=new TcpClient(ip, port);
stream=tcpclient.GetStream();
StreamWriter sw=new StreamWriter(stream);
StreamReader sr=new StreamReader(stream);
調(diào)試監(jiān)測軟件首先利用函數(shù)sw.Write()把用戶輸入的指令寫入套接字類,然后通過Telnet協(xié)議提交給tShell。tShell對指令進(jìn)行解析,解析后的指令通過目標(biāo)機(jī)的符號表關(guān)聯(lián)至庫函數(shù)。內(nèi)核的庫函數(shù)獲取到有用的信息后再通過Telnet協(xié)議將信息返回。接著利用函數(shù)sr.Read()把有用信息從套接字類中讀取出來,并通過函數(shù)AnalysisMessage()對這些信息進(jìn)行解析,最后將解析完的信息送至軟件界面顯示。整個流程如圖2所示。
調(diào)試監(jiān)測軟件的功能主要包括以下幾個方面:
(1) 調(diào)試計(jì)算機(jī)IP地址設(shè)置:主要作用是獲取調(diào)試計(jì)算機(jī)IP地址,并且可以編輯修改;
(2) 處理器基本信息:軟件可以自動檢測到以太網(wǎng)上的處理器IP列表,從列表中選擇某一處理器進(jìn)行連接,可以獲取當(dāng)前處理器的詳細(xì)信息,包括CPU硬件ID、系統(tǒng)相關(guān)版本信息;
(3) 任務(wù)信息:主要包括任務(wù)的ID、名字、入口函數(shù)、優(yōu)先級和狀態(tài)等;
(4) 任務(wù)堆棧使用概況:主要包括堆棧總大小、堆棧當(dāng)前使用字節(jié)、堆棧最大使用字節(jié)、堆棧從未使用字節(jié)等;
(5) 內(nèi)存分配與使用概況:主要包括內(nèi)存狀態(tài)、字節(jié)數(shù)、內(nèi)存塊數(shù)、最大空閑塊尺寸等;
(6) 處理器溫度:獲取處理器的實(shí)時溫度,并生成近5 min的溫度曲線;
(7) 系統(tǒng)啟動參數(shù):獲取當(dāng)前的系統(tǒng)啟動方式,并且可以在快速啟動方式和Boot啟動方式之間進(jìn)行切換;
(8) 內(nèi)存查看:可以通過手動輸入內(nèi)存地址,查看內(nèi)存單元的具體狀態(tài)。
同時,為了使整個開發(fā)過程快速、簡單、靈活和有效,選擇基于.NET框架下的C#作為開發(fā)工具。軟件主界面如圖3所示。
編寫調(diào)試監(jiān)測軟件運(yùn)行于本地計(jì)算機(jī),通過以太網(wǎng)與PowerPC板卡相連接,PowerPC板卡之間則通過RapidIO進(jìn)行交互,硬件平臺如圖4所示。
本文提出一款基于Telnet協(xié)議的VxWorks系統(tǒng)調(diào)試監(jiān)測軟件。該軟件利用Telnet協(xié)議將VxWorks指令庫中的指令發(fā)送至目標(biāo)機(jī),實(shí)現(xiàn)了與服務(wù)器的命令行交互,并且通過基于.NET框架的C#設(shè)計(jì)可視化界面,使得用戶能更加直觀、清晰地對目標(biāo)機(jī)進(jìn)行調(diào)試與監(jiān)測。該軟件操作簡易,后期功能可擴(kuò)展性強(qiáng),可以大大提高研發(fā)調(diào)試人員的工作效率,具有一定的工程意義。