android 平台USB wifi驅動移植及使用

來源:互聯網
上載者:User
一.   Android平台Wifi的基本代碼路徑

1.       Wpa_supplicant源碼部分

external/wpa_supplicant_6/

產生庫libwpa_client.so和守護進程wpa_supplicant

2.       Wifi的HAL層代碼

位於hardware/libhardware_legary/wifi/

3.       Wifi的JNI部分

位於frameworks/base/core/jni/android_net_wifi_Wifi.cpp

4.       JAVA部分

位於frameworks/base/services/java/com/android/server/
        frameworks/base/wifi/java/android/net/wifi/

5.       wifi設定部分

位於packages/apps/Settings/src/com/android/settings/wifi/


二.  linux核心配置

 

在原有android核心支援情況下,增加wifi核心配置,具體配置如下:

1.       Networkingsupport  --->Wireless下增加802.11 協議棧的支援


2.       USB 支援WIFI的配置

USB 支援WIFI 的配置選項位於Device Drivers>USB support 配置菜單下USB Wireless

Device Management support。


3.       使用者空間的mdev 和firmware 支援配置

進入DeviceDriver > Generic Driver Options 配置菜單,按照下圖所示配置使用者空間

的mdev 和firmware支援。


4.       WIFI 裝置支援配置

DeviceDrivers  ---> Network devicesupport  ---> Wireless LAN  ---> Ralink driver support--->Ralinkrt2800 (USB) support (EXPERIMENTAL) --->rt2800usb - Include support forrt30xx (USB) devices

以及Wireless LAN 目錄裡IEEE 802.11 for Host AP (Prism2/2.5/3 andWEP/TKIP/CCMP)都選擇上,目的是開啟CONFIG_WIRELESS_EXT=y CONFIG_WEXT_PRIV=y

  三. 驅動配置與編譯

 

1.       修改驅動SDK包中的設定檔

1.1   修改env.mk,將RT28xx_DIR 設為目前的目錄,RT28xx_DIR = $(shell pwd)。

1.2   修改makefile中對應的kernel與交叉編譯器路徑

1.3   修改os/linux目錄下config.mk中gcc 與 ld變數

1.4   開啟os/linux目錄下config.mk中HAS_WPA_SUPPLICANT與HAS_NATIVE_WPA_SUPPLICANT_SUPPORT宏

2.       修改驅動SDK包中的驅動源碼

2.1   將rt_linux.h中的RTUSB_URB_ALLOC_BUFFER與RTUSB_URB_FREE_BUFFER宏修改,定義如下

#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev,BufSize, pDma_addr)     usb_alloc_coherent(pUsb_Dev,BufSize, GFP_ATOMIC, pDma_addr)

#defineRTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)       usb_free_coherent(pUsb_Dev, BufSize,pTransferBuf, Dma_addr)

2.2   修改rt_main_dev.c,直接將MainVirtualIF_close函數放空,return  0,解決不能反覆關閉wifi問題。

2.3   修改rt_linux.c裡RtmpOSNetDevAttach函數裡增加devname賦值。strcpy( pNetDev->name, "mlan0");註:(此處所用的名字要與上層使用的節點名保持一致,在此說明一下上層主要有這幾處用到節點名:

1,\frameworks\base\wifi\java\android\net\wifiWifiStateTracker.java

2,init.rc啟動wpa_supplicant守護進程裡面與啟動dhcpcd服務

3,dhcpcd服務組態檔,dhcpcd.conf裡面

4,init.rc設定setprop wifi.interface "mlan0")

3.       編譯方法

Source env.mk;make;即可,驅動是在的路徑為os/linux下的rt3070sta.ko。 此處所用的驅動名字應與HAL層wifi.c所指定驅動名保持一致


四. Wap_supplicant相關配置

3.1   Wpa_supplicant.conf設定檔的修改

ctrl_interface=DIR=/data/system/wpa_supplicantGROUP=wifi #這個路徑在wifi.c中用到

3.2   整個環境必須要讓wext類型相關代碼進行編譯。也就是要開啟wext相關的宏CONFIG_DRIVER_WEXT。  即在device/hisi/Hi3716C/BoardConfig.mk中添加:
      BOARD_HAVE_WIFI := true
      BOARD_WPA_SUPPLICANT_DRIVER := WEXT

該配置的作用是使external/wpa_supplicant/Android.mk設定WPA_BUILD_SUPPLICANT為true。

3.3   在init.rc裡面增加啟動wpa_supplicant守護進程及dhcpcd進程

3.4   在init.rc裡面增加wifi相關檔案的許可權設定,設定如下:

chmod 0771 /system/etc/wifi

      chmod 0660/system/etc/wifi/wpa_supplicant.conf

      chown wifiwifi /system/etc/wifi/wpa_supplicant.conf #wifi的原始設定檔

     

      #wpa_supplicantsocket

      mkdir/data/system/wpa_supplicant 0770 wifi wifi

      chmod 0771/data/system/wpa_supplicant  #放置wifiinterface的地方

      mkdir/data/misc/wifi 0770 wifi wifi

   

      chmod 0771/data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf  #wifi的設定檔,將由wpa_supplicant根據實際配置寫入該檔案

      chown wifiwifi /data/misc/wifi

      chown wifiwifi /data/misc/wifi/wpa_supplicant.conf

      mkdir/data/misc/wifi/sockets 0770 wifi wifi  #與上層通過socket通訊的路徑

     

      cp/system/etc/wifi/wpa_supplicant.conf /data/misc/wifi/

     

      mkdir/data/misc/dhcp 0777 dhcp dhcp

      chown dhcpdhcp /data/misc/dhcp

     

      # Preparefor wifi

    setpropwifi.interface "mlan0"

          setprop wlan.driver.status "ok"

3.5   啟動wpa_supplicant守護進程與dhcpcd服務

在init.rc裡面添加wpa_supplicant啟動:

service wpa_supplicant/system/bin/logwrapper /system/bin/wpa_supplicant \

   -Dwext -imlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd

             user root

             group system wifi inet

             socket wpa_mlan0 dgram 660 wifi wifi

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.