更全的杂志信息网

嵌入式Linux下基于SNMP代理实现设备监控的开发

更新时间:2016-07-05

1 引言

随着广播电视事业的发展,国内各广播电台陆续开始进行技术革新,广播的播出节目的套数越来越多,特别是总控机房的改建,对广播电视安全可靠播出的要求也越来越高,安全播出是广电行业的生命线,这不仅要求值班人员要进一步强化安全播出意识,更重要的是要提高我们的安全播出手段,提高设备安全性、稳定性及可靠性,避免停播事故,而会议扩声系统和指控中心在一些重要场合对语音信号的链路传输也有很高的要求,这些都需要做到多路备份,在主路音频链路出现故障时可以快速实现通道切换。

在这个互联网高速发展的时代,多媒体网络技术大量普及给音频切换器类产品融入了新元素,通过接入网络可以实现对设备的实时监控和操作。随着一体化管控平台的日渐普及,将设备纳入到平台体系下已经是大势所趋。简单网络管理协议SNMP(Simple Network Management Protocol)是按照“若要管理某个对象,就必然会给该对象添加一些软件或硬件,但这种“‘添加’必须对原有对象的影响尽量小些”的基本原则来设计的,其最重要的指导思想就是要尽可能简单[1],按照这个思路,一体化管控平台就可以通过SNMP代理对我们的设备实现访问、监控。

2 SNMP协议简介

SNMP简单网络管理协议是基于以太网,提供网络管理服务的应用协议,其产生的目的,就是为了使松散的网络更加有效地运行[2]。它广泛应用于监测网络的状态、网络设备的运行情况、各种电脑设备以及一些辅助的外围设备的工作状态,使得网络管理员通过对节点的查询和设置,发现并定位故障,进而采取相应措施维护网络。

SNMP的网络管理由三个部分组成,即管理信息库MIB、管理信息结构SMI以及SNMP本身。其中SNMP是以MIB(管理信息结构)为基础来描述被监管资源,由此建立的数据集和称之为MIB库。它是一种树型结构存储被管网元信息的数据库,反映了该MIB树上每个节点中被监管资源的状态,被监管的对象都处于叶子节点上,每个被监管对象都由一个唯一的对象标识符来识别。

管理信息结构(SMI)对管理信息的名称组织方式、信息描述方式,以及传输编码机制进行了约定。SMI 确定由ASN. 1 作为消息定义抽象语句,采用基本编码原则(BER)提供传输语句,采用对象标志符(OID)作为管理对象名称的命名方式。MIB 和SMI 体现了SNMP 中管理对象信息的组织方式[2]

2.1 基于私有MIB的代理扩展及交叉编译

智能音频切换器是进行多路专业音频切换的广电级设备,为了在一体化管控平台中增强设备的可管理性,实现平台化的切换控制和检测,设备使用了SNMP代理与网管服务器进行对接。该设备具有10组2选1的音频信号切换模块,拥有多种功能模式。为了将设备各个切换模块的通道状态、电平信息、告警信息、切换模式以及是否连接等状态通过SNMP代理上报到网管服务器,需要按照SNMP管理要求定义自己的私有MIB,将原有的标准MIB II进行扩展。其中私有的MIB一般定义在iso.org.dod.intemet.private.enterprise节点下。设备与网管服务器连接的系统如图1所示。

图1 设备与网管服务器连接的系统图

SNMP代理软件开发使用的环境为嵌入式Linux-2.6.32.2,交叉编译链版本为arm-linux-gcc4.3.2,SNMP的版本为net-snmpv5.4.2.1,硬件是以S3C2440为核心处理器的ARM网络模块[3]

net-snmp把管理信息结构SMI(Structure of Management Information)中的对象分为两大类:scalar和table。scalar变量包含我们常用的整型,字符串,时间等数据类型。table表就是scalar的一种集合,由一个和多个列组成,类似于数据库中的表,它必须具有索引项,用来按一定顺序检索表项。智能音频切换器的代理扩展主要是以table来实现,以scalar为辅助。

ARM端与PC端的通信采用SNMP表格来实现,这是因为SNMP Table是对象的有序集合,设备中切换模块数据的组织用表格来表达更方便,同时使用多个对象的组合才能完整描述切换模块的工作状态,而且各个切换模块工作状态格式的信息有多条编写含有table结构的MIB文件,使用MG-SOFT MIB Compiler检查好语法,特别需要注意MIB中的table,entry的大小写,OBJECT-TYPE的变量名必须以小写开头。文件将设备的OID(Object Identifier对象标识符)定义在experimental.8888.3.3节点下,该节点下又定义了1个设备状态表格myCardStatusTable,表格由myCardIndex, myCardAlarm, myCardswitchStatus, myCardLevelThreshold, myCardSwitchDelay和myCardConnectStatus 等11个条目构成,其中myCardIndex代表切换模块序号,myCardAlarm代表切换模块是否告警,myCardswitchStatus 代表切换模块的切换状态,myCardLevelThreshold代表切换模块的门限电平, myCardSwitchDelay代表切换模块的切换延时,myCardConnectStatus代表切换模块连接状态等信息,通过表格设备代理可以将10路切换模块的信息反馈到网管服务器。如表1所示。

