日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

wifi 驱动 进阶11

發布時間:2023/12/13 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 wifi 驱动 进阶11 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、編譯wifi driver ,生成dhd.ko,驅動一般由芯片廠商提供,如果能拿到源代碼首先要保證能夠 編譯通過;

2、將wifi driver的 firmware config 文檔 放入根文件系統指定位置

這些源文件的目錄,按道理 可以放在andorid的任何處,但最好不要亂放以免打亂上層文件存放結構,目前我存放的路徑為hardware/平臺名稱/wlan/broadcom/

/wlan/Broadcom/Android.mk內容

ifeq ($(BOARD_WLAN_DEVICE),bcm4329)

include $(callall-subdir-makefiles)

endif

/wlan/Broadcom/firmware/Android.mk 文件 的作用是 將 firmware拷貝到/system/etc/firmware目錄下 或 其他目錄。

最終firmware路徑為:/system/etc/firmware/module_name/sta.xbv

LOCAL_PATH := $(call my-dir)

local_target_dir := $(TARGET_OUT_ETC)/firmware

########################

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := sta.xbv //配置文件的 當前位置

LOCAL_MODULE_TAGS := user

LOCAL_MODULE_CLASS := ETC

LOCAL_MODULE_PATH := $(local_target_dir)/module_name //編譯之后 firmware 的最終位置(也就是拷貝的位置)

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

########################

源文件目錄結構為:

/hardware/平臺名稱/wlan/芯片名/Android.mk

/hardware/平臺名稱/wlan/芯片名/firmware/Android.mk

