全志h3linux移植教程,全志H3_wifi模块移植说明文档V-SDK软件资料

2. 模块介绍

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

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

注意:

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 驱动;

4. ap6210

功能:wifi station、softap、wifi direct、bluetooth

接口类型:SDIO、UART

参考方案:eagle_fvd_p1

编译模式:编译成内核模块,修改路径如下

去到 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

4.1. wifi function

4.1.1. BoardConfig.mk

BoardConfig.mk 文件决定 android 加载哪一款 wifi 模组,要配置成使用 ap6210 模组需要把 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 := AP6210

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 := AP6210”指明使用 AP6210 模块

4.1.2. init.rc

init.rc 是资源和服务配置相关的文件,使用 ap6210 wifi 模组需要作如下修改(部分代码)。

添加以下内容加载 wifi 驱动:

#insmod boardcom wifi driver

insmod /system/vendor/modules/bcmdhd.ko

4.1.2. init.rc

init.rc 是资源和服务配置相关的文件,使用 ap6210 wifi 模组需要作如下修改(部分代码)。

添加以下内容加载 wifi 驱动:

#insmod boardcom wifi driver

insmod /system/vendor/modules/bcmdhd.ko

4.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

4.1.4. config.xml

在 frameworks\base\core\res\res\values\config.xml 文件里添加以下内容,使得在设置界面显示“网络共享与便

携式热点”功能:

"wlan0"

4.1.5. sys_config.fex

要配置成使用 ap6210 模组需要把 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"

sdc_power_supply = "vcc-wifi-io"

;--------------------------------------------------------------------------------

;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 = 4

module_power0 = "axp81x_dcdc1"

module_power0_vol = 3300000

module_power1 =

module_power1_vol =

module_power2 =

module_power2_vol =

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 做为 ap6210 的控制需要根据具体平台而定

4.2. bluetooth function

修改内核配置,把蓝牙休眠功能给选择上。去到 linux-3.4 目录下,输入 make ARCH=arm menuconfig

,把内核中把支持蓝牙休眠功能选择上。

选择 [*] Networking support --->

Bluetooth subsystem support--->

Bluetooth device drivers--->

Broadcom Bluetooth Low Power Manager Support

注意:

这里将它编译成模块

4.2.1. BoardConfig.mk

修改 BoardConfig.mk 文件,让其支持 ap6210 的蓝牙功能,修改如下。

# 2. Bluetooth Configuration

# make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor

BOARD_HAVE_BLUETOOTH := true

BOARD_HAVE_BLUETOOTH_BCM := true

#BOARD_HAVE_BLUETOOTH_RTK := true

#BLUETOOTH_HCI_USE_RTK_H5 := true

SW_BOARD_HAVE_BLUETOOTH_NAME := ap6210

BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR :=

device/softwinner/eagle-tvd-perf3/bluetooth/

4.2.2. init.rc

修改 init.rc 文件,设置蓝牙属性信息,修改如下。

on boot

insmod /system/vendor/modules/bcm_btlpm.ko

# bcm bluetooth

# uart device

chmod 660 /dev/ttyS1

chown bluetooth net_bt_stack /dev/ttyS1

mkdir /data/misc/bluedroid 770 bluetooth net_bt_stack

# power up/down interface

chmod 0660 /sys/class/rfkill/rfkill0/state

chmod 0660 /sys/class/rfkill/rfkill0/type

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type

#write /sys/class/rfkill/rfkill0/state 0

# bluetooth MAC address programming

chown bluetooth net_bt_stack ro.bt.bdaddr_path

chown bluetooth net_bt_stack /system/etc/bluetooth

chown bluetooth net_bt_stack /data/misc/bluetooth

setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr"

# bluetooth LPM

chmod 0220 /proc/bluetooth/sleep/lpm

chmod 0220 /proc/bluetooth/sleep/btwrite

chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm

chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite

你可能感兴趣的:(全志h3linux移植教程)