1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、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 |
|
|
|
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; |
|
|
|
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"); |
|
|
|
问题解决了吗?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
533 浏览 0 评论
803 浏览 1 评论
700 浏览 1 评论
1926 浏览 1 评论
3171 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:19 , Processed in 0.810136 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号