开发环境
开发主机:SUSE Linux9.3(内核2.6.11.4-20a-default)
编译器:mipsel-linux-uclibc-gcc 3.4.3
解压ucd-snmp-4.2.tar.gz源码包
#tar xzvf ucd-snmp-4.2.tar.gz
#cd ucd-snmp-4.2/
# ./configure --with-cc=mipsel-linux-uclibc-gcc --with-ar=mipsel-linux-uclibc-ar --with-cflags="-Os -Dstatvfs=statvfs64 -Wno-error" --with-ldflags="-Wl,--no-undefined -Wl,--warn-once -Wl,--warn-common -Wl,--warn-constructors -Wl,--warn-multiple-gp" --includedir=/uclibc/include --libdir=/uclibc/lib/ --target=mips-elf-linux --host=mips-elf-linux --with-endianness=big --with-sys-contact="Unknown" --with-sys-location="Unknown" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp" --disable-debugging --disable-ipv6 --disable-privacy --disable-libtool-lock --without-opaque-special-types --with-mib-modules="yourObject" --disable-FEATURE --without-PACKAGE --without-root-access --with-out-mib-modules="snmpv3" --with-out-mib-modules="notification" --with-out-mib-modules="ucd_snmp"
执行./configure生成Makefile文件。如果需要自定义更多功能,可以修改./configure选项。
注:确保ucd-snmp-4.2/agent/mibgroup/下有yourObject.c和yourObject.h文件。
#vi ./mib_module_config.h
编辑mib_module_config.h,保留下面这几个函数,其余的都注释掉。
#define USING_MIBII_MODULE 1
#define USING_YOUROBJECT_MODULE 1
#define USING_MIBII_SYSTEM_MIB_MODULE 1
#define USING_MIBII_SNMP_MIB_MODULE 1
#define USING_MIBII_TCP_MODULE 1
#define USING_MIBII_ICMP_MODULE 1
#define USING_MIBII_IP_MODULE 1
#define USING_MIBII_UDP_MODULE 1
#define USING_MIBII_VACM_VARS_MODULE 1
#define USING_UTIL_FUNCS_MODULE 1#vi agent/mibgroup/mib_module_inits.h
编辑mib_module_inits.h,保留下面这几个函数,其余的都注释掉。
if (should_init("yourObject")) init_yealinkObject();
if (should_init("snmp_mib")) init_snmp_mib();
if (should_init("system_mib")) init_system_mib();
if (should_init("snmp_mib")) init_snmp_mib();
if (should_init("tcp")) init_tcp();
if (should_init("icmp")) init_icmp(); if (should_init("ip")) init_ip();
if (should_init("udp")) init_udp();
if (should_init("vacm_vars")) init_vacm_vars();#vi agent/Makefile
编辑Makefile文件,分别在LMIBOBJS 和MIBOBJS这两行去除不需要的模块,可参考mib_module_inits.h里面注册的模块。
#make
生成的snmpd文件在/ ucd-snmp-4.2/agent/下
# mipsel-linux-uclibc-strip snmpd
strip去掉一些不必要的信息,减小文件大小
MIB文件转为.c/.h文件
进入ucd-snmp-4.2/local/目录下,复制YOUR-MIB.mib到这个目录。
该目录下有个mib2c脚本文件。
# env MIBS="+YOUR-MIB" ./mib2c yourObject
即可生成.c和.h文件。如果遇到mib2c有问题,vi mib2c,查看第一行的perl路径是否正确。
复制生成的yourObject.c和yourObject.h文件到ucd-snmp-4.2/agent/mibgroup/目录下。在yourObject.c文件中添加init_yourObject和var_yourObject函数所需的内容。