BCM43353 WIFI模块网络部分在TC83xx平台的移植

news/2024/11/23 23:25:24/

1、LK控制管脚配置和硬件说明
BCM43353模块依赖于SDIO接口传输,主要连接到SDIO2上。控制端口为WL_REG_ON使能管脚,WL2NAV_HOST_WAKE唤醒中断管脚以及NAV2BT_WL_PWR_EN蓝牙和WIFI模块总的上电管脚。控制管脚与主芯片之间连接如下:
#define NAV2BT_WL_PWR_EN   TCC_GPC(8) //output 
#define  NAV2WL_REG_ON    TCC_GPC(10) //output 
#define WL2NAV_HOST_WAKE   TCC_GPC(11) //output
电路连接如下:

模块在WIFI模式下正常工作条件是:
 NAV2BT_WL_PWR_EN管脚常为高,NAV2WL_REG_ON为高工作,为低不工作。WL2NAV_HOST_WAKE唤醒管脚为高电平触发,并且需要输入上啦。
首先配置管脚的初始化状态,修改:
android/bootable/bootloader/lk/target/tcc893x/gpio.c文件,如下:

android/bootable/bootloader/lk/target/tcc893x/gpio.c文件,如下:
struct gpio_cfg TCC8930_GPC_init_tbl[] = {………………………………………………………..
………………………………………………………………………
{ TCC_GPC(8)  ,GPIO_FN0 , GPIO_OUTPUT|GPIO_HIGH ,GPIO_PULLDISABLE},
{ TCC_GPC(10) ,GPIO_FN0 , GPIO_OUTPUT|GPIO_LOW,GPIO_PULLDISABLE },
{TCC_GPC(11) ,GPIO_FN0 , GPIO_INPUT, GPIO_PULLUP}, //WL_HOST_WAKE

2、内核的移植
2.1 GPIO控制部分移植
修改GPIO内核配置文件kernel/arch/arm/mach-tcc893x/include/mach/gpio.h,如下:

#define NAV2BT_WL_PWR_EN TCC_GPC(8) //output 
#define NAV2WL_REG_ON TCC_GPC(10) //output 
#define WL2NAV_HOST_WAKE TCC_GPC(11) //output

2.2 BCM43353 WIFI模块平台驱动部分移植
    将供应商提供的平台驱动文件拷贝到android/kernel/arch/arm/mach-tcc893x/ 目录下,重新命名为board-tcc893x-wifi_bcm43353.c,修改
android/kernel/arch/arm/mach-tcc893x/board-tcc893x-wifi_bcm43353.c,主要添加模块的上电时序以及修改唤醒管脚中断触发方式,如下:
添加上电时序:

//管脚定义
#define WIFI_BT_POWER     NAV2BT_WL_PWR_EN//WL_PWR_ON //TCC_GPC(8)  
#define WIFI_GPIO_POWER  NAV2WL_REG_ON//WL_REG_ON //TCC_GPC(10)
#define WIFI_GPIO_HOSTWAKE   WL2NAV_HOST_WAKE //TCC_GPC(11)
//唤醒中断管脚定义
#define BCM43353_INT_IRQ    INT_EINT5     //GPIO_C[11] EXTINT_GPIOC_11 =135
#define BCM43353_GPIO_AS_INT(pin)       do{\
            tcc_gpio_config(pin, GPIO_FN(0));\
            gpio_direction_input(pin);\
            tcc_gpio_config_ext_intr(BCM43353_INT_IRQ, EXTINT_GPIOC_11);\
                              }while(0)    
//添加上电时序
int __init brcm_wifi_init_gpio(void)
{
    printk("brcm_wifi_init_gpio\n");
    gpio_request(WIFI_BT_POWER,"wl_pwr_on");
    if(gpio_get_value(WIFI_BT_POWER)==0){
        gpio_direction_output(WIFI_BT_POWER, 1);
        mdelay(2);
    }
    gpio_request(WIFI_GPIO_POWER,"wl_reg_on");
    gpio_direction_output(WIFI_GPIO_POWER, 0);  
    mdelay(5);
    gpio_direction_output(WIFI_GPIO_POWER, 1);  

    return 0;
}

//添加模块检测功能,这个部分在SDIO的HOST中会用到
int wifi_stat = 0;
#if defined(CONFIG_BROADCOM_WIFI)
EXPORT_SYMBOL(wifi_stat);
#endif

