cm11修改wifi_mac地址

说明

应该是2016年之前的记录,之前没有写文档记录的习惯,都是随手记录的txt文件,所以没有图片、格式等。甚至现在看来有些地方逻辑不通(可能还因为年少轻狂,有些偏颇的话语),但是这些与现在的我不重要了,所以也不打算再复现、推理,重新编辑等,仅仅是在旧硬盘中发现,删除之前觉得可能还有点价值,记录下来吧。

参考find5的部分源码https://github.com/CyanogenMod/android_device_oppo_apq8064-common/tree/cm-11.0/wcnss_oppo

大概原理就是从自己指定的文件中获取mac地址,E:\cm11.0\hardware\qcom\wlan\wcnss-service目录下是wcnss-service这个可执行文件
在init.aries.rc中
service wcnss-service /system/bin/wcnss_service
class main
user system
group system wifi radio
oneshot

wcnss_oppo_client.c其实就是wcnss_qmi_client.c的覆盖,生成的动态库libwcnss_qmi中wcnss_qmi_get_wlan_address函数就可以
修改mac地址。
libqminvapi这个库文件是小米官方库,有个qmi_nv_read_wlan_mac(unsigned char** mac);函数获取真实的mac地址。

Android.mk和wcnss_oppo_client.c内容如下。

1:Android.mk
ifeq ( ( B O A R D V E N D O R ) , o p p o ) i f e q ( (BOARD_VENDOR),oppo) ifeq ( (BOARDVENDOR),oppo)ifeq((TARGET_BOARD_PLATFORM),msm8960)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := wcnss_oppo_client.c

LOCAL_C_INCLUDES += hardware/qcom/wlan/wcnss_service
LOCAL_CFLAGS += -Wall

LOCAL_SHARED_LIBRARIES := libc libcutils libutils liblog

LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libwcnss_qmi

include $(BUILD_SHARED_LIBRARY)

endif
endif


2:wcnss_oppo_client.c

//#define LOG_NDEBUG 0

#define LOG_TAG “wcnss_oppo”

#define SUCCESS 0
#define FAILED -1

#define MAC_ADDR_PATH “/data/opponvitems/4678”
#define MAC_ADDR_SIZE 6
#define MAX_WAIT_COUNT 5
#define WAIT_TIME 500000

#include <cutils/log.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>

int wcnss_init_qmi(void)
{
/* empty */
return SUCCESS;
}

int wcnss_qmi_get_wlan_address(unsigned char *pBdAddr)
{
int fd, ret, i;
char buf[MAC_ADDR_SIZE];
struct stat mac_stat;

do {
    usleep(WAIT_TIME);
} while (stat(MAC_ADDR_PATH, &mac_stat) && i < MAX_WAIT_COUNT);

if (i == MAX_WAIT_COUNT) {
    ALOGE("Failed to obtain MAC address from NV\n");
    return FAILED;
}

fd = open(MAC_ADDR_PATH, O_RDONLY);
if (fd < 0) {
    ALOGE("Failure opening MAC path: %d\n", errno);
    return FAILED;
}

ret = read(fd, buf, MAC_ADDR_SIZE);
if (ret < 0) {
    ALOGE("Failure to read MAC data: %d\n", errno);
    close(fd);
    return FAILED;
}

/* swap bytes */
for (i = 0; i < MAC_ADDR_SIZE; i++) {
    pBdAddr[i] = buf[MAC_ADDR_SIZE - 1 - i];
}

ALOGI("Found MAC address: %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
        pBdAddr[0],
        pBdAddr[1],
        pBdAddr[2],
        pBdAddr[3],
        pBdAddr[4],
        pBdAddr[5]);

close(fd);

return SUCCESS;

}

void wcnss_qmi_deinit(void)
{
/* empty */
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值