表1 MIB文件的table结构

myCardIndexmyCardAlarm…myCardConnectStatus1alarm…connected2noalarm…notconnected…………10alarm…notconnected

MAX-ACCESS read-only

表2 MIB库文件的语法说明

关键字说明备注tablename表格名xxxxTable首字母小写Entrytype表对象名XxxxEntry首字母大写not-accessible访问方式此处必须是not-accessibleentryname行名和XxxxEntry名相同,首字母小写xxxxEntrydescription描述信息

其声明如下:

tablename OBJECT-TYPE

在同轨双车运行模式下,同一巷道上两台堆垛机同时工作,为保证效率最优,货物需在货架中左右均衡分布,货物出/入库应交由用时最短的堆垛机,则货位[i,j,k]中货物的最短出库时间为

SYNTAX SEQUENCE OF Entrytype

MAX-ACCESS not-accessible

STATUS current

entryname OBJECT-TYPE

:: ={ (parent) (number)}

DESCRIPTION (description)

1.3.1 理论考核评价。两组学生期末实行统一时间进行理论考试,全部为选择题,采用100分制,考试内容以理论教学授课内容为依据,其中使用“微课”授课的相关内容共占30分作为保证考核的公平、公正,由同一组专职老师监考,严格按照考核标准进行。

SYNTAX Entrytype

大丫的继母是一个清洁工,脾气很糟,讲话高门大嗓,得理不让人,喜欢撒谎。出了这件丑闻之后,她们母女俩甚至动手厮打在一起了。她的继母一口咬定是大丫勾引了她的情人。

MAX-ACCESS not-accessible

|

STATUS current

DESCRIPTION description

INDEX { index list }

:: ={ (tablename) 1}

(Entrytype) :: =

SEQUENCE {

(column1) (column1type),

(column2) (column1type),

MAX-ACCESS not-accessible

}

按照表格类型的声明格式,智能音频切换器的MIB文件DAL3100-MIB.txt编辑如下(由于整个表格内容较多,这里仅列出几项)。

DAL3100-MIB DEFINITIONS ::= BEGIN

IMPORTS

TimeTicks FROM SNMPv2-SMI

SnmpAdminString FROM SNMP-FRAMEWORK-MIB

SYNTAX INTEGER {connected(1), notconnected(2) }

cetc MODULE-IDENTITY

::= { enterprises 8888 }

建设项目施工保险主要为建筑工程一切险及第三者责任险,根据《公路工程标准施工招标文件》(2018年版)中相关规定,建筑工程一切险主要是指合同工程的永久工程、临时工程和设备及已运至施工工地用于永久工程的材料和设备所投的保险。

thirdResearch OBJECT IDENTIFIER ::= { cetc 3 }

myCardStatus OBJECT IDENTIFIER ::= { thirdResearch3 }

myCardStatusTable OBJECT-TYPE

SYNTAX SEQUENCE OF MyCardStatusEntry

( columnN) (columnNtype)

STATUS current

(1)优化训练系统整体结构。新型嵌入式训练系统将综合集成多种形式的嵌入式仿真训练功能,形成功能配套、性能匹配的军兵种模拟系统,适用于装备研发、验证和使用的各个阶段,避免装备空挡期的出现。

::= { myCardStatus1 }

myCardStatusEntry OBJECT-TYPE

SYNTAX MyCardStatusEntry

MAX-ACCESS not-accessible

STATUS current

章学诚,字实斋,号少岩。浙江会稽(今绍兴)人,生于清乾隆三年(1738),卒于嘉庆六年(1801),终年64岁。其生活的时代,正是历史上所谓的“乾嘉时代”。

INDEX { myCardIndex }

::= { myCardStatusTable 1 }

MyCardStatusEntry ::= SEQUENCE {

myCardIndex INTEGER,

myCardAlarmINTEGER,

myCardConnectStatusINTEGER

}

回顾性分析该中心治疗的患有阴道炎的老年糖尿病患者96例的资料为研究对象,按照时间段为对照组与观察组,每组48例,其中前者为对照组,给予雌激素软膏治疗;后者为观察组,在雌激素软膏治疗的基础上给予保妇康栓的治疗方案。观察组患者年龄(57.6±5.12)岁;对照组患者年龄(58.0±4.89)岁。两组患者在年龄、糖尿病病程均差异无统计学意义(P>0.05)。