int bcm_wifi_set_power(int enable)
{
    int ret = 0;
    gpio_request(WIFI_GPIO_POWER,"wl_gpio_pwr_on");
    printk("%s: enable = %d\n", __func__, enable );
    if (enable) {
        ret = gpio_direction_output(WIFI_GPIO_POWER, 1);

        if (ret) {
            printk("%s: WL_REG_ON  failed to pull up (%d)\n",
                    __func__, ret);
            return ret;
        }

        /* WLAN chip to reset */
         wifi_stat = 1;  //模块插入
        mdelay(150);
        printk("%s: wifi power successed to pull up\n", __func__);
    } else {
        ret = gpio_direction_output(WIFI_GPIO_POWER, 0);
        if (ret) {
            printk("%s:  WL_REG_ON  failed to pull down (%d)\n",
                    __func__, ret);
            return ret;
        }

        /* WLAN chip down */
        mdelay(100);
         wifi_stat = 0; //模块拨出
        printk("%s: wifi power successed to pull down\n", __func__);
    }

    return ret;
}
修改中断唤醒管脚跟芯片的中断号进行关联,同时配置成输入,移除模块总的上电开关的操作:
static int __init bcm_wifi_init_gpio_mem(struct platform_device *pdev){
…………………………..
…………………………..
    if (pdev) {
        struct resource *resource = pdev->resource;                
        ret = gpio_request(WIFI_GPIO_HOSTWAKE, NULL);
        if(ret < 0)
        {
            printk("%s: can't request gpio for WL_HOSTWAKE\n", __func__);
            goto err_gpio_wakes;
        }
        else
        {
            gpio_direction_output(WIFI_GPIO_HOSTWAKE, 0);
            BCM43353_GPIO_AS_INT(WIFI_GPIO_HOSTWAKE);

        }        
        if (resource) {
            resource->start = BCM43353_INT_IRQ;//wifi_host_wake;
            resource->end   = BCM43353_INT_IRQ;//wifi_host_wake;
            printk("%s: wifi gpio irq WL_HOSTWAKE = 0x%08x\n", __func__, wifi_host_wake);

        }
    }

    if (bcm_init_wlan_mem() < 0)
        goto err_alloc_wifi_mem_array;
………………………………………
…………………………………………..

}
//模块加载的时候调用上电时序函数并且平台驱动注册时将中断注册成高电平触发,如下:
static struct resource wifi_resource[] = {
[0] = {
    .name = "bcmdhd_wlan_irq",
    .start = 0,  //assigned later
    .end   = 0,  //assigned later
    .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL | IORESOURCE_IRQ_SHAREABLE,   //高 电平触发
    },
};
void __init init_bcm_wifi(void)
{
     int ret=0;
    printk("\e[33m********** %s **********\e[0m\n", __func__);
    brcm_wifi_init_gpio(); //上电时序
#ifdef CONFIG_DHD_USE_STATIC_BUF
    bcm_wifi_init_gpio_mem(&bcm_wifi_device);
#endif
    ret=platform_device_register(&bcm_wifi_device);
    if(ret){
        printk("%s: platform_device_register failed \n", __func__);
    }else{
        printk("%s: platform_device_register successed \n", __func__);
    }
}
device_initcall_sync(init_bcm_wifi); //异步加载驱动
//EXPORT_SYMBOL(init_bcm_wifi);
详细修改请参考
android/kernel/arch/arm/mach-tcc893x/board-tcc893x-wifi_bcm43353.c 平台驱动文件。
修改Makefile文件,替换之前平台使用的WIFI platform驱动文件,修改:
Android/kernel/arch/arm/mach-tcc893x/Makefle   修改如下:
ifeq ($(CONFIG_BROADCOM_WIFI),y)
#obj-$(CONFIG_ARCH_TCC893X)      += board-tcc893x-wifi.o
obj-$(CONFIG_ARCH_TCC893X)      +=board-tcc893x-wifi_bcm43353.o

endif

2.3 BCM43353 WIFI设备驱动部分的移植
将Boardcom提供最新驱动文件4339_DHD_141_90_FW_AARD01SRC41_6_37_39_38_Supp_126_update/host/bcmdhd文件拷贝到android/kernel/drivers/net/wireless/ bcmdhd_43353 
重命名成bcmdhd_43353
修改bcmdhd_43353/Makefile
DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER            \
……………………………………………………
……………………………………………………
               -DENABLE_INSMOD_NO_FW_LOAD -DCUSTOMER_HW2 -DGET_CUSTOM_MAC_ENABLE
