基于AT91SAM9260工控机平台的SNMP协议实现
扫描二维码
随时随地手机看文章
互联网技术成本低廉、灵活性强,在很多领域都有着广泛的应用前景。其在工业自动化领域的应用一直是一个研究热点。SNMP(简单网络管理)协议是一种被广泛应用的互联网设备管理协议,其最大的特点就是成本低廉,容易实现。SNMP协议可以管理大部分符合Internet标准的设备。通过添加新的被管对象,可以非常方便地扩展其管理能力。即使在被管设备发生严重的错误时,协议本身的特点也促使其不会影响管理者的正常工作。
本文介绍一种基于AT91SAM9260工控机平台的SNMP协议实现方法,通过开发能在AT91SAM9260工控机平台上运行的SNMP Agent(SNMP代理),并扩展其MIB(管理信息)库,实现在互联网上管理工控机本身和与工控机通过其他通信协议连接的设备资源。
1 SNMP(简单网络管理)协议介绍
1.1 SNMP协议概述
SNMP协议是一种基于TCP/IP协议的应用层网络管理标准,被广泛应用于管理互联网上众多厂家的软硬件平台。SNMP协议的模型如图1所示,其中管理应用通过发送Get、Set、GetNext、GetResponse和Event这五种类型的消息来读取或设置被管设备的MIB库,实现对被管设备的管理。
SNMP协议作为应用层协议,通过用户数据报协议(UDP)来实现管理信息在互联网上的传输,相对于TCP协议,UDP这种无连接的通信方式,不但加强了SNMP协议的稳定性,而且提高了SNMP协议的运行效率。
1.2 MIB(管理信息)库
MIB库是管理站可以通过SNMP协议访问的被管理对象的集合。MIB描述了被管理对象能够为管理者提供哪些管理信息以及这些信息之间的关系。MIB使用ASN.1描述语言对对象进行描述。ASN.1使被描述对象在逻辑上形成树形结构(如图2),这样管理站就可以很方便地访问到MIB库中各个节点的信息。ASN.1描述语言也提供了基本编码规则(BER),使MIB库中数据按规则转换为串行字节流在网络上传输。
2 开发环境介绍
2.1 AT91SAM9260工控机
本文使用的AT91SAM9260工控机是一套基于ARM926EJ-S核心的嵌入式工控机系统,处理器采用ATMEL公司的AT91SAM9260,210 MHz,230MIPs。存储器包括64MB NandFlash,64MB SDRAM,2MB NorFlash。网络(Ether-net)单元为一个10/100M网络。操作系统为2.6.19内核的嵌入式linux。该设备的软硬件平台是完全满足SNMP协议的开发需求的。
2.2 net-snmp开发包
net-snmp开发包是由加州大学戴维斯分校(University ofCalifonia,Davis)开发并维护的可在linux系统下使用的SNMP协议开发程序。本文使用的是net-snmp-5.4.4版本,其组成内容主要包括:
1)可扩展SNMP Agent程序(snmpd)开发库;
2)几个用于设置SNMP代理变量的管理端命令(snmpget,snmpset,snmpwalk等);
3)将MIB文件转换成C语言程序用于MIB库扩展的mib2c工具;等等。
3 SNMP协议实现
3.1 交叉编译环境搭建
由于AT91SAM9260工控机平台上的嵌入式linux系统运行能力有限,需要在电脑上搭建net-snmp的交叉编译环境。电脑的操作系统选用的是fedora 8,交叉编译工具选用的是AT91SAM9260工控机开发包自带的armv51-linux-gcc.tar.bz2交叉编译器。
交叉编译环境搭建好以后,将net-snmp-5.4.4.tar.gz开发包拷贝到fedora 8系统的/usr/local/src文件夹下,打开fedora 8下终端(terminal)程序,运行“tar-zxvf net-snmp-5.4.4.tar.gz/work”、“cob/work/net-snmp-5.4.4”,就到达net-snmp-5.4.4的源码所在的文件夹“/work/net-snmp-5.4.4”中了。
交叉开发环境搭建好以后,就可以开始在工控机上实现SNMP协议的开发了。开发过程主要分为以下两个部分:
1)开发出能在AT91SAM9260工控机上运行的SNMPAgent程序(即snmpd程序);
2)通过net-snmp开发包提供的工具,扩展MIB库。
3.2 SNMP Agent开发
在使用net-snmp开发包编译smnpd程序之前,要对编译选项进行配置。继续在fedora 8下运行“./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”,此命令主要是对交叉编译器,目标机大小端,代理的编译模式进行配置。各配置选项的具体含义可以运行“./configure-help”查看。
配置完net-snmp编译选项后可以进行静态编译,运行“make LDFLAGS=”-static””,编译得到snmpd。将snmpd拷贝到工控机操作系统的/usr/sbin目录下,并在工控机操作系统终端下运行“ehmod u+x snmpd”,更改snmpd的权限。
要在工控机操作系统下运行SNMP Agent程序,还需要配置snmpd.conf文件。使用电脑上路径“/work/net-snmp-5.4.4/EXAMPLE.conf”的文件作为测试范本,将其拷贝成工控机“/usr/loeal/share/snmp/snmpd.cord”文件,将其中的community设置修改为以下内容:
#sec.name source community
com2sec local loealhost public
com2sec net 192.168.0.135/24 public
其中工控机所在的测试网段为192.168.0.xxx。将组设置改为可读写(group MyRWGroup v2c net),以方便测试使用。
移植完snmpd和snmpd.eonf文件后,在工控机操作系统终端下运行“snmpd-f-Le-d”命令,如果正常启动,则snmpd移植成功。
3.3 MIB库扩展
进入fedora 8的“/work/net-snmp-5.4.4/share/snmp/mibs”路径下,可以看到net-snmp包涵了很多公有MIB文件。这些文件都是按照规范格式开发出来的。管理信息库的扩展就是将按照这种规范格式开发出来的私有MIB文件移植到net-snmp中。以实现管理端通过SNMP协议对私有对象进行管理。扩展MIB库主要分为以下三个步骤:
首先,将待扩展的私有MIB文件拷贝到fedora 8的“/work/net-snmp-5.4.4/share/snmp/mibs”路径下,并将该MIB文件添加到环境变量MIBS中去(fedora下运行“ex port MIBS=ALL”)。添加完可以用net-snmp自带的snmptranslate命令检测代理是否能够正确找到待扩展的私有MIB。
然后,使用mib2c工具生成C文件,例如fedora下运行“mib2 netSnmpExampleScalars”命令,就会生成MIB文件中定义的netSnmpExampleScalars对象的.h文件和.c文件。其中.h文件对节点进行函数声明和宏定义。.c文件分为初始化函数和响应函数两大块。其中初始化函数用来对变量进行注册,响应函数用来响应管理端的操作命令,响应函数的返回值需要手工填充。
最后,将私有MIB生成的C文件拷贝到“/work/net-snmp-5.4.4/agent/mibgroup”目录下,重新配置net-snmp,在./configure后面添加“-with-mib-modules=“XXX ””(其中XXX为生成的C文件名),编译生成新的snmpd程序,移植到工控机系统中。
连接好工控机到电脑的网络,使用net-snmp开发包自带的snmpget,snmpset等命令测试snmpd的运行情况,如果得到正确的结果测试,就证明在AT91SAM9260工控机上实现SN MP协议成功。
4 结束语
net-snmp开发包提供了强大的开发和测试工具,使开发者能方便地完成各种嵌入式工控机平台下的SNMP协议开发。本文实现的基于AT91SAM9260工控机平台的SNMP协议,在工业级互联网管理设备的开发上有着很大的应用前景。