AP6236 WiFi模块调试记录

本文记录了在RK3368平台上调试AP6236 WiFi模块的过程,包括内核驱动移植、Android系统适配以及遇到的蓝牙打不开、WiFi自动关闭、sdmmc通信错误、32k晶振问题和WiFi信号差等五大问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AP6236 WiFi模块调试记录

Platform: RK3368
OS: Android 6.0
Kernel: 3.10.0

内核驱动移植

1. 更新驱动

先将供应商给的最新wifi驱动更新到kernel中:drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/

1.1 修改驱动代码,适配rk平台

修改Makefile中的WiFi配置:

diff --git a/Makefile b/Makefile
index 5beada4..fdd9e22 100644
--- a/Makefile
+++ b/Makefile
@@ -2,16 +2,17 @@
 # 1. WL_IFACE_COMB_NUM_CHANNELS must be added if Android version is 4.4 with Kernel version 3.0~3.4,
 #    otherwise please remove it.
 
-#CONFIG_BCMDHD := m
-#CONFIG_BCMDHD_SDIO := y
+CONFIG_BCMDHD := y
+CONFIG_BCMDHD_SDIO := y
 #CONFIG_BCMDHD_PCIE := y
 #CONFIG_BCMDHD_USB := y
 
-#CONFIG_BCMDHD_OOB := y
+CONFIG_BCMDHD_OOB := y
 #CONFIG_BCMDHD_CUSB := y
 CONFIG_BCMDHD_PROPTXSTATUS := y
+#CONFIG_BCMDHD_AG := y
 #CONFIG_DHD_USE_STATIC_BUF := y
-#CONFIG_VTS_SUPPORT := y
+CONFIG_VTS_SUPPORT := y
 
 CONFIG_MACH_PLATFORM := y
 #CONFIG_BCMDHD_DTS := y
@@ -25,7 +26,9 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER                 \
        -DMULTIPLE_SUPPLICANT -DTSQ_MULTIPLIER -DMFP                          \
        -DWL_EXT_IAPSTA                                                       \
        -DENABLE_INSMOD_NO_FW_LOAD                                            \
-       -Idrivers/net/wireless/bcmdhd -Idrivers/net/wireless/bcmdhd/include
+       -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd                    \
+       -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include
+
 
 DHDOFILES = aiutils.o siutils.o sbutils.o bcmutils.o bcmwifi_channels.o   \
        dhd_linux.o dhd_linux_platdev.o dhd_linux_sched.o dhd_pno.o           \

修改dhd_gpio.c添加WiFi模块电源控制和sdio卡检测:

diff --git a/dhd_gpio.c b/dhd_gpio.c
index 0819d0c..25a44ba 100644
--- a/dhd_gpio.c
+++ b/dhd_gpio.c
@@ -2,6 +2,7 @@
 #include <osl.h>
 #include <dhd_linux.h>
 #include <linux/gpio.h>
+#include <linux/rfkill-wlan.h>
 
 #ifdef CUSTOMER_HW_PLATFORM
 #include <plat/sdhci.h>
@@ -64,6 +65,7 @@ dhd_wlan_set_power(int on
                }
 #endif /* BCMPCIE */
 #endif /* BUS_POWER_RESTORE */
+               rockchip_wifi_power(1);
                /* Lets customer power to get stable */
                mdelay(100);
        } else {
@@ -92,6 +94,7 @@ dhd_wlan_set_power(int on
                                return -EIO;
                        }
                }
+               rockchip_wifi_power(0);
        }
 
        return err;
@@ -116,6 +119,7 @@ static int dhd_wlan_set_carddetect(int present)
 #elif defined(BCMPCIE)
                printf("======== Card detection to detect PCIE card! ========\n");
 #endif
+               rockchip_wifi_set_carddetect(1);
        } else {
 #if defined(BCMSDIO)
                printf("======== Card detection to remove SDIO card! ========\n");
@@ -125,6 +129,7 @@ static int dhd_wlan_set_carddetect(int present)
 #elif defined(BCMPCIE)
                printf("======== Card detection to remove PCIE card! ========\n");
 #endif
+               rockchip_wifi_set_carddetect(0);
        }
 #endif /* BUS_POWER_RESTORE */
 
@@ -157,6 +162,7 @@ static int dhd_wlan_get_mac_addr(unsigned char *buf)
                bcopy(macpad, buf+6, sizeof(macpad));
        }
 #endif /* EXAMPLE_GET_MAC_VER2 */
+       err = rockchip_wifi_mac_addr(buf);
 
        return err;
 }

修改dhd_linux.c添加WiFi驱动模块加载入口和指定WiFi固件路径:

diff --git a/dhd_linux.c b/dhd_linux.c
index 936a6c8..c63333f 100644
--- a/dhd_linux.c
+++ b/dhd_linux.c
@@ -481,7 +481,7 @@ static int is_reboot = 0;
 dhd_pub_t      *g_dhd_pub = NULL;
 #endif /* defined (BT_OVER_SDIO) */
 
-atomic_t exit_in_progress = ATOMIC_INIT(0);
+static atomic_t exit_in_progress = ATOMIC_INIT(0);
 
 typedef struct dhd_if_event {
        struct list_head        list;
@@ -9915,6 +9915,8 @@ int dhd_bus_get_fw_mode(dhd_pub_t *dhdp)
        return dhd_get_fw_mode(dhdp->info);
 }
 
+extern int rkwifi_set_firmware(char *fw, char *nvram);
+
 bool dhd_update_fw_nv_path(dhd_info_t *dhdinfo)
 {
        int fw_len;
@@ -9925,6 +9927,8 @@
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值