wifi softap(hotspot) porting


声明:该文件为本人原创,如转载修改及使用其中任何内容,请注明出处及原作者。

Author:lanbo(高兆成)

E-mail:lanbo_g@126.com

如有任何疑问可留言或E-mail


1、编译wifi driver

修改firmware下载路径,或确认firmware路径

A:有些wifi driver下载firmware是在driver中直接到指定位置读取firmware并通过SDIO(如SDIO接口)下到wifi芯片,这种方式比较简单,但需要知道firmware的路径,以便在向根文件系统存放firmware与该路径一致。如broadcomdriver

set download dir: dhd/sys/dhd_linux.c fun:dhd_attach

strcpy(fw_path, "/system/etc/firmware/fw.bin");

strcpy(nv_path, "/system/etc/firmware/nvram.txt");

注:download实现的地方:dhd/sys/dhd_linux.cfun:dhd_bus_start

生成dhd.ko

B:也有一些wifi driver在下载firmware前通过request_firmware创建属性文件和uevent socket,并发送firmware add uevent,在android上层/system/core/init.c中再创建一个socket用于接收kernel的uevent并将firmware写入属性文件,driver再将firmware传给wifi芯片。(相对来讲这一种方式比较正式,个人认为。具体download firmware如何实现在其它文件中会给出)

注该方法download firmware的firmware路径是固定的“/etc/firmware/”在/system/core/init/devices.c中有定义

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档sta.xbv(/wlan/Broadcom/firmware/sta.xbv)放到/system/etc/firmware目录下的子目录unifi-sdio-0中去。

最终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

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/hareware_platform/BoardConfig.mk

A:确定所使用的wifi芯片

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

当然一般用户(我指的是不是芯片或EVB开发公司)则不需要此定义,此定义也只是用于区分目前EVB上所使用的wifi芯片。

B:决定所使用的wpa_supplicant的版本及driver的接口

WPA_SUPPLICANT_VERSION := VER_0_6_X//此宏不是必须,没有此宏情况下默认使用VER_0_5_X版本的。

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_STA_PATH := /system/wifi/fw.bin

WIFI_DRIVER_FW_AP_PATH :=/system/wifi/fw_ap.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_DRIVER_MODULE_ARG:=DBG=7 //该宏是用于insmod时传参数

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

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

修改init.rc文件

A:增加wpa_supplicant服务

mkdir /data/misc/wifi 0770 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifiwifi

mkdir /data/system 0771 system system

mkdir /data/system/wpa_supplicant 0771 wifiwifi

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

B:配置dhcp服务

mkdir /data/misc/dhcp 0770 dhcp dhcp

chown dhcp dhcp /data/misc/dhcp

service dhcpcd /system/bin/dhcpcd -ABKL

disabled

oneshot

如下dhcpcd 是网上的,应该用上面的二者取一即可

service dhcpcd /system/bin/dhcpcd –f/system/etc/dhcpcd/dhcpcd.conf –d eth0

groupsystem dhcp

disabled

oneshot

如下是我们系统中存在的service,但我不确认是否有作用,个人认为没有作用。

service enterautosleep /system/bin/iwpriveth0 autodeepsleep 1

disabled

oneshot

service exitautosleep /system/bin/iwpriveth0 autodeepsleep 0

disabled

oneshot

5、修改硬件抽象层

因在第4步时已增加了宏定义,则此处/hardware/libhardware_legacy/wifi/wifi.c不需修改,如果不能正常insmod则可能需要在此处增加log来确定问题的原因。

6、在平台的*.mk文件中加入(/device/infomax/iM9816/generic_iM9816.mk,该文件是编译Android时device的平台配置文件)

ADDITIONAL_BUILD_PROPERTIES +=wifi.interface=eth0

如果没有以上文件则可在init.rc中加入如下内容

setprop wifi.interface “eth0”

另网上看到有人也加入了setpropwlan.driver.status “ok”,本人在看完wifi.c文件后发现该属性可不必添加。

7、增加usb tether softap interface及pppdrpstream

config_tether_usb_regexs:用于电脑或其它设备通过USB连接手机

config_tether_wifi_regexs:用于电脑或其它设备wifi 连接该接口的softap

config_tether_upstream_regexs:设置通过哪种方式上网,该处用pppd连接gprs上网

commit1a1c87d84f37cffafa3a9d91f97c4c7436bcf1a5

project framework/base

diff --git a/core/res/res/values/config.xmlb/core/res/res/values/config.xml

index 088ab44..e587a4f 100644

--- a/core/res/res/values/config.xml

+++ b/core/res/res/values/config.xml

@@ -74,12 +74,14 @@

USB interfaces.  If the devicedoesn't want to support tething over USB this should

be empty.  An example would be"usb.*" -->

<string-array translatable="false"name="config_tether_usb_regexs">

+       <item>"usb.*"</item>

</string-array>

<!-- List of regexpressions describing the interface (if any) thatrepresent tetherable

Wifi interfaces.  If the devicedoesn't want to support tethering over Wifi this

should be empty.  An example wouldbe "softap.*" -->

<string-array translatable="false"name="config_tether_wifi_regexs">

+       <item>"wl0.1"</item>

</string-array>

<!-- Dhcp range (min, max) to use for tethering purposes -->

@@ -89,6 +91,7 @@

<!-- Regex array of allowable upstream ifaces for tethering - forexample if you want

tethering on a new interface called "foo2" add<item>"foo\\d"</item> to the array -->

<string-array translatable="false"name="config_tether_upstream_regexs">

+       <item>"ppp\\d"</item>

</string-array>

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

主要是增加netfilter 的config实现softap的upstream通道.

kernel/arch/arm/configs/platform_android_defconfig

+CONFIG_NETFILTER=y

+CONFIG_NETFILTER_ADVANCED=y

