全志H3_wifi模組移植說明文件V-SDK軟體資料

SZX511發表於2019-06-18

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

<M> 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 檔案裡新增以下內容,使得在設定介面顯示“網路共享與

行動式熱點”功能:

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

 <item>"wlan0"</item>

 </string-array>


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><default>

sdc_cmd = port:PG01<2><1><2><default>

sdc_d0 = port:PG02<2><1><2><default>

sdc_d1 = port:PG03<2><1><2><default>

sdc_d2 = port:PG04<2><1><2><default>

sdc_d3 = port:PG05<2><1><2><default>

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><default><default><0>

wl_host_wake = port:PL03<0><default><default><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><default><default><0>

bb_wake_ap = port:PM01<4><default><default><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 --->

<M> 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 檔案裡新增以下內容,使得在設定介面顯示“網路共享與便

攜式熱點”功能:

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

 <item>"wlan0"</item>

 </string-array>


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><default>

sdc_cmd = port:PG01<2><1><2><default>

sdc_d0 = port:PG02<2><1><2><default>

sdc_d1 = port:PG03<2><1><2><default>

sdc_d2 = port:PG04<2><1><2><default>

sdc_d3 = port:PG05<2><1><2><default>

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><default><default><0>

wl_host_wake = port:PL03<0><default><default><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--->

 <M> 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529038/viewspace-2647973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章