欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

全志V40适配wifi模块rtl8723bs

程序员文章站 2022-06-21 20:30:10
1. 平台Android 4.4,Linux 3.102. 设备树lichee/tools/pack/chips/sun8iw11p1/configs/magton-perf/sys_config.fex中;--------------------------------------------------------------------------------;wlan configuration;wlan_used: 0-not use, 1- use;wlan_bus...

1. 平台

Android 4.4,Linux 3.10

2. 设备树

lichee/tools/pack/chips/sun8iw11p1/configs/magton-perf/sys_config.fex

;--------------------------------------------------------------------------------
;wlan configuration
;wlan_used:         0-not use, 1- use
;wlan_busnum:       sdio/usb index
;clocks:            external low power clock input (32.768KHz)
;wlan_power:        input supply voltage
;wlan_io_regulator: wlan/sdio I/O voltage
;wlan_regon:        power up/down internal regulators used by wifi section
;wlan_hostwake:     wlan to wake-up host
;wlan_clk_gpio:     wlan low power clock output pin
;--------------------------------------------------------------------------------
[wlan]
wlan_used		   	  = 1
compatible			  = "allwinner,sunxi-wlan"
clocks                = "outa"
wlan_busnum			  = 1
wlan_power            = "vcc-wifi"
wlan_io_regulator 	  = "vcc-io-wifi"
wlan_regon			  = port:PH08<1><1><1><0>
wlan_hostwake		  = port:PH09<0><default><default><default>
;wlan_clk_gpio         = port:PI12<4><default><default><0>
wlan_clk_gpio         =
;--------------------------------------------------------------------------------
;bluetooth configuration
;bt_used:           0- no used, 1- used
;clocks:            external low power clock input (32.768KHz)
;bt_power:          input supply voltage
;bt_io_regulator:   bluetooth I/O voltage
;bt_rst_n:          power up/down internal regulators used by BT section
;--------------------------------------------------------------------------------
[bt]
bt_used			    	= 1
bt_uart_id			= 3
bt_uart_baud                    = 1500000
compatible						= "allwinner,sunxi-bt"
clocks 							= "outa"
pinctrl-names					= "default"
;;clock_io                        = port:PI12<4><0><0><default>
bt_power 						= "vcc-wifi-2"
bt_io_regulator 	     		= "vcc-io-wifi"
bt_rst_n					    = port:PG10<1><1><1><0>
;--------------------------------------------------------------------------------
;bluetooth lpm configuration
;btlpm_used:        0- no used, 1- used
;uart_index:        0- uart0, 1- uart1, 2- uart2
;bt_wake:           host wake-up bluetooth device
;bt_hostwake:       bt device wake-up host
;--------------------------------------------------------------------------------
[btlpm]
btlpm_used						= 1
compatible						= "allwinner,sunxi-btlpm"
uart_index						= 3
bt_wake             = port:PG11<1><1><1><1>
bt_hostwake         = port:PH10<0><0><0><1>

3. 内核配置

内核配置中

CONFIG_RTL8723BS=m

4. android 层

4.1 注释broadcom WiFi

android/hardware/broadcom/wlan/bcmdhd/Android.mk 中注释

#include $(call all-subdir-makefiles)

4.2 magton_perf.mk

android/device/softwinner/magton-perf/magton_perf.mk中注释broadcom WiFi 编译,增加realtek WiFi编译

$(call inherit-product-if-exists, device/softwinner/common/hardware/realtek/Android.mk)
# ap6181/6210/6330 sdio wifi fw and nvram 
#$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6181/device-bcm.mk)
#$(call inherit-product-if-exists, hardware/broadcom/wlan/bcmdhd/firmware/ap6212/device-bcm.mk)
#$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6330/device-bcm.mk)

4.3 init.rc

android/device/softwinner/magton-perf/init.rc 中修改 蓝牙、WiFi 的服务

# bluetooth
    chmod 0660 /dev/ttyS3
    chown bluetooth net_bt_stack /dev/ttyS3
    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 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

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

service btuartservice /system/bin/btuartservice
	class core
	user root
	group root
	disabled
	oneshot

on property:persist.service.bdroid.uart=*
    start btuartservice

on property:persist.service.bdroid.sleep=bcm
    insmod /system/vendor/modules/bcm_btlpm.ko
    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
    
# 1. realtek & eagle wifi service
# 1.1 realtek & eagle wifi sta service
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \
	-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
	-O/data/misc/wifi/sockets \
	-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
    #   we will start as root and wpa_supplicant will switch to user wifi
    #   after setting up the capabilities required for WEXT
    #   user wifi
    #   group wifi inet keystore
	class main
	socket wpa_wlan0 dgram 660 wifi wifi
	disabled
	oneshot