修改成
DHDCFLAGS += -Wall -Wstrict-prototypes -Dlinux -DLINUX -DBCMDRIVER            \
……………………………………………………
……………………………………………………
     -DCUSTOMER_HW2 -DGET_CUSTOM_MAC_ENABLE
#-DENABLE_INSMOD_NO_FW_LOA

………………………………………………..
DHDCFLAGS += -DWL_IFACE_COMB_NUM_CHANNELS
DHDCFLAGS += -DWL_ENABLE_P2P_IF   #添加WL_ENABLE_P2P_IF配置
………………………………………………
#DRIVER_TYPE ?= y
DRIVER_TYPE ?= m     #编译成模块

…………………………………………………
ifneq ($(CONFIG_BCMDHD_SDIO),)
  DHDOFILES += bcmsdh.o bcmsdh_linux.o bcmsdh_sdmmc.o bcmsdh_sdmmc_linux.o
  DHDOFILES += dhd_cdc.o dhd_wlfc.o dhd_sdio.o 
#add by zhaojr
  DHDOFILES += wl_cfgvendor.o   #将wl_cfgvendor.c编译进入模块

endif

修改bcmdhd_43353/Kconfig 文件,如下:
# add by zhaojr
config BCM4339
    tristate "BCM4339 support"
    depends on BCMDHD
#end by add

config BCMDHD_FW_PATH
    depends on BCMDHD
    string "Firmware path"
    default "/system/wifi/fw_bcmdhd.bin"
    ---help---
      Path to the firmware file.

config BCMDHD_NVRAM_PATH
    depends on BCMDHD
    string "NVRAM path"
    default "/system/wifi/bcmdhd.cal"
    ---help---
      Path to the calibration file.

修改android/kernel/drivers/net/wireless/Makefile文件,修改如下:
#obj-$(CONFIG_BCMDHD)    += bcmdhd/
obj-$(CONFIG_BCMDHD)    += bcmdhd_43353/

修改android/kernel/drivers/net/wireless/Kconfig文件,修改如下:
#source "drivers/net/wireless/bcmdhd/Kconfig"
source "drivers/net/wireless/bcmdhd_43353/Kconfig"

2.4  tcc893x的WIFI数据传输接口SDIO2的数据传输方式移植
    之前的tcc893x的WIFI使用的是TCM3800模组,WIFI的数据传输中断使用的是DATA2既作为数据传输又作为一帧数据的中断触发来使用。而我们的BCM43353模组的WIFI的数据传输使用SDIO2,一帧数据触发使用的WL_GPIO_WAKE(GPIO_GCC(8))管脚来响应中断,所以需要修改SDIO HOST的数据传输模式。
修改android/kernel/drivers/mmc/host/Kconfig
choice        
  bool "SDHC Data Transmission Methods"
  depends on MMC_TCC_SDHC
  default MMC_TCC_ADMA   //这个地方非常重要,由于这个地方的问题,查了将近1周
 #default MMC_TCC_SDMA

将自定义MMC_TCC_SDMA修改成MMC_TCC_ADMA即可。
2.5 修改整体内核的配置文件
修改android/kernel/arch/arm/configs/ tcc893x_rse2665_defconfig  如下
主要针对内核网络部分和网络设备部分:
#----------------------------
#内核网络部分的配置

CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_IPCOMP=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE_DEMUX=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_XFRM_TUNNEL=y
CONFIG_INET_TUNNEL=y
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_INET6_XFRM_TUNNEL=y
CONFIG_INET6_TUNNEL=y
CONFIG_INET6_XFRM_MODE_TRANSPORT=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y
CONFIG_INET6_XFRM_MODE_BEET=y
CONFIG_IPV6_SIT=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_MROUTE=y
CONFIG_ANDROID_PARANOID_NETWORK=y
CONFIG_NET_ACTIVITY_STATS=y
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_BROADCAST=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_TPROXY=y
CONFIG_NETFILTER_XTABLES=y

CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y

CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QTAGUID=y
CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y

CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_REJECT_SKERR=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_NF_NAT_PROTO_DCCP=y
CONFIG_NF_NAT_PROTO_GRE=y
CONFIG_NF_NAT_PROTO_UDPLITE=y
CONFIG_NF_NAT_PROTO_SCTP=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
CONFIG_NF_NAT_TFTP=y
CONFIG_NF_NAT_AMANDA=y
CONFIG_NF_NAT_PPTP=y
CONFIG_NF_NAT_H323=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y

CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_TARGET_LOG=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_REJECT_SKERR=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_L2TP=y
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=y
CONFIG_L2TP_ETH=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_U32=y

CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32

CONFIG_NET_EMATCH_U32=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_SCH_FIFO=y
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_XPS=y

CONFIG_BT=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_HIDP=y
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_CFG80211=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_WEXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
CONFIG_LIB80211_CRYPT_CCMP=y
CONFIG_LIB80211_CRYPT_TKIP=y
CONFIG_CFG80211_ALLOW_RECONNECT=y
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_MINSTREL_HT=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
CONFIG_RFKILL=y

CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_BLK_DEV_LOOP=y
CONFIG_UID_STAT=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_SG=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_CRYPT=y
CONFIG_DM_UEVENT=y
CONFIG_NETDEVICES=y
CONFIG_TUN=y
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOE=y
CONFIG_PPPOL2TP=y
CONFIG_PPPOLAC=y
CONFIG_PPPOPNS=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLHC=y

#网络设备部分的配置
#BCM43353 WIFI configure
CONFIG_WLAN=y
CONFIG_WIFI_CONTROL_FUNC=y
CONFIG_BCMDHD=m
CONFIG_BCMDHD_SDIO=y
CONFIG_BCM4339=m
CONFIG_BCMDHD_FW_PATH="/system/wifi/fw_bcmdhd.bin"
CONFIG_BCMDHD_NVRAM_PATH="/system/wifi/bcmdhd.cal"
CONFIG_DHD_USE_STATIC_BUF=y
CONFIG_HOSTAP=y
CONFIG_HOSTAP_FIRMWARE=y
具体详细配置请参考android/kernel/arch/arm/configs/ tcc893x_rse2665_defconfig文件。

修改android/kernel/nav360_config文件,主要修改了内核网络配置部分和网络设备部分,如下:
内核网络和设备网络部分的配置这里就不在详细说明,详细请看
android/kernel/nav360_config和android/kernel/ nav360_old_config_by_zhaojr_back_20160415两个文件对比进行查看。
主要修改了将SDMA修改成ADMA。如下:
CONFIG_MMC_TCC_SDMA  is not set
CONFIG_MMC_TCC_ADMA=y
CONFIG_BROADCOM_WIFI=y

 3 Android os部分的配置
针对这个部分因为telechips tcc893x平台,之前TCM3800 WIFI 模块已经成功量产了,所以针对TCM3800是OK,针对平台的特性,一般只需要移植驱动和配置相关的文件即可。目前针对Bcm43353 WIF模组同样适用。
修改: android/device/telechips/tcc893x-common/wifi/ tcm3800.mk 文件,如下:
#PRODUCT_COPY_FILES += \
#$(LOCAL_PATH)/broadcom/tcm3800/bcmdhd.ko:/system/wifi/bcmdhd.ko \
#$(LOCAL_PATH)/broadcom/tcm3800/bcmdhd_sta_ver.6.10.190.51.bin:/system/wifi/fw_bcmdhd.bin \
#$(LOCAL_PATH)/broadcom/tcm3800/bcmdhd_aps_ver.6.10.190.51.bin:/system/wifi/fw_bcmdhd_apsta.bin \
#$(LOCAL_PATH)/broadcom/tcm3800/TCM3800_V1.3.cal:/system/wifi/bcmdhd.cal \
#$(LOCAL_PATH)/broadcom/tcm3800/bcmdhd_config.txt:/system/wifi/bcmdhd_config.txt
PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/broadcom/tcm3800/bcmdhd.ko:/system/wifi/bcmdhd.ko \
    $(LOCAL_PATH)/broadcom/tcm3800/fw_bcmdhd.bin:/system/wifi/fw_bcmdhd.bin \
    $(LOCAL_PATH)/broadcom/tcm3800/fw_bcmdhd_apsta.bin:/system/wifi/fw_bcmdhd_apsta.bin \
    $(LOCAL_PATH)/broadcom/tcm3800/bcmdhd.cal:/system/wifi/bcmdhd.cal \
    $(LOCAL_PATH)/broadcom/tcm3800/fw_bcmdhd_mfg.bin:/system/wifi/fw_bcmdhd_mfg.bin    \
    $(LOCAL_PATH)/broadcom/tcm3800/bcmdhd_config.txt:/system/wifi/bcmdhd_config.txt