myCardIndex OBJECT-TYPE

SYNTAX INTEGER

MAX-ACCESS read-only

联轴器膜片在运转过程中受力十分复杂,既要承受扭矩载荷和联轴器中间体的重力载荷,又要承受齿轮箱输出轴和发电机输入轴不对中产生的位移载荷。膜片本身的质量缺陷很容易造成其在运行过程中发生断裂。因此在膜片制造过程中,需要对每个膜片进行表面裂纹检查,同时对每个批次的膜片抽样进行化学成分、低温冲击功、抗拉强度、屈服强度和金相检查。

STATUS current

(7)建筑能效测评软件是确定建筑用能效率的计算工具,用户对象是能效测评机构,根据国家最新标准和地方标准开发,用于建筑能效测评计算。

::= { myCardStatusEntry 1 }

myCardAlarm OBJECT-TYPE

SYNTAX INTEGER { alarm(1), noalarm(2) }

MAX-ACCESS read-only

“高校固定资产管理平台”的使用,推进了固定资产管理工作的信息化进程,也促进了高校数字校园的建设,实现对固定资产的动态管理,同时也真实反映学校的固定资产及财务状况。

STATUS current

::= { myCardStatusEntry2 }

myCardConnectStatusOBJECT-TYPE

enterprises FROM SNMPv2-SMI

纳入标准:①临床诊断为胃癌,且年龄≥60岁或文献中明确指出是老年患者;②对比替吉奥单药与卡培他滨单药化疗的临床随机对照试验(RCT)。

根据ASN.1语法编写MIB库文件,其中表格类型是一个特殊类型的声明,表格内声明的对象称为列对象,表格对象可以看作是一些标量对象的集合。利用SEQUENCE和SEQUENCE OF定义表格和表格中的行,通常来说,表格对象的名字后面加有后缀Table,行对象的名字后面加有后缀Entry[4]。如表2所示。

STATUS current

::= { myCardStatusEntry3 }

END

得益于现代数字化通信技术的革命性突破,现今,文字、图像、视频等各类信息都可以利用数字技术储存和传播,在同一个平台上囊括了不同媒介的信息也成为可能。就当今媒体市场的整体发展方向来说,媒介融合是改善媒体生态的重要手段。

在Fedora系统中把生成的DAL3100-MIB.txt放到usr/local/net-snmp/share/snmp/mibs/的文件夹里,并将该mib添加到环境变量MIBS中, 查看MIB是否添加成功:

[root@localhostmibs]# snmptranslate -IR -TpmyCardStatusTable

+--mini2440(3)

综上所述,钢箱梁长度增加有利于减小截面1和截面2负弯矩,钢箱梁长度为96 m是截面1和截面2对称受力的重要分界点;对于截面3,钢箱梁长度由56 m增加至96 m时受力显著减小,然而进一步增加钢箱梁长度,截面受力基本不再减小,当超过116 m截面受力反而增大。因此,由恒载作用下截面1、截面2、截面3所受弯矩随钢箱梁长度变化规律可得到,钢箱梁长度为96 m时主梁截面受力较为合理。

+--myCardStatusTable(5)

|

+--myCardStatusEntry(1)

| Index: myCardIndex

+-- -R-- INTEGER myCardIndex(1)

+-- -R-- EnumValmyCardAlarm(2)

| Values: alarm(1), noalarm(2)

+-- -R-- EnumValmyCardConnectStatus(3)

| Values: connected (1),noconnected(2)

mib2c工具将MIB库转化为代理程序框架,然后基于此框架进行进一步开发。利用mib2c提供的表格生成模版其目的一是可以降低对SNMP知识的要求,二是分离请求中对数据的定位和响应中对数据的处理,使得实现上集中在对数据的处理上。

[root@localhostmibs]#env MIBS="+DAL3100-MIB" mib2c -c mib2c.iterate_access.conf myCardStatusTable

这个模版生成了下面的文件:

running indent on myCardStatusTable_checkfns.h

running indent on myCardStatusTable_enums.h

running indent on myCardStatusTable_checkfns_local.h

running indent on myCardStatusTable_access.h

running indent on myCardStatusTable.h

running indent on myCardStatusTable_access.c

running indent on myCardStatusTable_checkfns_local.c

running indent on myCardStatusTable_columns.h

running indent on myCardStatusTable_checkfns.c

running indent on myCardStatusTable.c

生成的文件中只有myCardStatusTable.c,myCardStatusTable_access.c的内容需要修改。设备中所有切换模块的状态都通过ARM平台的地址/数据总线加片选信号从FPGA中提取,网管代理模块会定时查询切换模块,20ms没有状态数据回应认为该切换模块掉线,上报table中的数据填充notconnected(2)。