# 1.2 realtek & eagle wifi sta p2p concurrent service
service p2p_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \
	-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
	-e/data/misc/wifi/entropy.bin -N \
	-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
	-O/data/misc/wifi/sockets \
	-g@android:wpa_wlan0
	class main
	socket wpa_wlan0 dgram 660 wifi wifi
	disabled
	oneshot
#end

4.4 BoardConfig.mk

android/device/softwinner/magton-perf/BoardConfig.mk中内容

# BoardConfig.mk
#
# Product-specific compile-time definitions.
#

include device/softwinner/magton-common/BoardConfigCommon.mk

# image related
TARGET_NO_BOOTLOADER := true
TARGET_NO_RECOVERY := false
TARGET_NO_KERNEL := false

INSTALLED_KERNEL_TARGET := kernel
BOARD_KERNEL_BASE := 0x40000000
BOARD_KERNEL_CMDLINE :=
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 805306368
#BOARD_USERDATAIMAGE_PARTITION_SIZE :=

BOARD_WIFI_VENDOR  := realtek

WIFI_DRIVER_MODULE_PATH :="/system/vendor/modules/"
WIFI_DRIVER_MODULE_NAME :="8723bs"
WIFI_DRIVER_MODULE_ARG  :="ifname=wlan0 if2name=p2p0"


# wifi and bt configuration
# 1. wifi Configuration
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl
BOARD_HOSTAPD_DRIVER        := NL80211
BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_rtl

SW_BOARD_USR_WIFI := rtl8723bs
BOARD_WLAN_DEVICE := rtl8723bs

#include device/softwinner/common/hardware/realtek/wlan/Android.mk 

# 2. Bluetooth Configuration
# make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor
include device/softwinner/common/hardware/realtek/bluetooth/rtl8723bs/firmware/rtlbtfw_cfg.mk
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_RTK := true
BLUETOOTH_HCI_USE_RTK_H5 := true
BOARD_HAVE_BLUETOOTH_NAME := rtl8723bs
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/softwinner/magton-perf/bluetooth/

# 3. Sensor HAL Configuration
SW_BOARD_USES_SENSORS_TYPE = aw_sensors

4.5 wifi.c

android/hardware/libhardware_legacy/wifi/wifi.c

无修改

4.6 wifi_hardware_info.c

