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