国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

VxWorks與SNMP代理的開(kāi)發(fā)

發(fā)布時(shí)間:2010-6-9 16:42    發(fā)布者:vinda
關(guān)鍵詞: SNMP , VxWorks
前言
  
目前嵌入式應(yīng)用領(lǐng)域的一個(gè)發(fā)展方向是采用實(shí)時(shí)操作系統(tǒng)(Real Time Operation System,RTOS)。實(shí)時(shí)操作系統(tǒng)是一段在嵌入式系統(tǒng)啟動(dòng)后首先執(zhí)行的程序,用戶(hù)的應(yīng)用程序是運(yùn)行于RTOS之上的各個(gè)任務(wù),RTOS根據(jù)各個(gè)任務(wù)的要求,進(jìn)行資源管理、消息管理、任務(wù)調(diào)度、異常處理等工作。應(yīng)當(dāng)根據(jù)優(yōu)先級(jí)的高低對(duì)任務(wù)進(jìn)行切換,只有優(yōu)先服務(wù)方式的RTOS才是真正的實(shí)時(shí)操作系統(tǒng),時(shí)間分片方式和協(xié)作方式的RTOS都不是嚴(yán)格意義上的“實(shí)時(shí)”。VxWorks是美國(guó)WindRiver公司于1983年開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),以其良好的擴(kuò)展能力、高性能的內(nèi)核,以及友好的用戶(hù)開(kāi)發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)了重要的一席之地。

VxWorks操作系統(tǒng)
  
VxWorks 操作系統(tǒng)包括了進(jìn)程管理、存儲(chǔ)管理、設(shè)備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議及系統(tǒng)應(yīng)用等幾個(gè)部分。VxWorks只需很小的存儲(chǔ)空間,并可高度裁剪,保證了系統(tǒng)能以較高的效率運(yùn)行。VxWorks主要由以下幾個(gè)部分組成。
  
1.操作系統(tǒng)核心
  
VxWorks 的核心被稱(chēng)作wind,用優(yōu)先級(jí)搶占方式進(jìn)行多任務(wù)調(diào)度,執(zhí)行任務(wù)間的同步、進(jìn)程間通信和中斷處理,對(duì)看門(mén)狗和內(nèi)存進(jìn)行管理。一個(gè)多任務(wù)環(huán)境允許實(shí)時(shí)應(yīng)用程序以一套獨(dú)立任務(wù)的方式構(gòu)筑,每個(gè)任務(wù)擁有獨(dú)立的執(zhí)行線(xiàn)程和自己的系統(tǒng)資源。進(jìn)程間通信機(jī)制可以保證任務(wù)的同步與協(xié)調(diào)。

wind使用中斷驅(qū)動(dòng)和優(yōu)先級(jí)的方式,縮短了上下文轉(zhuǎn)換的時(shí)間開(kāi)銷(xiāo)和中斷時(shí)延。在VxWorks中,任何例程都可以被啟動(dòng)為一個(gè)單獨(dú)的任務(wù),擁有自己的上下文和堆棧。還有一些其他的任務(wù)機(jī)制可以使任務(wù)掛起、繼續(xù)、刪除、延時(shí)或者改變優(yōu)先級(jí)。
  
wind核提供信號(hào)量作為任務(wù)間同步和互斥的標(biāo)志。wind核針對(duì)不同的應(yīng)用需求,有二進(jìn)制信號(hào)量、計(jì)數(shù)信號(hào)量、互斥信號(hào)量和 POSIX信號(hào)量幾種。這些信號(hào)量除了應(yīng)用在開(kāi)發(fā)設(shè)計(jì)過(guò)程中,還被廣泛地應(yīng)用到VxWorks高層應(yīng)用系統(tǒng)中。對(duì)于進(jìn)程間通信,wind 核也提供了諸如消息隊(duì)列、管道、套接字和信號(hào)等機(jī)制。
  
2.I/O 系統(tǒng)
  
