摘 要:針對目前公交車載嵌入式終端存在沒有統一網絡管理機制的問題,設計了基于公交車載終端的SNMP網絡管理代理系統。著重研究和設計了SNMP網管代理系統的軟件部分,完成了SNMP網管系統的代碼編寫和在車載終端上的移植。系統通過分析終端特性和管理參數,采用SNMP消息機制,完成對設備的管理和與管理站的通信,方便對公交車載終端的統一管理,也增強了公交系統的安全性。通過在ZTM2001上部署和測試,驗證了設計的可靠性、穩定性和故障檢測能力。關鍵詞:簡單網絡管理協議; 運維系統; 嵌入式Linux; 車載終端; 管理信息庫
中圖分類號:TN915-34; TP393 文獻標識碼:A
文章編號:1004-373X(2010)16-0086-05
Design and Implementation for SNMP's Using in Operation
and Maintenance System on the Bus Terminal
HU Wei
(South China Institute of Software Engineering, Guangzhou University, Guangzhou 510990,China)
Abstract: For there is no unified network management mechanism on bus terminal, the article designs the SNMP network management agent system. The article focuses on research and design of the SNMP network management agent system software, and completes the coding and transplant on board unit. The System completes equipment management and communication with the management station,by analyzing the terminal characteristics and management parameters, and uses SNMP-message mechanism to facilitate the unification of the transit bus terminal management, and also enhances the safety of the bus system. The design's reliability, stability and fault detection capabilities are verified, by disposing and testing on ZTM2001.Keywords: SNMP; operation and maintenance system; embedded Linux; vehicle terminal; MIB
0 引 言
公交運維系統是對公交車輛的運行和維護情況進行實時監控和管理的系統,是智能交通系統ITS的重要組成部分;好的運維系統能實時確定車輛各部分和車載系統各個部分的運行和維護情況,實現對車輛的運行和維護情況進行動態、實時監管。對伴隨著城市發展而數量陡增的公交車運維管理,是特大城市智能交通系統建立的必然過程。本文是廣州交通閉環控制系統中公交嵌入式終端升級改造項目的研究成果。
由于集成TCP/IP協議棧的GPRS模塊的公交終端和有公網IP的運維中心之間可以像普通以太網一樣通信,所以運維系統可以使用開放的網絡管理協議進行系統管理。目前正在使用的、開放的網絡管理協議的標準有兩個:一個是以太網結構委員會IAB(internet activity board)的簡單網絡管理協議SNMP(simple network management protocol);另外一個是基于OSI的公共管理信息協議CMIP(common management information protocol)。其中CMIP比較復雜,占用的系統資源也較多,而SNMP明晰、簡單、占用系統資源較少,適合在嵌入式終端上應用,所以系統選擇SNMP進行管理。
1 系統分析
因為廣州公交車載終端目前在使用的有3種以上型號,它們的軟硬件環境各不相同,而不同環境上實現SNMP的方法不盡相同,所以本文以SNMP在ZTM2001公交終端上的設計實現為例進行介紹。
1.1 硬件系統分析
該終端由三星S3C44B0X作為主控芯片完成控制處理功能;西門子雙頻GSM/GPRS無線模塊MC39I完成與服務器端的通信;GSTAR公司的GPS模塊用于提供實時位置信息;通過串口連接羊城通讀卡器,用于讀卡器狀態信息采集;通過擴展串口和數字電視連接,用于數字電視狀態信息的采集;而喇叭、LED、LCD和鍵盤等分別用于公交站點的報站、顯示和控制等功能。
1.2 軟件系統分析
公交車載終端采用μCLinux 2.6.14,支持TCP/IP,UDP,PPP等多種網絡傳輸協議,支持JFFS2等多種文件系統。在應用程序運行時,可以實現GPS定位、全自動語音報站、公交調度等多個功能。其中車載終端應用的主進程god, 位于公交監控應用程序主目錄/opt/god/下。/opt/god/log目錄下保存的是終端的運行日志。
1.3 系統啟動流程分析
車載終端的μCLinux操作系統與桌面Linux的啟動流程一樣,內核啟動后的第一個進程是init進程,它啟動后會根據inittab等配置文件啟動終端應用程序。本終端的inittab配置文件如下:
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
…………………………………………
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/mingetty --noclear --autologin root tty1
由配置文件可知,系統的默認運行等級為3。init進程啟動后會讀取inittab文件,根據配置文件執行/etc/rc.d/init.d/rc sysinit和/etc/rc.d/init.d/rc 0腳本,完成系統和終端初始化,最后調用/sbin/mingetty -noclear -autologin root tty1,tty1自動登陸到終端并執行根目錄下/root/.bash_profile腳本來啟動終端的應用程序。該腳本文件的部分腳本語句如下:
if [ ′tty′ = \"/dev/tty1\" ];then
if [ -e /opt/appinit ];then
. /opt/appinit
fi
sh /opt/routrack/bin/startrack.sh
fi
由此可見,僅在控制臺tty1登陸時,執行終端應用程序的維護腳本/opt/appinit和為終端主應用程序的啟動腳本/opt/routalk/bin/startrack.sh。因此,在開發完本代理程序后,可以在應用程序維護腳本/opt/appinit里添加相應的代碼,使得代理程序能在系統啟動時自動啟動。
系統的啟動流程依次為:引導Linux內核、啟動INIT進程、讀取inittab文件、系統初始化、啟動運行級別為3的守護進程、建立終端tty1并登陸到系統、啟動終端應用程序。
1.4 終端主程序的處理流程
主程序運行時, 將產生一個子進程語音播放,播放進站/出站語音,預置媒體文件和子線程ROUTRACKER,STOPANNOUNCER,GPSMONITOR,GPRSMSGIO,KEYBMSGIO,OBUCONTROL等,用于完成同GPS,GPRS等外圍接口模塊的通信。
主程序用來創建應用中的其他子線程(或者稱任務)、相關的消息隊列、調試信息文件和日志文件。主程序的功能包括:讀取配置文件、創建/打開調試器、創建/打開日志文件、創建消息隊列和信號燈、創建各子線程(任務)、輸出調試信息。
2 設計與實現
2.1 最基本的NET-SNMP安裝移植
(1) 在nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.4.2.1/net-snmp-5.4.2.1.tar.gz上下載net-snmp軟件包;
(2) 解壓net-snmp軟件包如下:
# tar zxvf net-snmp-5.4.2.1.tar.gz -C /home/gjxxh
(3) 配置net-snmp,進入目錄/home/gjxxh/net-snmp-5.4.2.1執行以下命令:
CC=arm-elf-gcc LD=arm-elf-ld AR=arm-elf-ar LDFLAGS=\"-Wl,-elf2flt -static\" ./configure --host=arm-linux --with-endianness=little --enable-mini-agent --disable-applications --disable-manuals --disable-scripts --disable-shared --disable-mib-loading --prefix=/home/gjxxh/snmp-agent/
(4) 執行make命令進行編譯,編譯完成后會在agent目錄下生成snmpd目標文件;
(5) 進入/usr/local/share/snmp/,使用snmpconf命令生成snmpd.conf文件;
(6) 最后把snmpd目標文件和snmpd.conf文件通過SSH下載到ZTM2001上運行。
在PC機上可以使用snmpget命令取得OID的值。通常用的格式為:snmpget -v 2c -c [community] [host] [OID]。其中-v為指定SNMP的版本,community為共同體名,相當于操作訪問密碼,host為代理的IP地址,OID為要獲取的MIB節點。
2.2 代理軟件設計
代理軟件設計如圖1所示。
圖中:虛線框內是代理軟件模塊,其中數據通信模塊與公交終端和外圍設備進行通信,收集數據信息及發送配置命令等功能,同時支持以太網和串口、GPIO等通信形式。數據解析模塊解析從數據通信模塊收集信息,并存入MIB庫,供SNMP代理模塊使用;同時將從SNMP代理模塊處理的管理站得到的配置命令轉發到數據通信模塊,通過數據通信模塊發送相關命令進行配置管理。SNMP代理模塊主要負責SNMP協議的執行,通過對MIB庫(數據解析模塊處理后的信息)訪問,處理管理站的配置管理、安全管理、性能管理、故障管理等功能,完成管理站的SNMP報文通信。
圖1 公交代理的軟件模塊組成
2.3 軟件設計實現
軟件系統根據公交代理系統模塊組成和功能設計了5個進程,如圖2所示。其分別是公交代理進程(SNMP-5.4.2.1)、公交數據解析進程(RESOLVE)、公交數據查詢進程(SELECT)、設備循環檢測進程(CHECK)、主控板系統信息收集進程(COLLECT)構成,它們共同構成公交代理軟件系統。
圖2 SNMP網管系統中的進程設計
其中公交代理服務進程以建立在GPRS網絡上的以太網為通信手段,通過SNMP簡單網絡管理協議,完成整個網絡中公交車載終端的配置管理、即時性管理、告警管理等主要信息管理。公交數據解析進程為公交代理進程提供MIB庫的數據服務和與公交數據查詢進程、設備循環檢測進程之間的消息交換,把從公交數據查詢進程和設備循環檢測進程收集得到的設備信息保存到MIB數據庫中,以方便SNMP服務進程進行公交數據的獲取與傳輸。公交數據查詢進程與車載終端的各設備進行通信并收集設備信息,反饋到公交數據解析進程。設備循環檢測進程規定在約定的時間內向公交車載終端的所有設備發送檢測命令,如果設備在規定時間內沒有應答信息或應答信息不在約定的范圍內則說明該設備工作異常,則把異常信息反饋到公交數據解析進程,使公交代理發送Trap消息。循環檢測進程實時檢測設備運行狀態。主控板系統信息收集進程收集主控板自身的運行狀態信息,把收集到的信息反饋到公交數據解析進程。
在公交代理系統中,采用以太網通信、串口通信、消息隊列、文件I/O讀寫等方式實現各進程與設備間的通信,其中文件I/O讀寫為用得最多的通信方式。下面具體討論各個進程的實現。
2.3.1 公交代理服務進程
實現代理服務進程可分為MIB設計、代理擴展、代碼設計、MIB模塊加載4個步驟。
(1) MIB設計
項目向互聯網數字分配機構IANA組織申請了一個私有的企業序列號(private enterprise number)為310,這樣公交的主私有對象標識符OID節點為1.3.6.1.4.1.310,被管理對象的數據結構在該OID節點下定義。為了完成公交車載終端的網管系統的配置管理、故障管理、性能管理和安全管理,提高公交系統的可擴展性。根據終端的設備的軟硬件特性,將管理信息庫在OID節點下定義兩個分類節點:定義終端內部軟硬件信息的公交終端節點(transportation terminal)和定義終端外部設備的軟硬件信息的公交終端外設節點(terminal peripherals)。前者主要包括系統信息(system information)、告警信息(obu notifications)等。后者包括:羊城通信息(yct)、數字電視信息(dtv)等。本管理系統采用ASN.1語言,將被管理設備的各個管理參數定義成為管理標量對象、表對象及告警對象。
(2) 代理擴展和加載
用net-snmp擴展代理,可以采用靜態庫方式,通過修改配置頭文件,在相應地方包含新引入的mib模塊的.c和.h文件,然后重新編譯庫文件和代理程序;也可以編譯動態共享庫,通過把新引入的mib模塊的.c和.h文件編譯成動態庫,在需要時加載動態共享庫即可。編譯生成動態共享庫命令:
gcc -o -I /usr/local/include -c -o modulename.o modulename.c
gcc -o -fPIC -shared -o modulename.so modulename.o
加載動態共享庫,如果代理程序(snmpd)未運行,在snmpd.conf配置文件中增加1行如下:
dlmod modulename /root/snmp/modulename.so
然后啟動snmpd代理進程,程序就會自動加載擴展的動態共享庫。
(3) 代碼設計
MIB模塊一般由變量和表組成,在net-snmp把管理信息結構SMI中的對象分為兩大類:scalar和table。scalar包含常用的整型,字符串,時間等等數據類型。table就是scalar的集合,由1個和多個列組成,類似于數據庫中的表,它必須具有索引項,用來按一定順序檢索表項。
代碼模版的生成通過mib2c工具提供的模版把使用ASN.1語言編寫的mib文件解析成.c和.h文件,但還需要手工在相應地方添加相應代碼。由于目前mib2c不支持同時解析scalar和table對象,對于具有這兩個對象的mib模塊,需要分別生成代碼文件,經過手工添加后再合并成整體。
(4) 模塊加載
模塊加載是在snmpd啟動時對擴展MIB進行初始化的過程。可以選擇代理擴展的兩種方式中的任何一種進行模塊的加載,這里使用靜態加載的方式。將擴展的MIB初始化函數init_xxxx()加入到snmpd的啟動代碼處,然后重新編譯運行。具體步驟如下:在agent/mibgroup目錄下新建目錄,如gzjw; 把全部添加好變量獲取實現函數的C源代碼復制到agent/mibgroup/gzjw目錄下。修改agent目錄和agent/mibgroup目錄下的Makefile文件,使得新加代碼能一起編譯。 修改agent/snmpd.c文件如下,添加擴展mib的初始化函數調用,添加擴展mib的初始化函數。
922SOCK_STARTUP;
923init_agent(app_name);
/*do what we need to do first*/
924init_mib_modules();
925init_gzjw_modules();//call mib init function
(5) 執行make 命令重新編譯net-snmp。
2.3.2 公交數據解析進程
該進程主要完成2個功能:為SNMP代理進程提供MIB庫、解析從公交數據查詢進程和設備循環檢測進程收集回來的信息和發送命令到公交數據查詢進程。公交數據解析進程與公交數據查詢進程和設備循環檢測進程之間采用消息隊列通信方式,當公交代理接收到從公交站發送的SNMP報文,公交數據解析進程則向公交數據查詢進程發送命令要求公交數據查詢進程做出相應的采集信息操作,并返回未處理的采集信息,然后公交數據解析進程為未處理的采集信息進行分析并通過I/O方式寫入MIB庫。而設備循環檢測進程則不需要公交數據解析進程對其發送命令,公交數據解析進程只需要等待消息隊列中消息的到來并對設備循環檢測進程采集回來的信息進行解析。
2.3.3 公交數據查詢進程
該進程主要獲取模塊的相應信息,并向上層反饋該信息。該進程采用多線程的編程方式,設定同時可以接收多條查詢命令。圖3為公交數據查詢進程的執行流程圖。
圖3 數據查詢進程執行流程
2.3.4 設備循環檢測進程
該進程執行流程與公交數據查詢進程的執行流程基本一樣,但進程不需要接收查詢命令而是直接建立多個線程同時檢測設備的運行狀態,每檢測1次有5 s的延時再進行檢測,一旦發現設備有異常狀態,向上層服務器發送包含設備異常描述的信息,服務器端接收到該信息后通過解析并要求公交代理發送告警信息(Trap)。
2.3.5 終端系統信息收集進程
該收集進程根據系統文件收集主控板自身的運行狀態信息并反饋到公交數據解析進程。終端系統信息包含主控板的CPU使用率、內存使用率、作系統版本、應用程序版本等信息。對于靜態的數據,如操作系統版本等,在公交代理啟動時進程會自動收集主控板的運行信息反饋到公交數據解析進程并保存到MIB庫;而對于動態的數據,如外圍設備狀態信息等,進程會根據公交站發來的命令實時收集反饋到公交數據解析進程并保存到MIB庫。
2.4 測試與分析
用MG-SOFT Mibbrowser 9.0測試SNMP公交代理,它可以監控和管理網絡上的任何SNMP裝置,如文檔服務器、數據庫服務器、無線基站等;使用標準SNMPv1~v3通信協議;可以執行SNMP Get,GetNext,Walk 等設定條件,可以截取網絡上的SNMP Trap和SNMP Inform packets等。
2.4.1 MG-SOFT Mibbrowser 9.0的安裝與編譯
在Windows操作系統下解壓MG-SOFT Mibbrowser 9.0.rar,安裝MIB Browser后,先把設計好的MIB文件GJXXH-MIBv6.mib文件放在某個目錄下(如放在D:\\\\mibfiles目錄下);啟動MG-SOFT MIB Compiler工具編譯GJXXH-MIBv6.mib文件,編譯形成MIB文件。
2.4.2 測試
啟動車載終端的SNMP網管代理程序;使用Mibbrowser 9.0工具測試車載終端的SNMP網管代理,其中圖4為使用GET命令獲取本網管代理下的車載終端的系統信息和模塊信息。
圖4 GET命令測試
管理設備的各種異常告警信息如圖5所示,它是公交車載終端的數字電視模塊發生故障的告警。在服務器端接收到的Trap圖。這說明本公交代理系統不僅能很好地反映終端的各個模塊的運行性能,而且也能有效的地實現當設備發生故障時,故障管理發現故障并及時反饋到網管站,具備了快速可靠的故障檢測能力。
圖5 故障告警測試
3 結 語
文中SNMP不僅是Internet 中網絡管理的最重要協議,而且在通過GPRS網絡連接的嵌入式移動終端網絡管理中的應用,隨著嵌入式移動設備的廣泛應用和應用的深入,也變的越來越重要。該系統是廣州交通閉環控制系統升級改造的研究成果,闡述了SNMP在移動公交終端上的設計和實現方法。系統能對公交終端和外圍接口的各種狀態信息進行采集和發布,通過測試達到了設計要求,運行穩定。
參考文獻
[1]Network Workimg Group J Case. RFC1157-simple network management protocol (SNMP)[M]. Massachusetts: MIT Lab, 1990.
[2]MCCLOGHRIE K, ROSE M, Management information base for network management of TCP/IP-based Internets[M]. [S.l.]: MIB-II. RFC1213.1991.
[3]劉雪飛.基于SNMP++的MIB瀏覽器研究[J].計算機工程與應用,2009,45(3):91-93.
[4]陳健明.SNMP協議在民航空管自動化系統集中監控中的應用[J].計算機與網絡,2009,35(24):61-63,68.
[5]何鵬,邱建林,顧翔.基于SNMP協議的遠程主機監測系統設計與實現[J].計算機工程與設計,2008,29(13):3303-3305.
[6]韓璐,張潔,包鐵,等.基于SNMP的信息采集系統[J].吉林大學學報:理學版,2009,47(6):1225-1229.
[7]錢志浩,王建中.基于SNMP和OPC的泵站監控代理的實現[J].計算機工程,2009,35(21):244-246.
[8]區海平.壽國礎基于MIB定義的SNMP分析系統及實現[J].計算機應用,2009,29(1):38-41.
[9] 鄭文俊,李強,馬東堂.基于SNMP的通信網絡性能管理模塊設計與實現[J].現代電子技術,2009,32(15):58-60.
[10]王建民,李霞.基于SNMP的網絡性能管理系統的設計與實現 [J].現代電子技術,2006,29(8):91-92.
[11]趙三軍,羅作民,楊梅,等. SNMP安全隱患及解決方法研究[J].現代電子技術,2007,30(17):98-100.