全志H3_wifi模块移植说明文档 V1.0

本文档编写目的是让相关人员能按照文档说明把SDK 所支持的wifi 使用起来,要使用SDK 所支持wifi的其中一款只需要修改相关配置即可。

本文档适用于 H3 android4.4.2 平台移植 wifi 使用。

2. 模块介绍
目前H3 android4.4.2平台上已支持wifi模组有6款,本文档将以H3盒子原型机为例说明如何配置每款wifi模组。

wifi模组可分USB 接口和SDIO 接口两种类型,部分模组带蓝牙功能,wifi的全功能包括station、softap和wifi direct,其中station是wifi 的最基本功能,每款 wifi 模组均支持。

本文档会不断更新,文档和代码对应可能会稍有差别。

H3 android4.4.2 平台 wifi 模组支持列表

全志H3_wifi模块移植说明文档 V1.0_第1张图片

注意:
1、 到 linux-3.4 目录下,输入 make ARCH=arm menuconfig,然后选择 Device Drivers --->Network device 
suppor--->Wireless LAN,即可看到参与编译的 wifi 驱动。
2、内核默认是编译蓝牙,如果实际平台没有蓝牙功能可蓝牙去除编译,减少生成的内核大小,修改方法如下。

去到 linux-3.4 目录下,输入 make ARCH=arm menuconfig
然后选择[*] Networking support ---> 
< > Bluetooth subsystem support --->
.......
< > RF switch subsystem support --->

3. ap6181
功能:wifi station、softap、wifi direct
接口类型:SDIO
编译模式:编译成内核模块,修改路径如下
去到 linux-3.4 目录下,输入 make ARCH=arm menuconfig

然后选择 Device Drivers --->
Network device support --->
Wireless LAN --->
Broadcom 4329/30 wireless cards support
 [*] Use Customized firmware path
 [*] Use Customized NVRAM path
 [*] Use Customized config path
 Interrupt type (Out-of-Band Interrupt) --->

进入 Interrupt type (Out-of-Band Interrupt)--->,选择
(X) Out-of-Band Interrupt

3.1. wifi function
3.1.1. BoardConfig.mk
BoardConfig.mk 文件决定 android 加载哪一款 wifi 模组,要配置成使用 ap6181 模组需要把 BoardConfig.mk文件的相关代码修改成如下。

# wifi and bt configuration
# 1. Wifi Configuration
#BOARD_WIFI_VENDOR := realtek
BOARD_WIFI_VENDOR := broadcom
# 1.1 broadcom wifi support
ifeq ($(BOARD_WIFI_VENDOR), broadcom)
 BOARD_WPA_SUPPLICANT_DRIVER := NL80211
 WPA_SUPPLICANT_VERSION := VER_0_8_X
 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd
 BOARD_HOSTAPD_DRIVER := NL80211
 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd
 BOARD_WLAN_DEVICE := bcmdhd
 WIFI_DRIVER_FW_PATH_PARAM := "/sys/module/bcmdhd/parameters/firmware_path"
 SW_BOARD_USR_WIFI := AP6181
 include hardware/broadcom/wlan/bcmdhd/firmware/firmware-bcm.mk
endif

说明:

1、“#”符号起注释作用;
2、“#BOARD_WIFI_VENDOR := realtek”指明不使用 realtek 系统 wifi 模组;
3、“BOARD_WIFI_VENDOR := broadcom”指明使用 broadcom 系统 wifi 模组;
4、“SW_BOARD_USR_WIFI := AP6181”指明使用 AP6181 模块;

3.1.2. init.rc
init.rc 是资源和服务配置相关的文件,使用 ap6181 wifi 模组需要作如下修改(部分代码)。
添加以下内容加载 wifi 驱动:

#insmod boardcom wifi driver
insmod /system/vendor/modules/bcmdhd.ko

添加以下内容,启动 wpa_supplicant:

# broadcom wifi service
# 1 broadcom wifi station and softap
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \
 -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
 -I/system/etc/wifi/wpa_supplicant_overlay.conf \
 -O/data/misc/wifi/sockets \
 -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
 class main
 socket wpa_wlan0 dgram 660 wifi wifi
 disabled
 oneshot

# 2 braodcom wifi sta p2p concurrent service
service p2p_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \
 -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
 -I/system/etc/wifi/wpa_supplicant_overlay.conf \
 -O/data/misc/wifi/sockets -N \
 -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
 -I/system/etc/wifi/p2p_supplicant_overlay.conf \
 -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin \
 -g@android:wpa_wlan0
 class main
 socket wpa_wlan0 dgram 660 wifi wifi
 disabled
 oneshot

3.1.3. eagle_fvd_p1.mk
添加以下内容,使得在设置界面显示 wifi 和 wifi 直连功能:

PRODUCT_COPY_FILES += \
 frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
 
frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml

3.1.4. config.xml
在 frameworks\base\core\res\res\values\config.xml 文件里添加以下内容,使得在设置界面显示“网络共享与便携式热点”功能:


 "wlan0"
 

3.1.5. sys_config.fex
要配置成使用 ap6181 模组需要把 sys_config.fex 文件修改成如下(部分代码)。

