瑞芯微Rockchip开发者社区
直播中

微风挽雨

9年用户 921经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术
私信 关注
[问答]

怎样将rtl8723ds的模块移植到rk3288 android5.1上去呢

怎样将rtl8723ds的模块移植到rk3288 android5.1上去呢?有哪些移植步骤?
如何对AP6XXX模块与RTL8723DS模块培训?

回帖(4)

陈建华

2022-2-10 10:28:37
一、rk32.188 android5 rtl8723ds888Android7.1的SDK集成了RTL8723DS的模块集成了RTL8723DS的模块,并且没有android5.1并集成8723ds的模块,介绍下rtl8723ds的模块rk3 到 rk38888 上的移植步骤,2.1RTL8723DS模块将RTL88723DS模块上的移植执行。
1.RTL88723DS模块将rtl88723DS.zip与Android723DS.zip /net/wireless/rockchip_wlan/目录
2.打上补丁下载

diff --git a/device/common/bluetooth/libbt_rtk8723bs/src/hardware.c b/device/common/bluetooth/libbt_rtk8723bs/src/hardware.c
index 972ab74bf2..45bd7083d5 100755
--- a/device/common/bluetooth/libbt_rtk8723bs/src/hardware.c
+++ b/device/common/bluetooth/libbt_rtk8723bs/src/hardware.c
@@ -126,6 +126,7 @@ struct rtk_bt_vendor_config{
#define ROM_LMP_8723cs_cg        0x8705//0x8703+2
#define ROM_LMP_8723cs_vf         0x8706//0x8703+3
#define ROM_LMP_8822b               0x8822
+#define ROM_LMP_8723ds              0x8723

#define CHIP_8723CS_CG 3
#define CHIP_8723CS_VF 4
@@ -261,6 +262,7 @@ uint16_t project_id[]=
     ROM_LMP_8703b,
     ROM_LMP_8723c,
     ROM_LMP_8822b,
+        ROM_LMP_8723ds,
        ROM_LMP_NONE
};

