基于AT91SAM9260工控機(jī)平臺(tái)的SNMP協(xié)議實(shí)現(xiàn)
互聯(lián)網(wǎng)技術(shù)成本低廉、靈活性強(qiáng),在很多領(lǐng)域都有著廣泛的應(yīng)用前景。其在工業(yè)自動(dòng)化領(lǐng)域的應(yīng)用一直是一個(gè)研究熱點(diǎn)。SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理)協(xié)議是一種被廣泛應(yīng)用的互聯(lián)網(wǎng)設(shè)備管理協(xié)議,其最大的特點(diǎn)就是成本低廉,容易實(shí)現(xiàn)。SNMP協(xié)議可以管理大部分符合Internet標(biāo)準(zhǔn)的設(shè)備。通過添加新的被管對(duì)象,可以非常方便地?cái)U(kuò)展其管理能力。即使在被管設(shè)備發(fā)生嚴(yán)重的錯(cuò)誤時(shí),協(xié)議本身的特點(diǎn)也促使其不會(huì)影響管理者的正常工作。
本文引用地址:http://butianyuan.cn/article/201610/306723.htm本文介紹一種基于AT91SAM9260工控機(jī)平臺(tái)的SNMP協(xié)議實(shí)現(xiàn)方法,通過開發(fā)能在AT91SAM9260工控機(jī)平臺(tái)上運(yùn)行的SNMP Agent(SNMP代理),并擴(kuò)展其MIB(管理信息)庫,實(shí)現(xiàn)在互聯(lián)網(wǎng)上管理工控機(jī)本身和與工控機(jī)通過其他通信協(xié)議連接的設(shè)備資源。
1 SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理)協(xié)議介紹
1.1 SNMP協(xié)議概述
SNMP協(xié)議是一種基于TCP/IP協(xié)議的應(yīng)用層網(wǎng)絡(luò)管理標(biāo)準(zhǔn),被廣泛應(yīng)用于管理互聯(lián)網(wǎng)上眾多廠家的軟硬件平臺(tái)。SNMP協(xié)議的模型如圖1所示,其中管理應(yīng)用通過發(fā)送Get、Set、GetNext、GetResponse和Event這五種類型的消息來讀取或設(shè)置被管設(shè)備的MIB庫,實(shí)現(xiàn)對(duì)被管設(shè)備的管理。
SNMP協(xié)議作為應(yīng)用層協(xié)議,通過用戶數(shù)據(jù)報(bào)協(xié)議(UDP)來實(shí)現(xiàn)管理信息在互聯(lián)網(wǎng)上的傳輸,相對(duì)于TCP協(xié)議,UDP這種無連接的通信方式,不但加強(qiáng)了SNMP協(xié)議的穩(wěn)定性,而且提高了SNMP協(xié)議的運(yùn)行效率。
1.2 MIB(管理信息)庫
MIB庫是管理站可以通過SNMP協(xié)議訪問的被管理對(duì)象的集合。MIB描述了被管理對(duì)象能夠?yàn)楣芾碚咛峁┠男┕芾硇畔⒁约斑@些信息之間的關(guān)系。MIB使用ASN.1描述語言對(duì)對(duì)象進(jìn)行描述。ASN.1使被描述對(duì)象在邏輯上形成樹形結(jié)構(gòu)(如圖2),這樣管理站就可以很方便地訪問到MIB庫中各個(gè)節(jié)點(diǎn)的信息。ASN.1描述語言也提供了基本編碼規(guī)則(BER),使MIB庫中數(shù)據(jù)按規(guī)則轉(zhuǎn)換為串行字節(jié)流在網(wǎng)絡(luò)上傳輸。
2 開發(fā)環(huán)境介紹
2.1 AT91SAM9260工控機(jī)
本文使用的AT91SAM9260工控機(jī)是一套基于ARM926EJ-S核心的嵌入式工控機(jī)系統(tǒng),處理器采用ATMEL公司的AT91SAM9260,210 MHz,230MIPs。存儲(chǔ)器包括64MB NandFlash,64MB SDRAM,2MB NorFlash。網(wǎng)絡(luò)(Ether-net)單元為一個(gè)10/100M網(wǎng)絡(luò)。操作系統(tǒng)為2.6.19內(nèi)核的嵌入式linux。該設(shè)備的軟硬件平臺(tái)是完全滿足SNMP協(xié)議的開發(fā)需求的。
2.2 net-snmp開發(fā)包
net-snmp開發(fā)包是由加州大學(xué)戴維斯分校(University ofCalifonia,Davis)開發(fā)并維護(hù)的可在linux系統(tǒng)下使用的SNMP協(xié)議開發(fā)程序。本文使用的是net-snmp-5.4.4版本,其組成內(nèi)容主要包括:
1)可擴(kuò)展SNMP Agent程序(snmpd)開發(fā)庫;
2)幾個(gè)用于設(shè)置SNMP代理變量的管理端命令(snmpget,snmpset,snmpwalk等);
3)將MIB文件轉(zhuǎn)換成C語言程序用于MIB庫擴(kuò)展的mib2c工具;等等。
3 SNMP協(xié)議實(shí)現(xiàn)
3.1 交叉編譯環(huán)境搭建
由于AT91SAM9260工控機(jī)平臺(tái)上的嵌入式linux系統(tǒng)運(yùn)行能力有限,需要在電腦上搭建net-snmp的交叉編譯環(huán)境。電腦的操作系統(tǒng)選用的是fedora 8,交叉編譯工具選用的是AT91SAM9260工控機(jī)開發(fā)包自帶的armv51-linux-gcc.tar.bz2交叉編譯器。
交叉編譯環(huán)境搭建好以后,將net-snmp-5.4.4.tar.gz開發(fā)包拷貝到fedora 8系統(tǒng)的/usr/local/src文件夾下,打開fedora 8下終端(terminal)程序,運(yùn)行“tar-zxvf net-snmp-5.4.4.tar.gz/work”、“cob/work/net-snmp-5.4.4”,就到達(dá)net-snmp-5.4.4的源碼所在的文件夾“/work/net-snmp-5.4.4”中了。
交叉開發(fā)環(huán)境搭建好以后,就可以開始在工控機(jī)上實(shí)現(xiàn)SNMP協(xié)議的開發(fā)了。開發(fā)過程主要分為以下兩個(gè)部分:
1)開發(fā)出能在AT91SAM9260工控機(jī)上運(yùn)行的SNMPAgent程序(即snmpd程序);
2)通過net-snmp開發(fā)包提供的工具,擴(kuò)展MIB庫。
3.2 SNMP Agent開發(fā)
在使用net-snmp開發(fā)包編譯smnpd程序之前,要對(duì)編譯選項(xiàng)進(jìn)行配置。繼續(xù)在fedora 8下運(yùn)行“./configure-with-cc=armv51-linux-gcc-with-ar=armv51-linux-ar-enable-mini-agent-with-endianness=little-enable-mini-agent-disable-ipv6-disable-snmptrapd-subagent”,此命令主要是對(duì)交叉編譯器,目標(biāo)機(jī)大小端,代理的編譯模式進(jìn)行配置。各配置選項(xiàng)的具體含義可以運(yùn)行“./configure-help”查看。
配置完net-snmp編譯選項(xiàng)后可以進(jìn)行靜態(tài)編譯,運(yùn)行“make LDFLAGS=”-static””,編譯得到snmpd。將snmpd拷貝到工控機(jī)操作系統(tǒng)的/usr/sbin目錄下,并在工控機(jī)操作系統(tǒng)終端下運(yùn)行“ehmod u+x snmpd”,更改snmpd的權(quán)限。
要在工控機(jī)操作系統(tǒng)下運(yùn)行SNMP Agent程序,還需要配置snmpd.conf文件。使用電腦上路徑“/work/net-snmp-5.4.4/EXAMPLE.conf”的文件作為測(cè)試范本,將其拷貝成工控機(jī)“/usr/loeal/share/snmp/snmpd.cord”文件,將其中的community設(shè)置修改為以下內(nèi)容:
#sec.name source community
com2sec local loealhost public
com2sec net 192.168.0.135/24 public
其中工控機(jī)所在的測(cè)試網(wǎng)段為192.168.0.xxx。將組設(shè)置改為可讀寫(group MyRWGroup v2c net),以方便測(cè)試使用。
移植完snmpd和snmpd.eonf文件后,在工控機(jī)操作系統(tǒng)終端下運(yùn)行“snmpd-f-Le-d”命令,如果正常啟動(dòng),則snmpd移植成功。
3.3 MIB庫擴(kuò)展
進(jìn)入fedora 8的“/work/net-snmp-5.4.4/share/snmp/mibs”路徑下,可以看到net-snmp包涵了很多公有MIB文件。這些文件都是按照規(guī)范格式開發(fā)出來的。管理信息庫的擴(kuò)展就是將按照這種規(guī)范格式開發(fā)出來的私有MIB文件移植到net-snmp中。以實(shí)現(xiàn)管理端通過SNMP協(xié)議對(duì)私有對(duì)象進(jìn)行管理。擴(kuò)展MIB庫主要分為以下三個(gè)步驟:
首先,將待擴(kuò)展的私有MIB文件拷貝到fedora 8的“/work/net-snmp-5.4.4/share/snmp/mibs”路徑下,并將該MIB文件添加到環(huán)境變量MIBS中去(fedora下運(yùn)行“ex port MIBS=ALL”)。添加完可以用net-snmp自帶的snmptranslate命令檢測(cè)代理是否能夠正確找到待擴(kuò)展的私有MIB。
然后,使用mib2c工具生成C文件,例如fedora下運(yùn)行“mib2 netSnmpExampleScalars”命令,就會(huì)生成MIB文件中定義的netSnmpExampleScalars對(duì)象的.h文件和.c文件。其中.h文件對(duì)節(jié)點(diǎn)進(jìn)行函數(shù)聲明和宏定義。.c文件分為初始化函數(shù)和響應(yīng)函數(shù)兩大塊。其中初始化函數(shù)用來對(duì)變量進(jìn)行注冊(cè),響應(yīng)函數(shù)用來響應(yīng)管理端的操作命令,響應(yīng)函數(shù)的返回值需要手工填充。
最后,將私有MIB生成的C文件拷貝到“/work/net-snmp-5.4.4/agent/mibgroup”目錄下,重新配置net-snmp,在./configure后面添加“-with-mib-modules=“XXX ””(其中XXX為生成的C文件名),編譯生成新的snmpd程序,移植到工控機(jī)系統(tǒng)中。
連接好工控機(jī)到電腦的網(wǎng)絡(luò),使用net-snmp開發(fā)包自帶的snmpget,snmpset等命令測(cè)試snmpd的運(yùn)行情況,如果得到正確的結(jié)果測(cè)試,就證明在AT91SAM9260工控機(jī)上實(shí)現(xiàn)SN MP協(xié)議成功。
4 結(jié)束語
net-snmp開發(fā)包提供了強(qiáng)大的開發(fā)和測(cè)試工具,使開發(fā)者能方便地完成各種嵌入式工控機(jī)平臺(tái)下的SNMP協(xié)議開發(fā)。本文實(shí)現(xiàn)的基于AT91SAM9260工控機(jī)平臺(tái)的SNMP協(xié)議,在工業(yè)級(jí)互聯(lián)網(wǎng)管理設(shè)備的開發(fā)上有著很大的應(yīng)用前景。
評(píng)論