VxWorks提供了一個(gè)快速靈活、與ANSI C兼容的I/O系統(tǒng),包括 UNIX 標(biāo)準(zhǔn)的緩沖I/O和 POSIX標(biāo)準(zhǔn)的異步I/O。VxWorks 包括以下驅(qū)動(dòng)程序:網(wǎng)絡(luò)驅(qū)動(dòng)、管道驅(qū)動(dòng)、RAM盤(pán)驅(qū)動(dòng)、SCSI驅(qū)動(dòng)、鍵盤(pán)驅(qū)動(dòng)、顯示驅(qū)動(dòng)、磁盤(pán)驅(qū)動(dòng)、并口驅(qū)動(dòng)等。
  
3.文件系統(tǒng)
  
VxWorks提供的快速文件系統(tǒng)適合于實(shí)時(shí)系統(tǒng)應(yīng)用,包括幾種支持使用塊設(shè)備的本地文件系統(tǒng)。這些設(shè)備都使用一個(gè)標(biāo)準(zhǔn)的接口從而使得文件系統(tǒng)能夠被靈活地在設(shè)備驅(qū)動(dòng)程序上移植。另外,VxWorks 也支持SCSI磁帶設(shè)備的本地文件系統(tǒng),VxWorks I/O體系結(jié)構(gòu)甚至還支持在一個(gè)單獨(dú)的VxWorks系統(tǒng)上同時(shí)并存幾個(gè)不同的文件系統(tǒng)。VxWorks支持dosFs、rt11Fs、rawFs和tapeFs四種文件系統(tǒng)。
  
普通數(shù)據(jù)文件和外部設(shè)備都統(tǒng)一作為文件處理,使用相同的語(yǔ)法定義和保護(hù)機(jī)制,這樣既簡(jiǎn)化了系統(tǒng)設(shè)計(jì)又便于用戶(hù)使用。
  
4.板級(jí)支持包 BSP(Board Support Package)
  
VxWorks BSP包含了開(kāi)發(fā)人員在特定的目標(biāo)機(jī)上運(yùn)行VxWorks時(shí)所需的一切支持,包括支持特定目標(biāo)機(jī)的軟件(如驅(qū)動(dòng)程序等)和從主機(jī)通過(guò)網(wǎng)絡(luò)引導(dǎo)VxWorks的Boot ROM。WindRiver提供支持不同廠商的200多種BSP,另外還提供BSP移植包,幫助用戶(hù)移植VxWorks到特定硬件上。
  
5.網(wǎng)絡(luò)設(shè)施  

VxWorks的網(wǎng)絡(luò)結(jié)構(gòu)提供了對(duì)其他網(wǎng)絡(luò)和TCP/IP網(wǎng)絡(luò)系統(tǒng)的“透明”訪問(wèn),包括與BSD套接字兼容的編程接口、遠(yuǎn)程過(guò)程調(diào)用、遠(yuǎn)程文件訪問(wèn)以及BOOTP和ARP代理。VxWorks網(wǎng)絡(luò)機(jī)制遵循標(biāo)準(zhǔn)的Internet協(xié)議。

WindNet SNMP
  
WindNet SNMP代理將工業(yè)標(biāo)準(zhǔn)網(wǎng)絡(luò)管理引入實(shí)時(shí)嵌入系統(tǒng)中,WindRiver是第一個(gè)提供集成支持SNMPv2c協(xié)議的SNMP代理軟件的嵌入產(chǎn)品廠商。WindNet SNMP v1/v2c代理只需要很少的內(nèi)存,并和傳輸層獨(dú)立,可以在不同的協(xié)議棧上使用同一個(gè)代理程序,只需要配置其初始化過(guò)程。WindNet SNMP代理支持RFC 1155、 RFC 1157、RFC 1212、RFC 1213及RFC 1901等協(xié)議。
  
WindNet SNMP v1/v2c代理軟件提供MIB工具可以減輕操作MIB文檔費(fèi)時(shí)而且易錯(cuò)的工作,MIB工具將簡(jiǎn)明的MIB格式或SNMP v2c格式的MIB文檔轉(zhuǎn)化成代理使用的更高效的文件格式。MIB編譯器產(chǎn)生訪問(wèn)MIB變量的函數(shù)代碼,減輕了開(kāi)發(fā)工作。VxWorks操作系統(tǒng)還有穩(wěn)定可靠、實(shí)時(shí)性好、可縮放裁剪、開(kāi)放性好、易用等優(yōu)點(diǎn),再加上強(qiáng)大的網(wǎng)絡(luò)功能,特別適合于網(wǎng)絡(luò)設(shè)備的開(kāi)發(fā)。
  
