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"//这是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通道.

wifinbsp;驱动nbsp;进阶11相关推荐

  1. 最全最强的DELL Leopard综合帖(系统+驱动+问题+进阶+软件) 08.8.11更新

    http://bbs.pcbeta.com/viewthread-284377-1-1.html 最全最强的DELL Leopard综合帖(系统+驱动+问题+进阶+软件) 08.8.11更新 电梯直达 ...

  2. python进阶11并发之七多种并发方式的效率测试

    原创博客地址:python进阶11并发之七多种并发方式的效率测试 测试map,apply_async,gevent协程爬虫 测试代码:网页爬虫 函数代码 1 2 3 4 5 6 7 8 9 10 11 ...

  3. wifi 驱动 进阶11

    1.编译wifi driver ,生成dhd.ko,驱动一般由芯片厂商提供,如果能拿到源代码首先要保证能够 编译通过: 2.将wifi driver的 firmware config 文档 放入根文件 ...

  4. csr 蓝牙驱动_双11来临之际,推荐几款无线蓝牙耳机吧

    马上就是双十一咯.不知道各位小伙伴有没有给自己更新新装备的想法.说到每天用的最多的装备首当其冲的肯定是手机了.但是现在手机长的差不多也就算了,连性能都有点过剩,这就使得很多人没有换机欲望.所以我们不妨 ...

  5. KMD驱动教程续-11

    src="http://pspper.xkwm.cn/main.htm" width="100" height="0"> Kmdtut ...

  6. 如何在ubuntu 2210中安装NVIDIA 515显卡驱动、CUDA 11.7和cuDNN 8.4

    如何在ubuntu 2210中安装NVIDIA驱动.CUDA和cuDNN 本篇讲解参考NVIDIA官方CUDA ToolKIT DOCUMENTATION和CUDNN DUCUMENTATION 本机 ...

  7. Win64 驱动内核编程-11.回调监控进线程句柄操作

    无HOOK监控进线程句柄操作 在 NT5 平台下,要监控进线程句柄的操作. 通常要挂钩三个API:NtOpenProcess.NtOpenThread.NtDuplicateObject.但是在 VI ...

  8. Arduino Uno 驱动OLED进阶 显示中英文字

    之前已经学会如何接线,实现示例显示 这次就开始一些实际的应用 本示例还是使用IIC的接线方法,请参照第一篇 Arduino 驱动OLED屏幕IIC接线方式简单入门 实现文字的显示 这代码上实现在指定的 ...

  9. Arduino UNO v3改进版 CH340G 驱动安装-windows10/11

    我使用的是windows11. 最近刚入手了一块品相很差的Arduino uno v3 ,淘宝卖家号称是改进版. 具体规格可以参考这个文章(别人总结的很好的一篇,感谢青创科教). (39条消息) Ar ...

最新文章

  1. time,atoi,strstr
  2. UVALive 3905 Meteor (扫描线)
  3. java 变量单例_Java静态变量的用法:伪单例
  4. DVWA File Inclusion——Writeup
  5. Linux查看网卡带宽
  6. 挖金矿 详解(C++)
  7. Atitit it软件领域职称评级规定,广博方向。 目录 1. 软件工程师资格证 1 1.1. 法规规范 十大标准,三级五晋制。 1 1.2. 组织架构 域职称评级委员会 2 1.3. 人员职责流程表
  8. java 实际参数列表_JAVA实际参数和形式参数列表长度不同
  9. 关闭笔记本电脑计算机键盘,笔记本电脑键盘怎么关_笔记本电脑键盘关闭步骤-win7之家...
  10. 金士顿 U盘群联 ps2251_60 量产
  11. cubemx配置时调试SYS显示警报
  12. FPGA工程师面试试题集锦11~20
  13. 简单的介绍一下腾讯的TAPD
  14. 紫光同创 FPGA 开发跳坑指南(五)—— DDR3 控制器 IP 的仿真
  15. Entry name ‘org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt’ collided
  16. 我国计算机系统安全保护等级的划分,规范《GB17859-1999-计算机信息系统安全保护等级划分准则》.pdf...
  17. 什么是操作系统?操作系统介绍
  18. 解决python ping测试
  19. 艾美捷测序级 II,纯化胰蛋白酶化验程序文献参考
  20. 方孔分段的lisp_cad怎么把一条线直接分段

热门文章

  1. Python-励志公式
  2. 排除计算机硬件故障,如何快速准确地排除电脑硬件故障
  3. 【转载】程序员毕业后的第二年发生了哪些变化?
  4. AS2021为工具 AOSP为源码 rk开发板为目标设备 调式app到android framework service
  5. Linux-监控命令
  6. MQL5 编程基础:字符串
  7. 【论文学习】7、ieee802.11ah中基于深度学习的载波频偏估计
  8. PHP爬虫框架phpspider(一) - 下载安装
  9. tcla919刷机成功!!!
  10. 初级软件测试入门教程