移植snmpAndroid获取CMmac地址

1.linux网络命令dhcp使用

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

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

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

2.Snmp源码移植和测试case

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

LOCAL_PATH:=$(callmy-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动态库,然后pushsystem/lib下面

2snmp依赖的资源文件夹mibs

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

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

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

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

获取cablemodlemac地址的方法

intget_mac(char*mac)

{

printf("get_macin------------------------------------\n");

charsnmpdata[32];

char*ptmac;


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

{

printf("(err)snmp_session_initfailed\n");

return-1;

}

ptmac=strstr(snmpdata,"");

strcpy(mac,ptmac+1);

return0;

}

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.110.68两个参数基本是固定的

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

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

LOCAL_PATH:=$(callmy-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.开机启动脚本的学习

1Init.godbox.sh

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

1加载hisi驱动到内核中

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

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

2mk-all.sh

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

指定用户编译线程数

1生成mkbootimg以及mkyaffs2image.301

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

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

4编译froyo

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

6将rootdir编入kernel

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

8STB镜像文件制作

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添加后台执行可执行文件脚本命令

Chmod777system/bin/cmdiag

/system/bin/cmdiag$

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

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

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

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

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

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

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

LOCAL_SHARED_LIBRARIES:=\

libnetsnmp

3字符串分割,格式化CMmac地址的显示方式(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++;

}

returnstr;

}

char*get_mac()

{

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

charmy_str[32];

chardelims[]=":";

char*result=NULL;

result=strtok(str,delims);

printf("resultzhoulcis\"%s\"\n",result);

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

while(result!=NULL){

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


if(strlen(result)<=1){

printf("aaaaaaaaa\n");

strcat(my_str,"0");

strcat(my_str,result);


}

else{

strcat(my_str,result);

}

printf("resultzhoulcis\"%s\"\n",result);

result=strtok(NULL,delims);

}

my_strupr(my_str);

printf("my_strzhoulcis\"%s\"\n",my_str);

returnNULL;

}

main()

{

get_mac();

}

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

字符串改变之后:000EB7231F75

更多相关文章

  1. Android(安卓)交叉编译 i2c-tools
  2. 关于获取手机通讯录联系人Contacts被deprecated的修改
  3. Ubuntu下Eclipse3.6.1安装ADT插件可能遇到的问题
  4. Mac OS X下编译Android源码
  5. android学习日记(一) 获取某一会话的所有短信
  6. Android(安卓)TV 键值修改流程
  7. Android小程序-Walker注册页面(六)
  8. 使用Android(安卓)NDK内置编译器为Android编译Linux应用程序
  9. 查看Android的源代码

随机推荐

  1. Android(安卓)ListView设置Item选中状态
  2. 《宅男的android开发指南》(翻译)--9
  3. Android点击左右按钮实现左右滑动页面切
  4. Android(安卓)activity的生命周期
  5. Android包冲突等问题
  6. android获得屏幕高度和宽度
  7. android学习资料链接汇总
  8. Android(安卓)SparseArray源码阅读
  9. Android、JUnit深入浅出(七)——总…
  10. 生成Google Map KeyGen