網(wǎng)絡(luò)管理工作站(管理站)通常是一臺(tái)PC或工作站,管理整個(gè)網(wǎng)絡(luò)上的設(shè)備,管理站軟件不是WindNet SNMP v1/v2c的一部分,但WindNet SNMP v1/v2c可以和絕大部分管理站軟件一起工作,如HP OpenView和SunNet管理器。因?yàn)閃indNet SNMP v1/v2c支持兩個(gè)協(xié)議,所以可以和運(yùn)行SNMPv1或SNMPv2c的管理站通信。整個(gè)系統(tǒng)構(gòu)成如圖1所示。



SNMP代理的設(shè)計(jì)與實(shí)現(xiàn)
  
1. SNMP代理模塊工作流程
  
SNMP代理模塊包括6個(gè)子模塊,如圖2所示。


  
SNMP代理是一個(gè)單任務(wù),采用先進(jìn)先出隊(duì)列,一次處理一個(gè)PDU。代理從管理站接收PDU后,對(duì)其進(jìn)行語(yǔ)法分析,將其轉(zhuǎn)換成一個(gè)可用的內(nèi)部數(shù)據(jù)結(jié)構(gòu),將MIB變量映射成本地變量,判斷請(qǐng)求的MIB對(duì)象是否在代理的MIB樹(shù)中,如果存在,調(diào)用對(duì)應(yīng)的MIB變量處理例程來(lái)處理,命令執(zhí)行完之后,再將內(nèi)部數(shù)據(jù)格式轉(zhuǎn)換回ASN.1格式創(chuàng)建響應(yīng)PDU,調(diào)用Socket的sendto()函數(shù)將它發(fā)送給管理站。
  
(1)初始化  

SNMP代理在啟動(dòng)時(shí)通過(guò)調(diào)用usrSnmpInit( )產(chǎn)生一個(gè)任務(wù)tSnmpd,進(jìn)入任務(wù)的主要入口函數(shù)是snmpIoMain( )。在初始化工作結(jié)束后,snmpIoMain( )調(diào)用snmpdInitFinish( ),并由snmpdInitFinish( )向管理站發(fā)送trap,通知它代理已經(jīng)開(kāi)始工作,然后進(jìn)入消息處理循環(huán),如圖3所示。
  


(2)消息處理循環(huán)
  
首先支持例程snmpIoBody( )在UDP端口161收聽(tīng)消息,收到消息后交給snmpdPktProcess()處理,snmpdPktProcess( )將消息傳給snmpIoCommunityValidate( ),snmpIoCommunityValidate( )驗(yàn)證共同體名是否合法。共同體名的系統(tǒng)缺省設(shè)置為:對(duì)于具有共同體名pub或public的管理站只能執(zhí)行g(shù)et操作,而具有共同體名priv或private的管理站可以進(jìn)行set操作。通過(guò)共同體名驗(yàn)證后,代理調(diào)用用戶(hù)定義的MIB訪問(wèn)函數(shù),并將其所提供的信息構(gòu)成pdu,交給snmpIoWrite( )返回給管理站。

(3) 退出代理程序
  
當(dāng)用戶(hù)需要停止snmp代理,調(diào)用snmpdExit( ),由它調(diào)用 MIB 中止例程并且釋放所有代理的資源,之后所有的SNMP 服務(wù)都不再被支持。
  
開(kāi)發(fā)SNMP代理主要包括兩方面的工作即MIB的轉(zhuǎn)化和擴(kuò)展MIB,以下將分別介紹。
  
2. MIB的轉(zhuǎn)化
  
由于MIB都是用ASN.1編寫(xiě)的,需要將其轉(zhuǎn)化成C/C++的數(shù)據(jù)結(jié)構(gòu),才能用程序?qū)崿F(xiàn)。對(duì)MIB文文件的轉(zhuǎn)化工作是費(fèi)時(shí)而且易錯(cuò)的,所幸的是WindNet SNMPv1/v2軟件包中提供的mibcomp可以將MIB編譯成c代碼,并將每一個(gè)MIB變量與其相應(yīng)的讀寫(xiě)例程聯(lián)系在一起。具體操作過(guò)程如下。



