Netcfg:通过串口获取IP地址,android自带的命令,system/core
Udhcpc:动态获取ip,系统内核自带。
Netcfg eth0 dhcp:动态分配ip,给eth0传递参数。
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下面
把mibs cp到系统system/etc下面(路径可以通过改源码配置)
#define NETSNMP_DEFAULT_MIBDIRS "$HOME/ .snmp/mibs:usr/local/net-snmp/share/snmp/mibs;./mibs"
只需在后面添加一个路径即可即添加 system/etc/mibs;
获取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)
启动盒子执行脚本,主要功能
1加载hisi驱动到内核中
2后台执行一些可执行文件,启动服务
3执行logcat命令,抓取日志存放到android.log中
主要是用在在线编译时,制作镜像和制作升级包时执行。
指定用户编译线程数
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地址的显示。
不需要通过设置获取属性来读取共享空间的数据,直接在每次调用显示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