将android/device/telechips/tcc893x-common/wifi/tcm3800/下面的所有问题备份到
android/device/telechips/tcc893x-common/wifi/tcm3800/tcm3800
将内核编译生成的bcmdhd.ko,boardcom给的NVRAM和firmware拷贝到
android/device/telechips/tcc893x-common/wifi/tcm3800/目录下,如下:
android/device/telechips/tcc893x-common/wifi/broadcom/tcm3800/bcmdhd.cal
android/device/telechips/tcc893x-common/wifi/broadcom/tcm3800/fw_bcmdhd.bin
android/device/telechips/tcc893x-common/wifi/broadcom/tcm3800/fw_bcmdhd_apsta.bin
android/device/telechips/tcc893x-common/wifi/broadcom/tcm3800/fw_bcmdhd_mfg.bin
android/device/telechips/tcc893x-common/wifi/broadcom/tcm3800/ /bcmdhd.ko
android/device/telechips/tcc893x/common/wifi/broadcom/tcm3800 /bcmdhd_config.txt

其它部分不需要修改,移植完成之后,编译并下载boot.bin和system.img两个文件,系统启动后就可以点击设置菜单单开WIFI,连接附件的路由器了。


http://www.ppmy.cn/news/495289.html

相关文章

The kernel appears to have died. It will restart automatically.

参考&#xff1a;https://github.com/tensorflow/tensorflow/issues/9829 出现这个错误的原因有很多&#xff0c;我这里只分享我遇到的这个错误原因。 在Jupyter中运行如下代码&#xff0c;报 kernel died 的错误。 # 加载模型 new_model load_model(./saved_models/my_mode…

docker安装detectron2

官方源码 I. docker安装 Ubuntu16.04 docker安装 II.nvidia-docker 安装Nvidia Docker2 III. 搭建环境 创建 docker 镜像 sudo docker build -t <image_name>:<tag> .&#xff08;请注意末尾的点号&#xff0c;代表当前目录&#xff09; 本人创建如下&#…

mmdetection安装和测试

第一步&#xff1a; 使用anaconda创建一个虚拟环境使其与系统主环境相隔离 conda create -n open-mmlab python3.7 -y source activate open-mmlab#激活刚才创建的open-mmlab虚拟环境 第二步&#xff1a; 在open-mmlab虚拟环境中安装pytorch 2.1 安装之前需要将清华的pyto…

ubuntu16.04安装搜狗输入法

第一步上搜狗输入法官网下载deb安装包 进入安装包路径&#xff0c;在终端输入 sudo dpkg -i *.deb #其中把*替换成你输入法安装包名字 执行效果如下&#xff1a; ~/Downloads$ sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb [sudo] password for bubble: Selecting previ…

ubuntu matplotlib解决中文显示问题

步骤一 1.1 定位mpl-data所在位置&#xff0c;如下所示&#xff1a; bubbleXPS-8930:~$ locate -b \mpl-data /home/bubble/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data /home/bubble/anaconda3/pkgs/matplotlib-2.2.2-py36h0e671d2_1/lib/python3.6/site-pa…

Ubuntu 16.04安装anaconda3+pycharm+tensorflow-gpu详细教程

首先下载anaconda3镜像 清华大学开源软件镜像站下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下拉到最低端选择Linux&#xff0c;选择最新版&#xff08;32/64位&#xff09;下载。 在Terminal中执行以下命令&#xff1a; bash Anaconda3-…

mmdetection v2.0在ubuntu16.04服务器上的配置和训练自己的voc数据集

一.mmdetection环境搭建 系统环境&#xff1a; ubuntu16.04 cuda&#xff1a;10.0&#xff08;此处一定注意检查自己的环境&#xff0c;关乎到后面cudatoolkit版本的安装问题&#xff09; 默认大家都已经安装好 anaconda3 了&#xff0c;如果没有安装的&#xff0c;可以去官网…

mmdetection训练自己的数据集

一、准备数据集 准备自己的数据 mmdetection支持coco格式和voc格式的数据集&#xff0c;下面将分别介绍这两种数据集的使用方式 coco数据集 官方推荐coco数据集按照以下的目录形式存储&#xff0c;以coco2017数据集为例 mmdetection ├── mmdet ├── tools ├── con…