android/hardware/libhardware_legacy/wifi_hardware_info/wifi_hardware_info.c 中注意:

 {
        .device_id   = 0x1b723,
        .module_name = "rtl8723bs",
        .driver_name = "8723bs",
        .vendor_name = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
static const struct wifi_hardware_info wifi_list[] = {
    {
        .device_id    = 0x00179,
        .module_name  = "rtl8188eu",
        .driver_name  = "8188eu",
        .vendor_name  = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id    = 0x08179,
        .module_name  = "rtl8188etv",
        .driver_name  = "8188eu",
        .vendor_name  = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x18179,
        .module_name = "rtl8189es",
        .driver_name = "8189es",
        .vendor_name = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x1f179,
        .module_name = "rtl8189fs",
        .driver_name = "8189fs",
        .vendor_name = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x1b723,
        .module_name = "rtl8723bs",
        .driver_name = "8723bs",
        .vendor_name = "realtek",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x1a9a6,
        .module_name = "ap6212",
        .driver_name = "bcmdhd",
        .vendor_name = "broadcom",
        .fw_path_sta = "/system/vendor/modules/fw_bcm43438a0.bin",
        .fw_path_ap  = "/system/vendor/modules/fw_bcm43438a0_apsta.bin",
        .fw_path_p2p = "/system/vendor/modules/fw_bcm43438a0_p2p.bin",
    },
    {
        .device_id   = 0x1a962,
        .module_name = "ap6210",
        .driver_name = "bcmdhd",
        .vendor_name = "broadcom",
        .fw_path_sta = "/system/vendor/modules/fw_bcm40181a2.bin",
        .fw_path_ap  = "/system/vendor/modules/fw_bcm40181a2_apsta.bin",
        .fw_path_p2p = "/system/vendor/modules/fw_bcm40181a2_p2p.bin",
    },
    {
        .device_id   = 0x14330,
        .module_name = "ap6330",
        .driver_name = "bcmdhd",
        .vendor_name = "broadcom",
        .fw_path_sta = "/system/vendor/modules/fw_bcm40183b2_ag.bin",
        .fw_path_ap  = "/system/vendor/modules/fw_bcm40183b2_ag_apsta.bin",
        .fw_path_p2p = "/system/vendor/modules/fw_bcm40183b2_ag_p2p.bin",
    },
    {
        .device_id   = 0x14335,
        .module_name = "ap6335",
        .driver_name = "bcmdhd",
        .vendor_name = "broadcom",
        .fw_path_sta = "/system/vendor/modules/fw_bcm4339a0_ag.bin",
        .fw_path_ap  = "/system/vendor/modules/fw_bcm4339a0_ag_apsta.bin",
        .fw_path_p2p = "/system/vendor/modules/fw_bcm4339a0_ag_p2p.bin",
    },
    {
        .device_id   = 0x13030,
        .module_name = "ssv6051",
        .driver_name = "ssv6051",
        .vendor_name = "southsv",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x11111,
        .module_name = "esp8089",
        .driver_name = "esp8089",
        .vendor_name = "eagle",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
    {
        .device_id   = 0x12281,
        .module_name = "xr819",
        .driver_name = "xradio_wlan",
        .vendor_name = "xradio",
        .fw_path_sta = "STA",
        .fw_path_ap  = "AP",
        .fw_path_p2p = "P2P",
    },
};

5. Bluetooth

5.1 Android.mk

android/device/softwinner/common/hardware/realtek/bluetooth/rtl8723bs/libbt-vendor/Android.mk
注意:LOCAL_MODULE := libbt-vendor-rtk

LOCAL_PATH := $(call my-dir)

#ifneq ($(BOARD_HAVE_BLUETOOTH_RTK),)

include $(CLEAR_VARS)

BDROID_DIR := $(TOP_DIR)external/bluetooth/bluedroid

LOCAL_SRC_FILES := \
        src/bt_vendor_rtk.c \
        src/hardware.c \
        src/userial_vendor.c \
        src/upio.c

LOCAL_C_INCLUDES += \
        $(LOCAL_PATH)/include \
        $(BDROID_DIR)/hci/include

LOCAL_SHARED_LIBRARIES := \
        libcutils

LOCAL_MODULE := libbt-vendor-rtk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_OWNER := realtek
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
LOCAL_REQUIRED_MODULES := btuartservice

include $(LOCAL_PATH)/vnd_buildcfg.mk

include $(BUILD_SHARED_LIBRARY)

#endif # BOARD_HAVE_BLUETOOTH_RTK

5.2 bt_vendor_rtk.c

android/device/softwinner/common/hardware/realtek/bluetooth/rtl8723bs/libbt-vendor/src/bt_vendor_rtk.c
注意:int uart_id = 3;使用了串口3

/******************************************************************************
 *
 *  Filename:      bt_vendor_rtk.c
 *
 *  Description:   Realtek vendor specific library implementation
 *
 ******************************************************************************/

#undef NDEBUG
#define LOG_TAG "bt_vendor"
#include <utils/Log.h>
#include <stdlib.h>
#include <fcntl.h>
#include "bt_vendor_rtk.h"
#include "upio.h"
#include "userial_vendor.h"

#ifndef BTVND_DBG
#define BTVND_DBG FALSE
#endif

#if (BTVND_DBG == TRUE)
#define BTVNDDBG(param, ...) {ALOGD(param, ## __VA_ARGS__);}
#else
#define BTVNDDBG(param, ...) {}
#endif

/******************************************************************************
**  Externs
******************************************************************************/

void hw_config_start(void);

#if (HW_END_WITH_HCI_RESET == TRUE)
void hw_epilog_process(void);
#endif

/******************************************************************************
**  Variables
******************************************************************************/

bt_vendor_callbacks_t *bt_vendor_cbacks = NULL;
uint8_t vnd_local_bd_addr[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

int uart_id = 3;
int baud_rate = 1500000;
#define PROC_BLUETOOTH_VENDOR_ID   "/proc/bluetooth/vendor_id"
/******************************************************************************
**  Local type definitions
******************************************************************************/

/******************************************************************************
**  Static Variables
******************************************************************************/

static const tUSERIAL_CFG userial_init_cfg =
{
    (USERIAL_DATABITS_8 | USERIAL_PARITY_EVEN | USERIAL_STOPBITS_1),
    USERIAL_BAUD_115200,
    USERIAL_HW_FLOW_CTRL_OFF
};

/******************************************************************************
**  Functions
******************************************************************************/
#define PROC_BLUETOOTH_UART_ID_PATH   "/proc/bluetooth/uart_id"
#define PROC_BLUETOOTH_BAUD_RATE_PATH   "/proc/bluetooth/baud_rate"
static void read_proc_bluetooth_info()
{
    char buf[50];
    int fd;

    fd = open(PROC_BLUETOOTH_UART_ID_PATH, O_RDONLY);
    if (fd < 0)
    {
        ALOGE("can not open %s\n", PROC_BLUETOOTH_UART_ID_PATH);
        return;
    }
    read(fd, &buf, sizeof(buf));
    close(fd);
    uart_id = strtol(buf, 0, 10);
    ALOGI("uart id = %d\n", uart_id);

    fd = open(PROC_BLUETOOTH_BAUD_RATE_PATH, O_RDONLY);
    if (fd < 0)
    {
        ALOGE("can not open %s\n", PROC_BLUETOOTH_BAUD_RATE_PATH);
        return;
    }
    read(fd, &buf, sizeof(buf));
    close(fd);
    baud_rate = strtol(buf, 0, 10);
    ALOGI("baud rate = %d\n", baud_rate);
}

/*****************************************************************************
**
**   BLUETOOTH VENDOR INTERFACE LIBRARY FUNCTIONS
**
*****************************************************************************/

static int init(const bt_vendor_callbacks_t* p_cb, unsigned char *local_bdaddr)
{
    ALOGI("init");

    if (p_cb == NULL)
    {
        ALOGE("init failed with no user callbacks!");
        return -1;
    }

    read_proc_bluetooth_info();
    upio_write_proc(PROC_BLUETOOTH_VENDOR_ID, 1);
    userial_vendor_init();
    upio_init();

    /* store reference to user callbacks */
    bt_vendor_cbacks = (bt_vendor_callbacks_t *) p_cb;

    /* This is handed over from the stack */
    memcpy(vnd_local_bd_addr, local_bdaddr, 6);

    return 0;
}


/** Requested operations */
static int op(bt_vendor_opcode_t opcode, void *param)
{
    int retval = 0;

    BTVNDDBG("op for %d", opcode);

    switch(opcode)
    {
        case BT_VND_OP_POWER_CTRL:
            {
                int *state = (int *) param;
                if (*state == BT_VND_PWR_OFF)
                {
                    upio_set_bluetooth_power(UPIO_BT_POWER_OFF);
                    usleep(200000);
                    BTVNDDBG("set power off and delay 200ms");

                }
                else if (*state == BT_VND_PWR_ON)
                {
                    upio_set_bluetooth_power(UPIO_BT_POWER_ON);
                    usleep(500000);
                    BTVNDDBG("set power on and delay 500ms");

                }
            }
            break;

        case BT_VND_OP_FW_CFG:
            {
                hw_config_start();
            }
            break;

        case BT_VND_OP_SCO_CFG:
            {
                retval = -1;
            }
            break;

        case BT_VND_OP_USERIAL_OPEN:
            {
                int (*fd_array)[] = (int (*)[]) param;
                int fd, idx;
                fd = userial_vendor_open((tUSERIAL_CFG *) &userial_init_cfg);
                if (fd != -1)
                {
                    for (idx=0; idx < CH_MAX; idx++)
                        (*fd_array)[idx] = fd;

                    retval = 1;
                }
                /* retval contains numbers of open fd of HCI channels */
            }
            break;

        case BT_VND_OP_USERIAL_CLOSE:
            {
                userial_vendor_close();
            }
            break;

        case BT_VND_OP_GET_LPM_IDLE_TIMEOUT:
            {

            }
            break;

        case BT_VND_OP_LPM_SET_MODE:
            {
                uint8_t *mode = (uint8_t *) param;
                rtl_hw_lpm_enable(*mode);
            }
            break;

        case BT_VND_OP_LPM_WAKE_SET_STATE:
            {

            }
            break;
        case BT_VND_OP_EPILOG:
            {
#if (HW_END_WITH_HCI_RESET == FALSE)
                if (bt_vendor_cbacks)
                {
                    bt_vendor_cbacks->epilog_cb(BT_VND_OP_RESULT_SUCCESS);
                }
#else
                hw_epilog_process();
#endif
            }
            break;
    }

    return retval;
}

/** Closes the interface */
static void cleanup( void )
{
    BTVNDDBG("cleanup");

    upio_cleanup();

    bt_vendor_cbacks = NULL;
}

// Entry point of DLib
const bt_vendor_interface_t BLUETOOTH_VENDOR_LIB_INTERFACE = {
    sizeof(bt_vendor_interface_t),
    init,
    op,
    cleanup
};

本文地址:https://blog.csdn.net/weixin_43479963/article/details/108559472