@@ -282,6 +284,7 @@ static patch_info patch_table[] = {
     { ROM_LMP_8723cs_xx, "rtl8723cs_xx_fw", "rtl8723cs_xx_config"},     //rtl8723cs_xx
     { ROM_LMP_8723cs_cg, "rtl8723cs_cg_fw", "rtl8723cs_cg_config"},     //rtl8723cs_cg
     { ROM_LMP_8723cs_vf,  "rtl8723cs_vf_fw", "rtl8723cs_vf_config"},     //rtl8723cs_vf
+    { ROM_LMP_8723ds,     "rtl8723ds_fw", "rtl8723ds_config"},
     /* add entries here*/

     { ROM_LMP_NONE,  "rtl_none_fw", "rtl_none_config"}
@@ -626,7 +629,7 @@ uint32_t rtk_get_bt_config(unsigned char** config_buf,
     size_t filelen;
     int fd;
     FILE* file = NULL;
-
+    ALOGD("LOUHN: bt_chip_type=%s",bt_chip_type);
     if (strcmp(bt_chip_type, "RTL8723BS_VQ0") == 0)
         sprintf(bt_config_file_name, BT_CONFIG_DIRECTORY, "rtl8723bs_VQ0_config");
     else
diff --git a/external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c b/external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c
index 8feaee265b..a04c195a1a 100755
--- a/external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c
+++ b/external/bluetooth/bluedroid/hci/src/bt_hci_bdroid.c
@@ -344,7 +344,7 @@ static int init(const bt_hc_callbacks_t* p_cb, unsigned char *local_bdaddr)
#else//if defined HCI_USE_RTK_H5
     extern int check_wifi_chip_type_string(char *type);
        check_wifi_chip_type_string(type);
-        if (!strncmp(type, "RTL8723BS", 9)) {
+        if (!strncmp(type, "RTL8723BS", 9) || !strncmp(type, "RTL8723DS", 9)) {
            extern tHCI_IF hci_h5_func_table;
            p_hci_if = &hci_h5_func_table;
            ALOGD("%s, use hci h5", __func__);
diff --git a/external/bluetooth/bluedroid/hci/src/vendor.c b/external/bluetooth/bluedroid/hci/src/vendor.c
index 4d09574243..ff2ae9f005 100755
--- a/external/bluetooth/bluedroid/hci/src/vendor.c
+++ b/external/bluetooth/bluedroid/hci/src/vendor.c
@@ -65,7 +65,7 @@ bool vendor_open(const uint8_t *local_bdaddr) {

     extern int check_wifi_chip_type_string(char *type);
     check_wifi_chip_type_string(type);
-    if (!strncmp(type, "RTL8723BS", 9)) {
+    if (!strncmp(type, "RTL8723BS", 9) || !strncmp(type, "RTL8723DS", 9)) {
         strcpy(vendor_so, "libbt-vendor-rtl8723bs.so");
     } else if (!strcmp(type, "RTL8723BU")) {
         strcpy(vendor_so, "libbt-vendor-rtl8723bu.so");
diff --git a/external/bluetooth_rtk/bluedroid/hci/src/bt_hci_bdroid.c b/external/bluetooth_rtk/bluedroid/hci/src/bt_hci_bdroid.c
index a7ac86e005..71a7ee0ce9 100755
--- a/external/bluetooth_rtk/bluedroid/hci/src/bt_hci_bdroid.c
+++ b/external/bluetooth_rtk/bluedroid/hci/src/bt_hci_bdroid.c
@@ -344,8 +344,10 @@ static int init(const bt_hc_callbacks_t* p_cb, unsigned char *local_bdaddr)
#else//if defined HCI_USE_RTK_H5
     extern int check_wifi_chip_type_string(char *type);
        check_wifi_chip_type_string(type);
+        ALOGD("LOUHN:in hci type=%s",type);
        if (!strncmp(type, "RTL8723BS", 9) ||
-            !strncmp(type, "RTL8723CS", 9)) {
+            !strncmp(type, "RTL8723CS", 9) ||
+            !strncmp(type, "RTL8723DS", 9)) {
            extern tHCI_IF hci_h5_func_table;
            p_hci_if = &hci_h5_func_table;
            ALOGD("%s, use hci h5", __func__);
diff --git a/external/bluetooth_rtk/bluedroid/hci/src/vendor.c b/external/bluetooth_rtk/bluedroid/hci/src/vendor.c
index e440fcc3e8..546056d1c8 100755
--- a/external/bluetooth_rtk/bluedroid/hci/src/vendor.c
+++ b/external/bluetooth_rtk/bluedroid/hci/src/vendor.c
@@ -65,8 +65,10 @@ bool vendor_open(const uint8_t *local_bdaddr) {

     extern int check_wifi_chip_type_string(char *type);
     check_wifi_chip_type_string(type);
+    ALOGD("LOUHN:type=%s",type);
     if (!strncmp(type, "RTL8723BS", 9) ||
-        !strncmp(type, "RTL8723CS", 9)) {
+        !strncmp(type, "RTL8723CS", 9) ||
+        !strncmp(type, "RTL8723DS", 9)) {
         strcpy(vendor_so, "libbt-vendor-rtl8723bs.so");
     } else if (!strncmp(&type[7], "BU", 2) || // like RTL8723AU/BU RTL8811AU
               !strncmp(&type[7], "AU", 2)) {
diff --git a/kernel/arch/arm/boot/dts/rk3288-box.dts b/kernel/arch/arm/boot/dts/rk3288-box.dts
index 63537738d9..9347af57a8 100644
--- a/kernel/arch/arm/boot/dts/rk3288-box.dts
+++ b/kernel/arch/arm/boot/dts/rk3288-box.dts
@@ -57,7 +57,7 @@
        * esp8089 ==> esp8089;
        * other   ==> for other wifi;
        */
-        wifi_chip_type = "ap6256";
+        wifi_chip_type = "rtl8723ds";
        sdio_vref = <3300>; //1800mv or 3300mv

        //keep_wifi_power_on;
diff --git a/kernel/arch/arm/configs/hzmct_defconfig b/kernel/arch/arm/configs/hzmct_defconfig
index 433b1941f2..ea5a92615d 100644
--- a/kernel/arch/arm/configs/hzmct_defconfig
+++ b/kernel/arch/arm/configs/hzmct_defconfig
@@ -1424,7 +1424,7 @@ CONFIG_WLAN=y
CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=y
CONFIG_RTL_WIRELESS_SOLUTION=y
# CONFIG_RTL_WIFI_NONE is not set
-CONFIG_RTL8188EU=y
+# CONFIG_RTL8188EU is not set
# CONFIG_RTL8189ES is not set
# CONFIG_RTL8192CU is not set
# CONFIG_RTL8192DU is not set
@@ -1433,6 +1433,7 @@ CONFIG_RTL8188EU=y
# CONFIG_RTL8723BS is not set
# CONFIG_RTL8723BS_VQ0 is not set
# CONFIG_RTL8812AU is not set
+CONFIG_RTL8723DS=y
CONFIG_ESP8089=y
CONFIG_RKWIFI=y
# CONFIG_BCM4330 is not set
diff --git a/kernel/drivers/net/wireless/Kconfig b/kernel/drivers/net/wireless/Kconfig
index 544aa86f0d..813cc33591 100755
--- a/kernel/drivers/net/wireless/Kconfig
+++ b/kernel/drivers/net/wireless/Kconfig
@@ -53,6 +53,7 @@ source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bs/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bs-vq0/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8812au/Kconfig"
+source "drivers/net/wireless/rockchip_wlan/rtl8723DS/Kconfig"
endchoice
endif

diff --git a/kernel/drivers/net/wireless/Makefile b/kernel/drivers/net/wireless/Makefile
index fb61bb0007..fdc79beba3 100755
--- a/kernel/drivers/net/wireless/Makefile
+++ b/kernel/drivers/net/wireless/Makefile
@@ -11,5 +11,6 @@ obj-$(CONFIG_RTL8723BU)               += rockchip_wlan/rtl8723bu/
obj-$(CONFIG_RTL8812AU)               += rockchip_wlan/rtl8812au/
obj-$(CONFIG_RKWIFI)           += rockchip_wlan/rkwifi/
obj-$(CONFIG_RTL8723BS)        += rockchip_wlan/rtl8723bs/
+obj-$(CONFIG_RTL8723DS)        += rockchip_wlan/rtl8723DS/
obj-$(CONFIG_RTL8723BS_VQ0)    += rockchip_wlan/rtl8723bs-vq0/
obj-$(CONFIG_ESP8089)   += rockchip_wlan/esp8089/
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c b/kernel/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c
index f90f6c842e..9f62c2d745 100755
--- a/kernel/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c
@@ -123,6 +123,11 @@ static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, c
            printk("Current WiFi chip is ESP8089.n");
        }

+        if(type == WIFI_RTL8723DS) {
+            count = sprintf(_buf, "%s", "RTL8723DS");
+            printk("Current WiFi chip is RTL8723DS.n");
+        }
+
     return count;
}

diff --git a/kernel/include/linux/rfkill-wlan.h b/kernel/include/linux/rfkill-wlan.h
index 8b34fafa5d..cbaa62f704 100755
--- a/kernel/include/linux/rfkill-wlan.h
+++ b/kernel/include/linux/rfkill-wlan.h
@@ -66,6 +66,7 @@ enum {
     WIFI_RTL8723AU,
     WIFI_RTL8189ES,
     WIFI_RTL8812AU,
+    WIFI_RTL8723DS,
     WIFI_RTL_SERIES,
     WIFI_ESP8089,
     TYPE_MAX,
diff --git a/kernel/net/rfkill/rfkill-wlan.c b/kernel/net/rfkill/rfkill-wlan.c
index d42163570a..8fd5a22ea5 100755
--- a/kernel/net/rfkill/rfkill-wlan.c
+++ b/kernel/net/rfkill/rfkill-wlan.c
@@ -143,7 +143,9 @@ int get_wifi_chip_type(void)
     } else if (strcmp(wifi_chip_type_string, "rtl8189es") == 0) {
         type = WIFI_RTL8189ES;
     } else if (strcmp(wifi_chip_type_string, "rtl8812au") == 0) {
-        type = WIFI_RTL8812AU;                        
+        type = WIFI_RTL8812AU;               
+    } else if (strcmp(wifi_chip_type_string, "rtl8723ds") == 0) {
+        type = WIFI_RTL8723DS;   
     } else if (strcmp(wifi_chip_type_string, "esp8089") == 0) {
         type = WIFI_ESP8089;
     } else {
diff --git a/vendor/rockchip/common/bluetooth/realtek/firmware/uart/rtlbtfw_cfg.mk b/vendor/rockchip/common/bluetooth/realtek/firmware/uart/rtlbtfw_cfg.mk
index fb9f1c5334..f81f1027ae 100755
--- a/vendor/rockchip/common/bluetooth/realtek/firmware/uart/rtlbtfw_cfg.mk
+++ b/vendor/rockchip/common/bluetooth/realtek/firmware/uart/rtlbtfw_cfg.mk
@@ -5,6 +5,8 @@ PRODUCT_COPY_FILES +=
                 $(LOCAL_PATH)/rtl8723b_config:system/etc/firmware/rtl8723bs_config
                 $(LOCAL_PATH)/rtl8723b_VQ0_fw:system/etc/firmware/rtl8723bs_VQ0_fw
                $(LOCAL_PATH)/rtl8723b_VQ0_config:system/etc/firmware/rtl8723bs_VQ0_config
+                $(LOCAL_PATH)/rtl8723ds_fw:system/etc/firmware/rtl8723ds_fw
+                $(LOCAL_PATH)/rtl8723ds_config:system/etc/firmware/rtl8723ds_config
                 $(LOCAL_PATH)/rtl8761a_fw:system/etc/firmware/rtl8761as_fw
                 $(LOCAL_PATH)/rtl8761a_config:system/etc/firmware/rtl8761as_config
                 $(LOCAL_PATH)/rtl8821a_fw:system/etc/firmware/rtl8821as_fw   
举报

陈博朴

2022-2-10 10:29:23
3.将rtl8723ds_fw rl8723d_config固件拷贝到venchip/common/blueoth/realtek/firm/uart/下


rtl8723ds_fw rtl8723ds_config固件下载
4.用libbt_rtk8723bs .zip替换device/common/bluetooth/目录下的libbt_rtk8723bs

libbt_rtk8723bs.zip替换后可能会覆盖掉替换里的部分覆盖覆盖,没,直接就行
libbt_rtk8723bs.zip:
在menuconfig里面勾选上FIG_RTL8723DS350能够rtl923ds驱动与RTL8723DS8、AP6XX28后2112此处为我的模块RTL872A模块使用AP63DS1.1.设置设置驱动为我模块形式加载1)将CONFIG= m,添加 CONFIG_WIFI_BUILD_MODULE=y ,CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=n CONFIG_RKWIFI=m CONFIG_RTL8723DS=m

2)并修改kernel/drivers/net/wireless/Kconfig文件,下将drivers/net/wireless/rockchip_wlan/rtl8723DS/Kconfig移动到endchoice endif下面,因为不这样移动rtl8723ds模块就编译不了
3)rk_wifi_config.c的合并顺序

diff --git a/kernel/arch/arm/configs/hzmct_defconfig b/kernel/arch/arm/configs/hzmct_defconfig
index e45921ab5d..b4795a40e4 100644
--- a/kernel/arch/arm/configs/hzmct_defconfig
+++ b/kernel/arch/arm/configs/hzmct_defconfig
@@ -1421,10 +1421,11 @@ CONFIG_USB_IPHETH=y
CONFIG_USB_SIERRA_NET=y
# CONFIG_USB_VL600 is not set
CONFIG_WLAN=y
-CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=y
+CONFIG_WIFI_BUILD_MODULE=y
+# CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP is not set
CONFIG_RTL_WIRELESS_SOLUTION=y
-CONFIG_RTL_WIFI_NONE=y
-# CONFIG_RTL8188EU is not set
+# CONFIG_RTL_WIFI_NONE is not set
+CONFIG_RTL8188EU=y
# CONFIG_RTL8189ES is not set
# CONFIG_RTL8192CU is not set
# CONFIG_RTL8192DU is not set
diff --git a/kernel/drivers/net/wireless/Kconfig b/kernel/drivers/net/wireless/Kconfig
index 033f184cee..686a2c245c 100755
--- a/kernel/drivers/net/wireless/Kconfig
+++ b/kernel/drivers/net/wireless/Kconfig
@@ -26,6 +26,12 @@ if WLAN
#   ---help---
#     rda5990P fm bt wifi

+config WIFI_BUILD_MODULE
+    bool "build wifi ko modules"
+    default n
+    ---help---
+      Wifi drivers will compile as ko module
+
config WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
     bool "Wifi load driver when kernel bootup"
     default y
diff --git a/kernel/drivers/net/wireless/Makefile b/kernel/drivers/net/wireless/Makefile
index fdc79beba3..345db2fd8e 100755
--- a/kernel/drivers/net/wireless/Makefile
+++ b/kernel/drivers/net/wireless/Makefile
@@ -2,6 +2,7 @@
# Makefile for the Linux Wireless network device drivers.
#
obj-y += rockchip_wlan/wifi_sys/rkwifi_sys_iface.o
+obj-y += rockchip_wlan/rkwifi/rk_wifi_config.o
obj-$(CONFIG_RTL8192CU)        += rockchip_wlan/rtl8192cu/
obj-$(CONFIG_RTL8192DU)        += rockchip_wlan/rtl8192du/
obj-$(CONFIG_RTL8188EU)        += rockchip_wlan/rtl8188eu/
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile
index ff74deb2b0..3c63b2d0a1 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/Makefile
@@ -1,7 +1,7 @@
#rkwifi packed Makefile
# (gwl)

-obj-$(CONFIG_RKWIFI) += rk_wifi_config.o
+#obj-$(CONFIG_RKWIFI) += rk_wifi_config.o
obj-$(CONFIG_RKWIFI) += bcmdhd/

.PHONY: clean

diff --git a/kernel/drivers/net/wireless/Kconfig b/kernel/drivers/net/wireless/Kconfig
index 813cc33591..033f184cee 100755
--- a/kernel/drivers/net/wireless/Kconfig
+++ b/kernel/drivers/net/wireless/Kconfig
@@ -53,10 +53,10 @@ source "drivers/net/wireless/rockchip_wlan/rtl8723bu/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bs/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8723bs-vq0/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rtl8812au/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8723DS/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8723DS/Kconfig"
endchoice
endif
-
+source "drivers/net/wireless/rockchip_wlan/rtl8723DS/Kconfig"
#source "drivers/net/wireless/rockchip_wlan/mt5931/Kconfig"
source "drivers/net/wireless/rockchip_wlan/esp8089/Kconfig"
source "drivers/net/wireless/rockchip_wlan/rkwifi/Kconfig"


2.做两个模块的wifi_legacy_1

).rk_ctrl.c.c拷贝到hardware/libhardware/wifi/
两个文件的下载地址:https
://download.csdn.net/download/Mrdeath/Mrdeath_1 ) .2.在net/rfkill/rfkill-wlan.c的prob下添加rockchip_wifi_set_carddetect(1);
     rockchip_wifi_set_carddetect(1);是用于扫卡功能,sdio通过扫卡模块的PIDVID,根据PIDVID加载驱动识别

diff --git a/kernel/net/rfkill/rfkill-wlan.c b/kernel/net/rfkill/rfkill-wlan.c
index 4d26839492..d1e8634a93 100755
--- a/kernel/net/rfkill/rfkill-wlan.c
+++ b/kernel/net/rfkill/rfkill-wlan.c
@@ -981,7 +981,7 @@ static int rfkill_wlan_probe(struct platform_device *pdev)
     }

     rockchip_wifi_voltage_select();
+    rockchip_wifi_set_carddetect(1);

3)驱动bcmdhd驱动的固定加载路径
---
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
@@ -501,8 +501,8 @@ uint dhd_download_fw_on_driverload = TRUE;
/* Definitions to provide path to the firmware and nvram
  * example nvram_path[MOD_PARAM_PATHLEN]="/projects/wlan/nvram.txt"
  */
-char firmware_path[MOD_PARAM_PATHLEN];
-char nvram_path[MOD_PARAM_PATHLEN];
+char firmware_path[MOD_PARAM_PATHLEN]="/system/etc/firmware/fw_bcm43438a1.bin";
+char nvram_path[MOD_PARAM_PATHLEN]="/system/etc/firmware/nvram_ap6212a.txt";
4)在vend/rockchip/commonwifi/下面写下目录,创建目录或SDK该目录的全部内容,最后编译将
多个项目完成以上项目

的内容,现在是完善的方案。

的修改存在一个问题,nvram_path这个路径,这个路径就是在这个地方对AP进行固定之后,以后才能有更好的系列问题,

1.在wifi上在 .c 文件中添加一个 wifi_chip_type,该函数的函数可以读取目录下的函数保存到 /data 的 wifi 类型保存到 /data 下

diff --git a/hardware/libhardware_legacy/wifi/wifi.c b/hardware/libhardware_legacy/wifi/wifi.c
index d4476c8353..4640650018 100644
--- a/hardware/libhardware_legacy/wifi/wifi.c
+++ b/hardware/libhardware_legacy/wifi/wifi.c
@@ -164,6 +164,8 @@ static const char P2P_CONFIG_FILE[]     = "/data/misc/wifi/p2p_supplicant.conf";
static const char CONTROL_IFACE_PATH[]  = "/data/misc/wifi/sockets";
static const char MODULE_FILE[]         = "/proc/modules";

+static const char RECOGNIZE_WIFI_CHIP[] = "/data/wifi_chip";
+
static const char IFNAME[]              = "IFNAME=";
#define IFNAMELEN                      (sizeof(IFNAME) - 1)
static const char WPA_EVENT_IGNORE[]    = "CTRL-EVENT-IGNORE ";
@@ -197,6 +199,8 @@ wifi_ko_file_name module_list[] =
     {"RTL8189FS", RTL8189FS_DRIVER_MODULE_PATH },
     {"SSV6051",     SSV6051_DRIVER_MODULE_PATH },
     {"ESP8089",     ESP8089_DRIVER_MODULE_PATH },

+int save_wifi_chip_type(char *type)
+{
+        int ret, found;
+        int fd;
+        char buf[64];
+
+        ret = access(RECOGNIZE_WIFI_CHIP, R_OK|W_OK);
+
+        if ((ret == 0) || (errno == EACCES)) {
+                if ((ret != 0) && (chmod(RECOGNIZE_WIFI_CHIP, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) != 0)) {
+                        ALOGE("Cannot set RW to "%s": %s", RECOGNIZE_WIFI_CHIP, strerror(errno));
+                        return -1;
+                }
+                ALOGD("%s is exitn", RECOGNIZE_WIFI_CHIP);
+                return 0;
+        }
+
+        fd = TEMP_FAILURE_RETRY(open(RECOGNIZE_WIFI_CHIP, O_CREAT|O_RDWR, 0664));
+        if (fd < 0) {
+                ALOGE("Cannot create "%s": %s", RECOGNIZE_WIFI_CHIP, strerror(errno));
+                return -1;
+        }
+        ALOGD("%s is not exit,save wifi chipn", RECOGNIZE_WIFI_CHIP);
+        strcpy(buf, type);
+        ALOGD("recognized wifi chip = %s, save to %sn", buf, RECOGNIZE_WIFI_CHIP);
+        if (TEMP_FAILURE_RETRY(write(fd, buf, strlen(buf)+1)) != strlen(buf)+1) {
+                ALOGE("Error writing "%s": %s", RECOGNIZE_WIFI_CHIP, strerror(errno));
+                close(fd);
+                return -1;
+        }
+        close(fd);
+        if (chmod(RECOGNIZE_WIFI_CHIP, 0664) < 0) {
+                ALOGE("Error changing permissions of %s to 0664: %s",RECOGNIZE_WIFI_CHIP, strerror(errno));
+                unlink(RECOGNIZE_WIFI_CHIP);
+                return -1;
+        }
+        if (chown(RECOGNIZE_WIFI_CHIP, AID_SYSTEM, AID_WIFI) < 0) {
+                ALOGE("Error changing group ownership of %s to %d: %s",RECOGNIZE_WIFI_CHIP, AID_WIFI, strerror(errno));
+                unlink(RECOGNIZE_WIFI_CHIP);
+                return -1;
+        }
+        return 1;
+}
+
+
int wifi_load_driver()
{
     char* wifi_ko_path = NULL ;
@@ -322,6 +371,7 @@ int wifi_load_driver()
     ALOGD("%s", __func__);
     if (wifi_type[0] == 0)
         check_wifi_chip_type_string(wifi_type);
+       save_wifi_chip_type(wifi_type);
     for (i=0; i< (int)(sizeof(module_list) / sizeof(module_list[0])); i++) {
         if (!strcmp(wifi_type , module_list.wifi_name)) {
             wifi_ko_path = module_list.wifi_module_path;
举报

bozai602

2022-2-10 10:29:36
2.将firmware_path和nvram_path固定的路径还原,在rockchip_wifi_init_module_rkwifi函数中去读取/data/wifi_type文本里的内容,根据读取出来的信息,去加载对应的文件


index 4670927873..7d8e85baa0 100755
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
@@ -33,6 +33,8 @@
#include
#include
#include
+#include
+#include
#ifdef ENABLE_ADAPTIVE_SCHED
#include
#endif /* ENABLE_ADAPTIVE_SCHED */
@@ -501,8 +503,8 @@ uint dhd_download_fw_on_driverload = TRUE;
/* Definitions to provide path to the firmware and nvram
  * example nvram_path[MOD_PARAM_PATHLEN]="/projects/wlan/nvram.txt"
  */
-char firmware_path[MOD_PARAM_PATHLEN]="/system/etc/firmware/fw_bcm43438a1.bin";
-char nvram_path[MOD_PARAM_PATHLEN]="/system/etc/firmware/nvram_ap6212a.txt";
+char firmware_path[MOD_PARAM_PATHLEN];
+char nvram_path[MOD_PARAM_PATHLEN];
char clm_path[MOD_PARAM_PATHLEN];
char config_path[MOD_PARAM_PATHLEN];

@@ -7855,7 +7857,12 @@ static int wifi_init_thread(void *data)
int rockchip_wifi_init_module_rkwifi(void)
{
        
-      
+    const char RECOGNIZE_WIFI_CHIP[] = "/data/wifi_chip";      
+    struct file *fp;
+    loff_t pos = 0;
+     mm_segment_t fs;
+    char wifi_type[16];
+
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
     int type = get_wifi_chip_type();
     if (type > WIFI_AP6XXX_SERIES) return 0;
@@ -7865,6 +7872,29 @@ int rockchip_wifi_init_module_rkwifi(void)
     printk("=======================================================n");
     printk("%s WiFi driver (Powered by Rockchip,Ver %s) init.n", WIFI_MODULE_NAME, RKWIFI_DRV_VERSION);

+    if((fp = filp_open(RECOGNIZE_WIFI_CHIP,O_RDONLY,0)) != NULL) {
+       fs=get_fs();
+       set_fs(KERNEL_DS);
+       vfs_read(fp,wifi_type,16,&pos);
+       set_fs(fs);
+    } else {
+       printk("LOUHN Can not read %s to get wifi type n",RECOGNIZE_WIFI_CHIP);
+    }
+    filp_close(fp,NULL);
+    printk("LOUHN Wifi type(get from %s):%sn",RECOGNIZE_WIFI_CHIP,wifi_type);
+   
+    if(!strcmp(wifi_type,"AP6212A")){
+       strcpy(firmware_path,"/system/etc/firmware/fw_bcm43438a1.bin");
+       strcpy(nvram_path,"/system/etc/firmware/nvram_ap6212a.txt");
+    } else if(!strcmp(wifi_type,"AP6256")){
+       strcpy(firmware_path,"/system/etc/firmware/fw_bcm43456c5_ag.bin");
+        strcpy(nvram_path,"/system/etc/firmware/nvram_ap6256.txt");
+    }else{
+       strcpy(firmware_path,"/system/etc/firmware/fw_bcm43438a1.bin");
+        strcpy(nvram_path,"/system/etc/firmware/nvram_ap6212a.txt");
+    }
+
+
#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
{
     struct task_struct *kthread = kthread_run(wifi_init_thread, NULL, "wifi_init_thread");
举报

jf_83071229

2022-5-4 20:31:22
问题解决了吗?
举报

更多回帖

×
20
完善资料,
赚取积分