交叉编译net-snmp前确保arm-linux-gcc安装成功并已设置好环境变量。将net-snmp解压到工程目录下,进入net-snmp源码目录下(此处是net-snmp-5.4.2,以下使用该目录代表源码目录),配置编译选项:

执行下列命令:

CC=arm-linux-gcc ./configure --build=i386-linux --host=arm-linux --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-emded-perl--without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts

将开发的代理程序静态编译进net-snmp框架中,按照功能需求编辑所需的所有.c和.h文件,然后在/agent/mibgroup/下新建一个文件夹mini2440,把所有要编译的模块的代码拷贝到里面,在上级目录/mibgroup/下建立一个mini2440.h文件,添加所要编译的模块的目录:

config_require(mini2440/myCardStatusTable)

重新configure时,用--with-mib-modules="mini2440",就可以编译所有模块了。配置完成后进行交叉编译:make,然后是使用make install进行安装,install之后在net-snmp/agent目录下会生成一系列的可执行文件。编译得到的snmpd比较大,需要进行strip压缩处理,使用arm-linux-strip命令来实现,静态编译的snmpd大概有1.3M,strip后只有600K。

2.2 移植到目标开发板

将经过交叉编译后的snmpd文件上传到目标板的/usr/sbin目录下(需要更改访问权限为755可执行),同时在/etc/init.c/rCS文件中添加snmp开机自启动服务:

snmpd -f -Le &

在运行net-snmp之前先要进行环境设置,否则无法查询到结果。环境配置文件由snmpconf命令交互生成。运行snmpconf后,提示有三个配置文件:snmpd.conf,snmptraps.conf,snmp.conf。其中snmpd.conf用来配置代理和管理端通信时的参数。拷贝net-snmp-5.4.2.1/EXAMPLE.conf为snmpd.conf,修改后将文件下载到开发板的/usr/local/share/snmp/目录下下(不存在的目录先要创建)。

#cpEXAMPLE.conf /usr/local/share/snmp/snmpd.conf

#vim /usr/local/share/snmp/snpmd.conf

修改snmpd.conf文件中community设置如下

# sec.name source community

//com2sec local localhost public

com2sec local 127.0.0.0/8 public

com2sec mynetwork 0.0.0.0/0 public #设置全网段都可以访问

将组设置改为可读写如:group MyRWGroup v2c mynetwork (原配置为:group MyROGroup v2c mynetwork),方便测试使用。

至此,我们就可以在arm板上运行snmp代理了,当然这种安装还少了很多mib库,在启动程序运行时会打印出来缺少的mib库文件。目标板上库文件存储的地址空间是:

/usr/local/share/snmp/mibs

最小启动只需三个文件 :

SNMPv2-MIB.txt

SNMPv2-SMI.txt

SNMPv2-TM.txt

为了支持交叉编译后的snmpd程序运行还需要加入其它的库文件,如下:

SNMP-COMMUNITY-MIB.txt

SNMP-USER-BASED-SM-MIB.txt

SNMP-VIEW-BASED-ACM-MIB.txt

使用MG-SOFT MIB Browers直接访问SNMP代理的节点数据,如图2所示。

图2 MIB树状节点

如果通过“Table View”可以把设备中所有切换模块的状态显示出来,则说明网管软件已经能够和智能切换器的SNMP代理进行正常通信,设置刷新时间,可以动态获取设备中各模块当前的工作状态。

3 设计结论

本文提出了一种嵌入式SNMP 代理的实现方案,通过基于私有MIB的代理扩展及交叉编译将代理程序移植到目标开发板上,运行snmpd代理,在默认的161端口就可以通过对私有MIB的访问实现对网元的实时监控。

基于SNMP代理开发的智能音频切换器以其稳定的工作状态、快速的通道切换和简单的监控管理已经应用于建军90周年沙场扩声系统、深圳市城市运营中心、全国党政专用电视会议高清系统和海南省政务数据管理运行中心等诸多项目中,获得良好的口碑和经济效益。

参考文献:

[1] 谢希仁. 计算机网络[M]. 北京:电子工业出版社, 2005.

[2] 张春强. 深入理解NET-SNMP[M]. 北京:机械工业出版社, 2015.

[3] S3C2440A 32-Bit CMOS Microcontroller User’s Manual[Z]. Samsung Electronics, Revision 2, 2008.

[4] 赵苍明,穆煜. 嵌入式Linux应用开发教程[M]. 北京:人民邮电出版社,2009.

王辉,刘帅,史东东
《电声技术》 2018年第02期
《电声技术》2018年第02期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号