• 基于全志T133-s3(Tina Linux)移植wifi(rtl8723d)驱动


    1.硬件电路

    在这里插入图片描述
    在这里插入图片描述

    2.软件准备

    2.1.驱动代码

    1)首先,我们需要获得驱动程序,一般可以找厂家获得,也可以在 Github Gitee 上找到。

    在这里插入图片描述
    2)检查 platform 文件夹内是否有 platform_ARM_SUNxI_sdio.c 这个接口源码。

    在这里插入图片描述
    如果没有,需要适配到 Tina 平台。主要修改的地方是调用Tina平台提供的上下电,扫卡函数,SDIO 驱动等等。工作量较大建议请专业人士进行移植

    3)然后将驱动文件复制进 lichee/linux-5.4/drivers/net/wireless 文件夹内,其实就是内核目录下的路径

    在这里插入图片描述

    2.2.修改脚本

    1)编辑 lichee/linux-5.4/drivers/net/wireless/rtl8723ds/Makefile 找到 Platform Related 设置区域,将其他选项全部关闭,只保留 CONFIG_PLATFORM_ARM_SUNxI = y 是开启的。
    在这里插入图片描述

    2)同时找到 Interface 区域,只启用 CONFIG_SDIO_HCI

    在这里插入图片描述
    3)接下来编辑 lichee/linux-5.4/drivers/net/wireless/Kconfig ,增加引索

    source "drivers/net/wireless/rtl8723ds/Kconfig"
    

    在这里插入图片描述
    4)再打开 lichee/linux-5.4/drivers/net/wireless/rtl8723ds/Kconfig 查看对应的 config 符号,可以看到是 RTL8723DS
    在这里插入图片描述
    5)就可以在 lichee/linux-5.4/drivers/net/wireless/Makefile 里增加编译文件夹

    obj-$(CONFIG_RTL8723DS)    += rtl8723ds/
    

    在这里插入图片描述

    2.3.添加驱动

    1)配置完成,就可以在 make kernel_menuconfig 里找到这个选项了,将其编译为模块。

    在这里插入图片描述
    2)Tina 适配对于wifi固件
    上面完成了内核驱动方面的配置,接下来是配置 Tina Linux 侧。由于部分 Wi-Fi 驱动需要文件系统挂载提供固件,所以需要在 Tina Linux 配置完成打包上面编译的驱动模块与固件,同时也要配置自动加载驱动的脚本才能使系统正常运行。

    在这之前,我们先检查一下是否提供了 RTL8723DS 的固件,可以在 make menuconfig s搜索是否有 8723DS 的固件存在。没有就自己添加。
    在这里插入图片描述
    可以看到,Tina Linux 提供了 RTL8723DS 的固件,名叫 r8723ds-firmware 可以进行下一步了。

    3)修改 Tina-Linux/target/allwinner/t113-evb1/modules.mk 文件(这里的路径根据自己的找到就行),增加 RTL8723DS 这个 kmod 选项。注意,DEPENDS 里包含的固件名称就是上面查找得到的名称。

    define KernelPackage/net-rtl8723ds
      SUBMENU:=$(WIRELESS_MENU)
      TITLE:=RTL8723DS support (staging)
      DEPENDS:= +r8723ds-firmware +@IPV6 +@USES_REALTEK
      FILES:=$(LINUX_DIR)/drivers/net/wireless/rtl8723ds/8723ds.ko
      AUTOLOAD:=$(call AutoProbe,8723ds)
    endef
    
    define KernelPackage/net-rtl8723ds/description
      Kernel modules for RealTek RTL8723DS support
    endef
    
    $(eval $(call KernelPackage,net-rtl8723ds))
    
    

    在这里插入图片描述
    4)现在 make menuconfig 进入 Tina Linux 的配置界面,就可以在 Kernel modules > Wireless Drivers 中找到 <*> kmod-net-rtl8723ds… RTL8723DS support (staging),勾选他。

    在这里插入图片描述
    6)最后,还需要启用自动加载驱动的功能,位于 Tina-Linux/target/allwinner/t113-evb1/busybox-init-base-files/etc/init.d/rc.modules ,别忘了注释不需要的驱动。

    在这里插入图片描述

    2.4.设备树适配

    与上文相同,注意启用 SDC1 节点与 wlan0节点,配置wlan_busnum、wlan_regon、wlan_hostwake 。由于这里使用的是同款开发板所以不做再次说明,这里直接使用下面的内核设备树。

    rfkill: rfkill@0 {
    		compatible    = "allwinner,sunxi-rfkill";
    		chip_en;
    		power_en;
    		pinctrl-0 = <&wlan_pins_a>;
    		pinctrl-names = "default";
    		status        = "okay";
    
    		wlan: wlan@0 {
    			compatible    = "allwinner,sunxi-wlan";
    			clock-names = "32k-fanout1";
    			clocks = <&ccu CLK_FANOUT1_OUT>;
    			wlan_busnum    = <0x1>;
    			wlan_regon    = <&pio PG 12 GPIO_ACTIVE_HIGH>;
    			wlan_hostwake  = <&pio PG 10 GPIO_ACTIVE_HIGH>;
    			/*wlan_power    = "VCC-3V3";*/
    			/*wlan_power_vol = <3300000>;*/
    			/*interrupt-parent = <&pio>;
    			interrupts = < PG 10 IRQ_TYPE_LEVEL_HIGH>;*/
    			wakeup-source;
    
    		};
    

    最后编译烧录即可。

    3、测试wifi

    1)使用ifconfig可以看到wlan0

    在这里插入图片描述
    2)这里需要注意一个问题,由于wpa_supplicant.conf这个文件没有我们的路由器名称和密码,所以需要自己添加一下,路径再Tina-Linux/package/allwinner/wifimanager/files/wpa_supplicant.conf

    打开wpa_supplicant.conf

    ctrl_interface=/etc/wifi/sockets
    #disable_scan_offload=1
    #update_config=1
    #wowlan_triggers=any
    
    #---------------添加这部分,记得把此注释删掉-----------------
    ap_scan=1					
            network={
            ssid="xxx"
            psk="xxxxxxxxx"
            }
    
    

    3)重启一下即可,然后重启之后,动态分配一下ip,使用以下命令

    udhcpc -i wlan0
    

    4)最后可以是ping一下网络,

    ping www.baidu.com
    

    在这里插入图片描述

    5)注意这里内核会打印一些debug信息,这是wifi驱动里面打开的,自己去驱动代码里面关闭即可。我这里就直接放出来,主要是更改Makefile文件里面的宏控制。

    在这里插入图片描述
    6)如果再使用这个wifi模块的过程中出现以下情况,如图所示:
    在这里插入图片描述
    出现这种问题,只要在驱动代码的os_dep/linux/ioctl_cfg80211.c的rtw_cfg80211_ch_switch_notify这个函数中对结构体struct cfg80211_chan_def_chdef进行初始化就可以了。

    在这里插入图片描述

  • 相关阅读:
    axios拦截器的使用?
    DA14531在三星手机手写笔的应用让我打开眼镜
    BERT预训练模型学习笔记
    pytorch 手写数字识别1
    libc.so.6: version `GLIBC_2.25‘ not found
    Linux Ubuntu安装配置教程
    JSON概念、基础语法及数据和对象转换
    单片机-如何让数码管动态显示
    k8s-服务网格实战-配置 Mesh(灰度发布)
    Flutter和iOS混编详解
  • 原文地址:https://blog.csdn.net/qq_39721016/article/details/126955123