2362|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

wifi驱动无法被安卓系统正常调用 [复制链接]

    1.问题现象:


打开wifi的图标,wifi加载后又自动卸载。


2.问题分析


      驱动能正常加载,但是又自动卸载,说明驱动没有完全满足安卓的要求,查看wifi加载的源码“hardware/libhardware_legacy/wifi/wifi.”可知wifi要正确加载必须满足“wlan0和p2p”两个条件


[cpp] view plain copy
int wifi_load_driver()  
{  
    char driver_status[PROPERTY_VALUE_MAX];  
    int  count = 0;  
     
    char tmp_buf[512] = {0};  
    char *p_strstr_wlan  = NULL;  
    char *p_strstr_p2p   = NULL;  
    int  ret        = 0;  
    FILE *fp        = NULL;  
  
    ALOGD("Start to insmod %s.ko\n", WIFI_DRIVER_MODULE_NAME);  
  
    if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {  
        ALOGE("insmod %s ko failed!", WIFI_DRIVER_MODULE_NAME);  
        rmmod(DRIVER_MODULE_NAME); //it may be load driver already,try remove it.  
        return -1;  
    }  
  
    do{  
        fp=fopen("/proc/net/wireless", "r");  
        if (!fp) {  
            ALOGE("failed to fopen file: /proc/net/wireless\n");  
            property_set(DRIVER_PROP_NAME, "failed");  
            rmmod(DRIVER_MODULE_NAME); //try remove it.  
            return -1;  
        }  
        ret = fread(tmp_buf, sizeof(tmp_buf), 1, fp);  
        if (ret==0){  
            ALOGD("faied to read proc/net/wireless");  
        }  
        fclose(fp);  
  
        ALOGD("loading wifi driver...");  
        p_strstr_wlan = strstr(tmp_buf, "wlan0");  
        p_strstr_p2p  = strstr(tmp_buf, "p2p0");  
        if (p_strstr_wlan != NULL && p_strstr_p2p != NULL) {  
            property_set(DRIVER_PROP_NAME, "ok");  
            break;  
        }  
        usleep(200000);// 200ms  
  
   } while (count++ <= TIME_COUNT);  
  
   if(count > TIME_COUNT) {  
        ALOGE("timeout, register netdevice wlan0 failed.");  
        property_set(DRIVER_PROP_NAME, "timeout");  
        rmmod(DRIVER_MODULE_NAME);  
        return -1;  
   }  
   return 0;  
}  




此帖出自无线连接论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表