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"//这是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相关推荐
- 11 wifi 驱动 进阶 http://blog.csdn.net/wh_19910525/article/details/7393615
1.编译wifi driver ,生成dhd.ko,驱动一般由芯片厂商提供,如果能拿到源代码首先要保证能够 编译通过: 2.将wifi driver的 firmware config 文档 放入根文件 ...
- 10Android Wifi 移植配置 11wifi 驱动 进阶
http://blog.csdn.net/wh_19910525/article/details/7397570 最近移植wifi到Eclair,Froyo平台.由于没有记录下移植步骤和心得,以至于每 ...
- 图文讲解 WiFi 驱动移植过程,很肝~
关注.星标公众号,直达精彩内容 来源:嵌入式基础学习 作者:小二 本篇文章打算对WiFi 驱动移植文章进行一次系统性的总结.复盘,分享一下自己的思考过程,遇到的问题等. 希望对您有点帮助??????? ...
- 移植MT76x8 私有WIFI驱动V4.1.0.0到Openwrt 18.06所遇到的坑
Openwrt系统,路由或者IOT网关方面,市面上能供个人或者小团队甚至小企业 ,可玩性高的也就MT76xx系列路由芯片了,其中很大一部分原因主要在于MTK的WIFI驱动管控不是很严格,相对较容易获取 ...
- Linux 下wifi 驱动开发(二)—— WiFi模块浅析
一.什么是wifi 模块 百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...
- 详细记录丨Realtek RTL8188FU WiFi 驱动移植
1 参考资料 1.芯片数据手册:TL8188FCA.pdf 2.驱动移植手册:Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf ...
- cups源码下载 linux_正点原子Linux第七十章Linux WIFI驱动实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第七十章Linux WIFI驱动实验 WIFI的使用已经 ...
- wifi模块服务器项目心得,一次关于WiFi 驱动移植的总结复盘
1 简介 WiFi 是什么?能用来做什么? 都 2021 年了,相信您对 WiFi 一定不陌生了. 可以参考这里的百度百科释义:[百度百科 - WiFi(https://baike.baidu.com ...
最新文章
- 120万公里「真」无人商用里程如何炼成?出租车物流车车车无人,香港乌鲁木齐城城自动...
- Running Spark on YARN
- 2017-6-3 jQuery 事件 DOM操作
- 同时10万个事务在线,读写频繁,数据库该如何设计
- 四十三、去年pandas的笔记
- boost::ptr_container::ptr_inserter相关的测试程序
- 使用OnCtlColor函数消息打造背景
- 深度学习笔记4:深度神经网络的正则化
- vue中,点击button按钮后,页面上的input框再次自动获取焦点
- android market 选择
- mysql系列:登陆和退出
- ARCH与GARCH模型
- Excel取消自动行高调整(取消自动换行)
- matlab 绘制有向图、无向图、有权有向图、有权无向图以及查找最短路径
- socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应
- 程序员怎么才能让自己走得更高、更远?
- 降噪耳机买什么牌子好?口碑质量好的降噪耳机推荐
- 红米K30S至尊纪念版和红米K30至尊纪念版哪个好
- 互联网大厂的年终奖(华为分红400亿,腾讯每人发股票 )
- Linux 进程管理工具:supervisor