(1)檢查MIB中是否存在錯(cuò)誤
  
這一步是對(duì)要轉(zhuǎn)化的MIB(如example.mib)進(jìn)行語(yǔ)法檢查,標(biāo)準(zhǔn)MIB文件一般都定義得很規(guī)范,語(yǔ)法上很少出錯(cuò),而對(duì)于自定義的MIB來(lái)說(shuō),這一步很重要,它可以幫助MIB編寫(xiě)者檢查一些疏忽的語(yǔ)法錯(cuò)誤。它使用的命令如下。
mibcomp -check example.mib
  
(2)創(chuàng)建MIB樹(shù)
  
每個(gè)代理都有一棵自己支持的MIB樹(shù),如果管理站所要查詢(xún)或設(shè)置的變量不在該MIB樹(shù)內(nèi),代理向管理站返回noSuchName 的錯(cuò)誤信息。
  
在創(chuàng)建MIB樹(shù)的過(guò)程中,同時(shí)在MIB樹(shù)中每個(gè)葉子結(jié)點(diǎn)中賦予get、set等操作的函數(shù)指針,使用如下命令生成c代碼文件exampleTree.c。
  
mibcomp -o exampleTree.c -stub example.mib
  
使用如下命令生成頭文件exampleLeaf.h,它是用來(lái)定義每個(gè)葉子值的。
  
mibcomp -o exampleLeaf.h -leaf example.mib
  
(3)生成例程函數(shù)的頭文件及c代碼文件
  
通過(guò)使用mibcomp的-skel和-stub兩個(gè)參數(shù)可以分別生成例程函數(shù)相應(yīng)的用作函數(shù)聲明的頭文件和例程函數(shù)的c代碼文件。但是實(shí)際開(kāi)發(fā)中發(fā)現(xiàn)生成c代碼不能適用要求,需要自己重新編寫(xiě)。
  
使用如下命令生成頭文件exampleHead.h。
  
mibcomp -o exampleHead.h - skel example.mib
  
使用如下命令生成c文件exampleC.c。
  
mibcomp -o exampleC.c - stub example.mib
  
(4)為管理站創(chuàng)建.rt文件
  
.rt文件是用來(lái)向管理站說(shuō)明代理的MIB樹(shù),通過(guò)如下命令生成。
  
mibcomp -o exampleMib.rt -readtree. example.mib
  
至此,就基本上完成了MIB的轉(zhuǎn)化工作。
  
3.?dāng)U展MIB的實(shí)現(xiàn)
  
Vxworks已經(jīng)完成對(duì)MIB-II的實(shí)現(xiàn),并支持?jǐn)U展MIB的實(shí)現(xiàn)。對(duì)MIB的擴(kuò)展實(shí)際上是為網(wǎng)絡(luò)設(shè)備所支持的各MIB編寫(xiě)訪問(wèn)函數(shù),同時(shí)根據(jù)自己的需要對(duì)MIB-II的相關(guān)組重新編寫(xiě),具體過(guò)程如下。


  
首先,利用MIB編譯器可以把用ASN.1語(yǔ)言描寫(xiě)的MIB文件編譯成C語(yǔ)言代碼的MIB樹(shù)、Get、Set、Next、Test函數(shù)的接口及相應(yīng)的頭文件,極大地方便了代理軟件的開(kāi)發(fā)。在MIB樹(shù)的節(jié)點(diǎn)中存放了get,set,next,test函數(shù)的指針及一個(gè)稱(chēng)為cookie的域,process_received_SNMP_packed根據(jù)收到的PDU中的OID在MIB樹(shù)中搜索到相應(yīng)的管理變量對(duì)應(yīng)的節(jié)點(diǎn),然后調(diào)用這些函數(shù)從其他模塊得到具體實(shí)例值。
  
然后為MIB中的表型變量定義數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)具體數(shù)值,以RFC1643中的統(tǒng)計(jì)組舉例如下。
  
