smnp-android移植与简洁使用

移植snmp到Android获取CM mac地址

1.linux 网络命令 dhcp使用

Netcfg:通过串口获取IP地址,android自带的命令,system/core

Udhcpc:动态获取ip,系统内核自带。

Netcfg eth0 dhcp:动态分配ip,给eth0传递参数。

2.Snmp源码移植和测试case

1)把Snmp源码编译成动态库

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES := external/net-snmp/inc

LOCAL_SRC_FILES:= src/snmp_client.c \

src/mib.c \

src/parse.c \

src/snmp_api.c \

src/snmp.c \

src/large_fd_set.c \

src/cert_util.c \

src/snmp_auth.c \

src/asn1.c \

src/md5.c \

src/snmp_parse_args.c \

src/system.c \

src/vacm.c \

src/int64.c \

src/read_config.c \

src/pkcs.c \

src/snmp_debug.c \

src/tools.c \

src/snmp_logging.c \

src/text_utils.c \

src/snmpv3.c \

src/lcd_time.c \

src/keytools.c \

src/file_utils.c \

src/dir_utils.c \

src/scapi.c \

src/callback.c \

src/default_store.c \

src/snmp_alarm.c \

src/data_list.c \

src/oid_stash.c \

src/fd_event_manager.c \

src/mt_support.c \

src/snmp_enum.c \

src/snmp-tc.c \

src/snmp_service.c \

src/snprintf.c \

src/snmp_transport.c \

src/transports/snmpUDPBaseDomain.c \

src/transports/snmpUDPIPv4BaseDomain.c \

src/transports/snmpTCPBaseDomain.c \

src/transports/snmpSocketBaseDomain.c \

src/transports/snmpIPv4BaseDomain.c \

src/transports/snmpUDPDomain.c \

src/transports/snmpTCPDomain.c \

src/transports/snmpAliasDomain.c \

src/transports/snmpUnixDomain.c \

src/transports/snmpCallbackDomain.c \

src/snmp_secmod.c \

src/snmpusm.c \

src/snmp_version.c \

src/check_varbind.c \

src/container.c \

src/container_binary_array.c \

src/container_null.c \

src/container_list_ssll.c \

src/container_iterator.c \

src/cmu_compat.c \

src/ucd_compat.c \

src/snmp_openssl.c \

src/openssl/openssl_md5.c \

src/openssl/openssl_sha1.c \

src/openssl/openssl_set_key.c \

src/openssl/openssl_des_enc.c \

src/openssl/openssl_cbc_enc.c \

src/openssl/openssl_aes_cfb.c \

src/openssl/openssl_aes_core.c \

src/openssl/openssl_cfb128.c \

src/strlcpy.c \

src/strlcat.c


LOCAL_SHARED_LIBRARIES := \

libcutils

LOCAL_MODULE_TAGS := eng

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE:= libnetsnmp

include $(BUILD_SHARED_LIBRARY)

生成libnetsnmp.so动态库,然后push到system/lib下面

2)snmp依赖的资源文件夹mibs

把mibs cp到系统system/etc下面(路径可以通过改源码配置)

#define NETSNMP_DEFAULT_MIBDIRS "$HOME/ .snmp/mibs:usr/local/net-snmp/share/snmp/mibs;./mibs"

只需在后面添加一个路径即可即添加 system/etc/mibs;

3)测试case编译成可执行文件

获取cable modle mac地址的方法

int get_mac(char *mac)

{

printf("get_mac in------------------------------------\n");

    char snmpdata[32];

    char *ptmac;


    if (0 != snmp_session_init(CM_MAC, ip, community_string, snmpdata))

    {

        printf("(err) snmp_session_init failed\n");

        return -1;

    }

    ptmac = strstr(snmpdata, " ");

    strcpy(mac, ptmac+1);

    return 0;

}

Main函数

 strcpy(ip, "192.168.100.1");

 strcpy(cmts_ip, "192.168.10.68");

 strcpy(community_string, "public");

 strcpy(cmts_community_string, "private");

 get_mac(mac);