/hardware/平臺名稱/wlan/芯片名/firmware/*.bin

/hardware/平臺名稱/wlan/芯片名/config/Android.mk

/hardware/平臺名稱/wlan/芯片名/config/android_dhcpcd.conf

/hardware/平臺名稱/wlan/芯片名/config/wpa_supplicant.conf

/hardware/平臺名稱/wlan/芯片名/module/Android.mk

/hardware/平臺名稱/wlan/芯片名/module/*.ko

有的公司需要一些tools使用:

/hardware/平臺名稱/wlan/芯片名/tools/ Android.mk

/hardware/平臺名稱/wlan/芯片名/tools/*

目的目錄路徑:

其它config文件及driver模塊用同樣的方式存放

firmware:/system/etc/firmware

module:/system/lib/modules

wap_supplicant.conf:/system/etc/wifi

dhcpcd.conf:/system/etc/dhcpcd

wpa_supplicant.conf內容:

update_config=1

ctrl_interface=DIR=/data/system/wpa_supplicantGROUP=1010//網上有寫成GROUP=wifi這應該是指的同一個東西

eapol_version=1

ap_scan=1

fast_reauth=1

dhcpcd.conf內容:

interface eth0//該處寫成eth0應該是wifi interface的名字,應該根據wifi driver的名字來定,對于wifi來講用wlan0之類的名字更合理。

#dhcpcd-run-hooks uses these options.

optionsubnet_mask, routers, domain_name_servers

3、經過如上兩步就可簡單手動的試試wifi及softap能否正常工作了

insmod /system/wifi/dhd.ko,

不行的話先確認firmware路徑是否正確,再確認sdio卡是否支持,或mmc host driver 是否完成

insmod/system/lib/dhd.ko"firmware_path=/system/etc/sdio-g-cdc-full11n-reclaim-roml-wme-idsup.binnvram_path=/system/etc/nvram.txt"http://這是bcm的insmod 如firmware路徑不正確的情況下可直接傳參數,如能正常insmod就有機會了

驗證wifi功能:

# insmod/system/wifi/*.ko

#/system/bin/wpa_supplicant -Dwext –ieth0(wlan0)-c/data/misc/wifi/wpa_supplicant.conf &

#wpa_cli-iwlan0 scan

#wpa_cli -iwlan0 scan_result

#dhcpcd wlan0 &//這個命令我還沒用過

驗證softap功能:

如能insmod并能下cmd就應該沒問題了,這時可找一個wifi手機看能否找到該hotspot“AndoridAP”

#insmod/system/wifi/module/*.ko(有可能后面要加參數如firmwarepath及config等)

#iwpriv eth0(wlan0) STOP

#iwpriv eth0(wlan0) WL_FW_RELOADFW_PATH=/system/wifi/fw_ap.bin

#iwpriv eth0(wlan0) START

#iwpriveth0(wlan0) AP_SET_CFG #ASCII_CMD=AP_CFG,SSID="AndoridAP",SEC="open",KEY=0,CHANNEL=1,PREAMBLE=0,MAX_SCB=8,END

#iwprivwl0.1 AP_BSS_START

用iwconfig或netcfg看有沒網絡設備名如eth0 wlan0 wl0.1

BroadCom的wifi網絡設備名為wlan0或eth0根據drvier定,在下完AP_SET_CFG后會創建hotspot 網絡設備名wl0.1

4、增加或修改宏:device/xxx/BoardConfig.mk

a:確定所使用的wifi芯片

增加(如:同時支持多個wifi)或修改宏BOARD_WLAN_DEVIC:=bcm4329

注意:當然一般用不需要此定義,此定義也主要是用于區分目前所使用的wifi芯片,主要在 hardware/平臺名稱/wlan/芯片名/Android.mk 文件里使用區分目前所使用的wifi芯片,具體 使用方法 如:c、d點

b:決定所使用的wpa_supplicant的版本及driver的接口

WPA_SUPPLICANT_VERSION := VER_0_6_X//當前所使用wpa_supplicant的版本,保證wpa_supplicnat能夠正常編譯到系統中(“external\wpa_supplicant\Android.mk”開始部分的編譯條件)

BOARD_WPA_SUPPLICANT_DRIVER := WEXT //決定wap_supplicant的底層接口類型,也就是驅動類型

注:wpa_supplicant好像只支持WEXT的標準接口不支持WEXT的私有接口,因softap根本沒有使用wpa_supplicant,而是使用的是softapcontroller.cpp文件,該文件實現的功能與iwpriv一致(具體原理見后面)。


c:如果此wifi芯片有softap功能,如bcm4329,則需增加firmware的路徑宏,該路徑與 第2點 中firmware存放位置一致。因在打開softap時,該芯片需要重新download softapfirmware.

ifeq ($(BOARD_WLAN_DEVICE),bcm4329)

WIFI_DRIVER_FW_PATH_STA := /system/wifi/fw.bin

WIFI_DRIVER_FW_PATH_AP :=/system/wifi/fw_ap.bin

WIFI_DRIVER_FW_PATH_P2P :=/system/wifi/fw_p2p.bin

endif

d:另增加如下幾個宏,以便UI上turn on調用wifi.c文件將這些傳進去

ifeq ($(BOARD_WLAN_DEVICE),bcm4329)

WIFI_DRIVER_MODULE_PATH:=/system/lib/modules/dhd.ko //驅動文件的全路徑

WIFI_DRIVER_MODULE_NAME:=dhd //驅動名字,用于關閉WIFI時調用,一般和ko文件的名字相同

WIFI_DRIVER_MODULE_ARG:= "firmware_path=/etc/wifi/fw_bcm40181a2.bin nvram_path=/etc/wifi/nvram.txt" //該宏是用于insmod時傳參數

WIFI_FIRMWARE_LOADER:=/system/bin/fwload //為downloadfirmware所使用的工具,有可能也包括firmware路徑。

BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_wext //wpa_supplicant 需要依賴的庫,位置在 hardware/平臺名稱/wifi/芯片名稱/wpa_supplicant_8_lib

endif

另 如 hardware/libhardware_legacy/wifi/Android.mk 中 如沒有如下內容則加上。

=============================

ifdef WIFI_DRIVER_MODULE_PATH
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH=\"$(WIFI_DRIVER_MODULE_PATH)\"
endif

ifdef WIFI_DRIVER_MODULE_ARG
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_ARG=\"$(WIFI_DRIVER_MODULE_ARG)\"
endif

ifdef WIFI_DRIVER_MODULE_NAME
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME=\"$(WIFI_DRIVER_MODULE_NAME)\"
endif

ifdef WIFI_FIRMWARE_LOADER
LOCAL_CFLAGS += -DWIFI_FIRMWARE_LOADER=\"$(WIFI_FIRMWARE_LOADER)\"
endif

ifdef WIFI_DRIVER_FW_PATH_STA
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_STA=\"$(WIFI_DRIVER_FW_PATH_STA)\"
endif

ifdef WIFI_DRIVER_FW_PATH_AP
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_AP=\"$(WIFI_DRIVER_FW_PATH_AP)\"
endif

ifdef WIFI_DRIVER_FW_PATH_P2P
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_P2P=\"$(WIFI_DRIVER_FW_PATH_P2P)\"
endif

ifdef WIFI_DRIVER_FW_PATH_PARAM
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_PARAM=\"$(WIFI_DRIVER_FW_PATH_PARAM)\"
endif

LOCAL_SRC_FILES += wifi/wifi.c

LOCAL_SHARED_LIBRARIES += libnetutils

======================================

5. 修改init.rc文件

a:增加wpa_supplicant服務

# Give system access to wpa_supplicant.conf for backup and restore

mkdir /data/misc/wifi 0770 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf

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


b:配置dhcp服務

mkdir /data/misc/dhcp 0770 dhcp dhcp

chown dhcp dhcp /data/misc/dhcp

service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL
class main
group dhcp system
disabled
oneshot

6、修改硬件抽象層

因在第4步時已增加了宏定義,則此處/hardware/libhardware_legacy/wifi/wifi.c不需修改,如果不能正常insmod則可能需要在此處增加log來確定問題的原因。

7、增加usb tether softap interface及pppdrpstream

config_tether_usb_regexs:用于電腦或其它設備通過USB連接手機

config_tether_wifi_regexs:用于電腦或其它設備wifi 連接該接口的softap

config_tether_upstream_regexs:設置通過哪種方式上網,該處用pppd連接gprs上網

8、修改kernnel config文件使能softap能夠正常工作

主要是增加netfilter 的config實現softap的upstream通道.

總結

以上是生活随笔為你收集整理的wifi 驱动 进阶11的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。