[mmc1_para]
sdc_used = 1
sdc_detmode = 4
sdc_buswidth = 4
sdc_clk = port:PG00<2><1><2>
sdc_cmd = port:PG01<2><1><2>
sdc_d0 = port:PG02<2><1><2>
sdc_d1 = port:PG03<2><1><2>
sdc_d2 = port:PG04<2><1><2>
sdc_d3 = port:PG05<2><1><2>
sdc_det =
sdc_use_wp = 0
sdc_wp =
sdc_isio = 1
sdc_regulator = "none"
;--------------------------------------------------------------------------------
;wifi/bt/fm/gps/nfc modules configuration
;module_num:
; 0- none
; 1- rtl8188eu(wifi)
; 2- rtl8723bs(wifi+bt)
; 3- ap6181(wifi)
; 4- ap6210(wifi+bt)
; 5- ap6330(wifi+bt)
; 6- ap6335(wifi)
;module_power0: axp used by module, "axp22_dldo1" - use dldo1, not use keep it empty
;module_power0_vol: power0 voltage, mv;
;chip_en: enable chip io
;lpo_use_apclk: ""- not use, "losc_out"- a23/33, "ac10032k1"、"ac10032k2"、"ac10032k3"- a80
;--------------------------------------------------------------------------------
[module_para]

module_num = 3
module_power0 = "axp22_dldo1"
module_power0_vol = 3300000
module_power1 = "axp15_cldo3"
module_power1_vol = 3000000
module_power2 = "axp22_ldoio0"
module_power2_vol = 3000000
module_power3 =
module_power3_vol =
chip_en =
lpo_use_apclk = "ac10032k2"
;--------------------------------------------------------------------------------
;wifi configuration
;wifi_used: 0-not use, 1- use
;wifi_sdc_id: 0- SDC0, 1- SDC1, 2- SDC2, 3- SDC3
;wifi_usbc_id: 0- USB0, 1- USB1, 2- USB2
;wifi_usbc_type: 1- EHCI(speed 2.0), 2- OHCI(speed 1.0)
;wl_reg_on: wifi function enable io
;wl_host_wake: wifi device wake-up host
;wl_host_wake_invert: whether wl_host_wake use inverter between ap and module
; 0: not used, 1: used
;--------------------------------------------------------------------------------
[wifi_para]
wifi_used = 1
wifi_sdc_id = 1
wifi_usbc_id = 1
wifi_usbc_type = 1
wl_reg_on = port:PL02<1><0>
wl_host_wake = port:PL03<0><0>
wl_host_wake_invert = 0

说明:
1、“;”符号起注释作用;
2、“wifi_used”宏赋值为 1 表示使用 wifi,为 0 表示不使用;
3、“wifi_sdc_id”宏表示使用哪个 SD 接口连接 SDIO wifi;
4、“wifi_num”宏表示选用哪一款 wifi 模组;
5、“module_power0”宏表示 wifi 供电电源;
6、“module_power0_vol”宏表示 wifi 供电电源的电压值;
7、“module_power1”宏作用与 module_power0 宏一样;
8、“module_power1_vol”宏作用与 module_power0_vol 宏一样;
9、“module_power2”宏表示 wifi IO 口上拉电阻所接的电压源;
10、“module_power2_vol”宏表示 wifi IO 口上拉电阻所接的电压值;
11、“lpo_use_apclk”宏表示所选择的 32K 时钟源;

注意: 
1、模组供电电源和使用哪些 pin 做为 ap6181 的控制需要根据具体平台而定;

3.2. wifi wake host
ap6181 支持 wifi 唤醒休眠主控功能,只需要在 sys_config.fex 的[wakeup_src_para]主键中做添加即可,具体修改如下。

[wakeup_src_para]
cpu_en = 0
cpu_freq = 48
; (cpu:apb:ahb)
pll_ratio = 0x111
dram_selfresh_en = 1
dram_freq = 36
wakeup_src0 =
wakeup_src_wl = port:PL03<4><0>
bb_wake_ap = port:PM01<4><0>

说明: 
1、“wakeup_src_wl”子键是为 wifi 唤醒休眠主控而添加的

注: 
1、模组使用哪些 pin 做为 ap6181 的控制需要根据具体平台而定;

3.3. ap6181 模组移植相关文件
以下文件是与 ap6181 模组移植相关的,无需再对这些文件作修改,只需了解即可。

一、ap6181 驱动代码
\linux-3.4\drivers\net\wireless\bcmdhd

二、电源及 GPIO 控制
lichee\linux-3.4\drivers\misc\rf_pm\wifi_pm.c 
lichee\linux-3.4\drivers\misc\rf_pm\module_pm.c 
lichee\linux-3.4\drivers\misc\rf_pmbt_pm.c 
wifi_pm.c 是 ap6181 模组电源和 GPIO 控制的实现文件。
bt_pm.c 是蓝牙电源管理的实现文件。

注: 
1、broadcom 的 ap6xxx 系列模组均是使用相同的 bcmdhd 驱动;

完整资料参考:

你可能感兴趣的:(全志H3_wifi模块移植说明文档 V1.0)