typedef struct
    {
      unsigned long dot3StatsIndex;
      unsigned long dot3StatsAlignmentErrors;
      unsigned long dot3StatsInternalMacTransmitErrors;
      ... ...
      M2_OBJECTID dot3StatsEtherChipSet;
     } DOT3_STATISTIC_TABLE; /*rfc1643統(tǒng)計(jì)表結(jié)構(gòu)*/
  
第三步是編寫(xiě)訪問(wèn)函數(shù), SNMP代理的代碼編寫(xiě)工作集中在訪問(wèn)函數(shù)的編寫(xiě)上。如前所述,在創(chuàng)建代理MIB樹(shù)時(shí),訪問(wèn)函數(shù)名已經(jīng)賦給了MIB樹(shù)葉節(jié)點(diǎn)中的訪問(wèn)函數(shù)指針,這樣當(dāng)查找到相應(yīng)的葉子節(jié)點(diǎn)時(shí),就會(huì)通過(guò)訪問(wèn)函數(shù)指針調(diào)用相應(yīng)的訪問(wèn)函數(shù)。訪問(wèn)函數(shù)主要包括Get函數(shù)、Next函數(shù)、Test函數(shù)、Set函數(shù)以及Undo函數(shù),其中Get函數(shù)、Next函數(shù)、Set函數(shù)分別完成對(duì)Get、GetNext、Set命令的響應(yīng)。
  
最后是編寫(xiě)相關(guān)協(xié)議模塊與代理的接口函數(shù),通過(guò)這些接口函數(shù),可以獲得各種實(shí)際信息,比如通過(guò)交換芯片的驅(qū)動(dòng)模塊,可以獲得實(shí)時(shí)的計(jì)數(shù)器信息;通過(guò)訪問(wèn)內(nèi)存中的系統(tǒng)信息表,可以獲得有關(guān)系統(tǒng)的各種基本信息,等等。

結(jié)束語(yǔ)
  
WindNet SNMP v1/v2c代理軟件為開(kāi)發(fā)網(wǎng)管代理提供了很多方便,它還支持主從式代理的概念,使主代理駐留在系統(tǒng)中核心部件,它和一般代理一樣實(shí)現(xiàn)各種功能,其他部件上運(yùn)行從代理,從代理可以看成主代理的簡(jiǎn)化版,有自己的MIB樹(shù),以及訪問(wèn)函數(shù),從而使整個(gè)系統(tǒng)具備良好的性能和可擴(kuò)展性。
本文地址:http://www.qingdxww.cn/thread-12503-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
chentiejian 發(fā)表于 2010-6-14 20:58:16
呵呵,多謝分享
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 想要避免發(fā)生災(zāi)難,就用MPLAB SiC電源仿真器!
  • 我們是Microchip
  • 你仿真過(guò)嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險(xiǎn)
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 两个人免费观看高清视频图 | 在线播放不卡 | h漫在线免费观看 | 亚洲品色永久网址入口app | 五月婷综合 | 亚洲成人影院在线 | 思思久久q6热在精品国产 | 9797在线| 色国产在线观看 | 九色视频在线观看免费 | 成人在线第一页 | 日本卡通动漫影院网站 | 一级做性色a爱片久久片 | 亚洲成人黄色网址 | 天堂在线中文 | 高清一区高清二区视频 | 亚洲国产欧美在线人网站 | 天天色天天综合网 | 国内视频一区 | 国产精品一区91 | 麻豆日记| 国产精品国产三级国产普通话对白 | 青草园网站在线观看 | 4虎影视国产在线观看精品 4虎成人 | 欧美日韩一二三区 | 四虎永久在线精品波多野结衣 | 99久久免费精品国产免费 | 日韩专区一区 | 日本一区二区三区四区不卡 | 三级网站免费观看 | 五月天婷色 | 亚洲男女在线 | 亚洲欧美天堂网 | 国产成人亚洲精品 | 亚洲精品一卡2卡3卡三卡四卡 | 国产成人午夜精品5599 | 在线观看欧美三级 | 国产成人精品一区二区不卡 | 亚洲视频免费观看 | 狠狠色狠狠色综合日日小蛇 | 国产在视频线精品视频 |