1. 程式人生 > >Android Wi-Fi原始碼分析之WifiService操作Wi-Fi(一):分析Wifi.c中的wifi_load_driver()函式

Android Wi-Fi原始碼分析之WifiService操作Wi-Fi(一):分析Wifi.c中的wifi_load_driver()函式

Wi-Fi原始碼分析之WifiService操作Wi-Fi(一)

分析Wifi.c中的wifi_load_driver()函式

int wifi_load_driver()
{
    ALOGD("============wifi_load_driver================");
    /* WIFI_DRIVER_MODULE_PATH定義wlan driver的檔案路徑名. 我這裡並沒有定義 */
#ifdef WIFI_DRIVER_MODULE_PATH
     ALOGD("============wifi_load_driver:WIFI_DRIVER_MODULE_PATH================"
); char driver_status[PROPERTY_VALUE_MAX]; int count = 100; /* wait at most 20 seconds for completion */ if (is_wifi_driver_loaded()) { return 0; } /* DRIVER_MODULE_PATH裡儲存WIFI_DRIVER_MODULE_PATH巨集定義的檔案路徑名; * 如果WIFI_DRIVER_MODULE_PATH定義了就在此處通過 insmod向核心新增wlan driver*/
if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) return -1; /* FIRMWARE_LOADER 變數指向 WIFI_FIRMWARE_LOADER巨集定義的 wlan 韌體載入程式檔案路徑名 * DRIVER_PROP_NAME 的值為"wlan.driver.status"; * 如果沒有指定 wlan 韌體載入程式,則直接設定"wlan.driver.status"的屬性為"ok" * 否則 通過"ctl.start"方式來啟動 wlan 韌體載入程式 * */
if (strcmp(FIRMWARE_LOADER,"") == 0) { /* usleep(WIFI_DRIVER_LOADER_DELAY); */ property_set(DRIVER_PROP_NAME, "ok"); } else { property_set("ctl.start", FIRMWARE_LOADER); } sched_yield(); while (count-- > 0) { if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) { if (strcmp(driver_status, "ok") == 0) return 0; else if (strcmp(DRIVER_PROP_NAME, "failed") == 0) { wifi_unload_driver(); return -1; } } usleep(200000); } property_set(DRIVER_PROP_NAME, "timeout"); wifi_unload_driver(); return -1; #else /*如果沒有定義巨集WIFI_DRIVER_MODULE_PATH,則直接設定"wlan.driver.status"的屬性為"ok"*/ property_set(DRIVER_PROP_NAME, "ok"); return 0; #endif }