100.1 和 10.68两个参数基本是固定的

获取mac详细代码请看http://blog.csdn.net/new_abc/article/details/8610203

Android.mk文件 编译成可执行文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

#LOCAL_MODULE_PATH := $(TARGET_OUT)/bin

LOCAL_MODULE := cmdiag

LOCAL_SRC_FILES := cmdiag.c

LOCAL_C_INCLUDES += \

   external/net-snmp_useful_libsnmp/inc \

LOCAL_SHARED_LIBRARIES := \

libnetsnmp \

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE_TAGS := eng

include $(BUILD_EXECUTABLE)

3.开机启动脚本的学习

1)Init.godbox.sh

启动盒子执行脚本,主要功能

1加载hisi驱动到内核中

2后台执行一些可执行文件,启动服务

3执行logcat命令,抓取日志存放到android.log中

2)mk-all.sh

主要是用在在线编译时,制作镜像和制作升级包时执行。

指定用户编译线程数

1生成mkbootimg 以及 mkyaffs2image.301

2编译kernel。如果.config不存在,则认为是第一次编译

3临时添加的device部分库 与 bin文件

4编译froyo

5海思的一些文件与一些配置文件

6将rootdir编入kernel

7生成并拷贝目标文件到out目录

8 STB 镜像文件制作  

9编译recovery,生成recovery.img以及升级包


4.显示mac地址的两种方式 
1)通过设置系统属性-共享内存的学习

设置属性:property_set("DEVICEINFO_CM_MAC", mac);

获取属性:property_get("DEVICEINFO_CM_MAC",my_mac,"");第三个参数为默认值

重现步骤:1生成可执行文件

          2在启动盒子执行的脚本里面init.godbox.sh添加后台执行可执行文件脚本命令

  Chmod 777 system/bin/cmdiag

          /system/bin/cmdiag $

     3通过串口把snmp用到的资源文件mibs cp到相应的路径下面(参考2.2)

  4在对应要显示到页面的代码里添加property_get函数,实现CM mac地址的显示。

2)通过集成到jni的实现方式,头文件引用的学习,c字符串分割

     不需要通过设置获取属性来读取共享空间的数据,直接在每次调用显示CM mac地址的时候,去调用snmp获取CM mac。

重现步骤:1把测试case获取CM mac集成到jni里面。

          2在Android.mk里面添加导入的头文件以及连接的动态库

  $(ANDROID_INCLUDE_TOP)external/net-snmp/inc \

  LOCAL_SHARED_LIBRARIES := \

  libnetsnmp

  3字符串分割,格式化CM mac地址的显示方式(C字符串转变成大写,去掉特殊符号)

 #include <stdio.h>

#include <string.h>

char * my_strupr(char *str)

{

   char *p = str;

   while (*p != '\0')

   {

      if(*p >= 'a' && *p <= 'z')

      *p -= 0x20;

      p++;

    }

   return str;

}

char* get_mac()

{

 char str[] = "0:e:b7:23:1f:75";

 char my_str[32];

   char delims[] = ":";

   char *result = NULL;

   result = strtok( str, delims );

   printf( "result zhoulc is \"%s\"\n", result );

   memset(my_str, 0, sizeof(my_str));

   while( result != NULL ) {

      // printf( "result is \"%s\"\n", result );


if(strlen(result)<=1){

printf("aaaaaaaaa\n");

strcat(my_str,"0");

strcat(my_str,result);


}

else{

strcat(my_str,result);

}

printf( "result zhoulc is \"%s\"\n", result );

 result = strtok( NULL, delims );

   }         

 my_strupr(my_str);

    printf( "my_str zhoulc is \"%s\"\n", my_str );

return NULL;

}

main()

{

get_mac();

}

字符串改变之前:0:e:b7:23:1f:75

字符串改变之后:000EB7231F75

转载于:https://my.oschina.net/zhoulc/blog/111430

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值