1. 程式人生 > >BCM43353 WIFI模組網路部分在TC83xx平臺的移植

BCM43353 WIFI模組網路部分在TC83xx平臺的移植

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_CHANNELSDHDCFLAGS += -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.txtPRODUCT_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,連線附件的路由器了。