+CONFIG_NF_CONNTRACK=y

+CONFIG_NF_CONNTRACK_MARK=y

+CONFIG_NETFILTER_XTABLES=y

+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y

+CONFIG_NETFILTER_XT_MATCH_MAC=y

+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y

+CONFIG_NETFILTER_XT_MATCH_STATE=y

+#IP: Netfilter Configuration

+CONFIG_NF_DEFRAG_IPV4=y

+CONFIG_NF_CONNTRACK_IPV4=y

+CONFIG_NF_CONNTRACK_PROC_COMPAT=y

+CONFIG_IP_NF_IPTABLES=y

+CONFIG_IP_NF_FILTER=y

+CONFIG_IP_NF_TARGET_REJECT=y

+CONFIG_NF_NAT=y

+CONFIG_NF_NAT_NEEDED=y

+CONFIG_IP_NF_TARGET_MASQUERADE=y

+CONFIG_IP_NF_TARGET_REDIRECT=y

+#IPv6: Netfilter Configuration

wifi softap(hotspot) porting相关推荐

  1. Android WiFi —softAP流程分析

    Android WiFi - Ap功能实现与源码分析 0. 前言 wifiAp的ip WifiAp的config分析 2.1 默认的config 2.2 修改wifiAp的config配置流程 开启/ ...

  2. 物联网ESP8266 WIFI SoftAP模式一键配网,开源源码,测试OK可以直接使用

    1.创作起因:网上找了很久,都没有关于ESP8266   WIFI通过softap方式配网开源例程,基本都是smartconfig  airkiss方式一键配网,这种方式受手机.路由器等兼容性影响,配 ...

  3. android移植wifi驱动流程porting

    android载入wifi驱动流程 wifi_load_driver check_wifi_chip_type_string get_wifi_device_id save_wifi_chip_typ ...

  4. ESP32-C3入门教程 WiFi篇③——WiFi SoftAP 模式开启AP热点

    文章目录 一.前言 二.WiFi模式 三.快速运行 四.运行效果 五.程序流程 5.1 主程序 5.2 注册事件回调函数 六.关键函数 6.1 将事件回调函数注册到特定循环 6.2 设置 ESP32 ...

  5. Wi-Fi softap

    个人热点功能 功能:提供无线网络接入,允许其他设备接入访问网络. 1.共享蜂窝网络:终端作为无线AP,其他便携设备通过802.11协议与其互联,通过tethering技术实现网络internet共享功 ...

  6. 基于VScode的ESP32开发学习(二):官方例程softap,提供wifi,详解

    完整代码放在文末 1.wifi事件处理函数 /*wifi事件处理函数*/ static void wifi_event_handler(void* arg, esp_event_base_t even ...

  7. Android SoftAp SoftAp打开/关闭代码流程(基于android 7.0)

    在Android手机中,SoftAp也是一个较为常用的功能.对于framework开发者来说,要开发.维护SoftAp,了解framework中热点开关的具体流程是非常有必要的.下面就对这部分内容做一 ...

  8. Android R WiFi热点流程浅析

    Android R WiFi热点流程浅析 Android上的WiFi SoftAp功能是用户常用的功能之一,它能让我们分享手机的网络给其他设备使用. 那Android系统是如何实现SoftAp的呢,这 ...

  9. Android -- Wifi热点的打开与关闭流程简介

    Android -- Wifi热点的打开与关闭流程简介 在Android手机中,热点也是一个较为常用的功能.对于framework开发者来说,要开发.维护SoftAp,了解framework中热点开关 ...

最新文章

  1. AJAX 实现form表单提交
  2. 【C++】引用与变量
  3. python四大软件-9个使用Python的世界级软件公司
  4. uestc summer training #2
  5. MFC_2.2 编辑框和文本控件
  6. nginx 代理到其他端口_「从单体架构到分布式架构」请求增多,单点变集群(2):Nginx...
  7. 对openflow 1.0协议的扩展
  8. python计算皮尔森相关系数
  9. 5G基本原理/5G NR的关键技术
  10. Heuristic function
  11. 【重磅】聚焦券商终端业务,博睿数据发布新一代券商终端核心业务体验可观测平台
  12. webpack中对CSS压缩
  13. Gut | 复旦马延磊组揭示青年肠癌肠道菌群、代谢物及细菌酶基因特征
  14. SIM7600CE-CNSE 4G模块 树莓派/Windows连网指南
  15. 港科夜闻|香港科技大学国际管理理学硕士(MIMT)课程连续第二年跻身全球管理教育联盟 (CEMS) 2021年度最佳学院前三甲...
  16. Kafka学习——基于已有zookeeper集群实现kafka的集成
  17. 音乐app用户推荐系统构建_一款专门给用户推荐动听音乐的音乐期刊类的应用。画面极简优美...
  18. 维克森林大学计算机科学专业好不好,2017年维克森林大学计算机科学
  19. java模拟转账_事务-模拟银行用户转账
  20. python 自动生成文档

热门文章

  1. 修改ST公司提供的HID鼠标例程为自己所用
  2. Spring Boot 核心编程思想-第二部分-读书笔记
  3. 引流脚本软件是干什么的,引流脚本是最靠谱得引流方式?
  4. 【HTML+CSS】HTML基础知识+软件使用
  5. 使用docker安装zookeeper
  6. 就在上周,联合十多位Android技术圈的小网红,做了一份Android架构师进阶书籍推荐
  7. ansys 内聚力模型_ANSYS Workbench有限元分析实例详解:静力学 PDF高清完整版
  8. Spotfire使用经验——使用文档属性(Document Property)实现数据集范围的动态限定
  9. 使用学校的服务器跑深度学习
  10. 怎样把截图转换成文字?三分钟教会你如何截图转文字