当前位置: 首页 > article >正文

rk3399平台rtl8723DS Wi-Fi模块SDIO接口驱动移植与双模配置实战

1. 认识rk3399与rtl8723DS这对黄金搭档第一次拿到rk3399开发板和rtl8723DS模块时我就像拿到新玩具的孩子一样兴奋。rk3399这颗六核处理器在嵌入式领域堪称性能怪兽而rtl8723DS作为Wi-Fi蓝牙二合一模块2.4GHz频段支持加上双模共存特性简直是物联网项目的绝配。不过在实际调试中我发现官方文档对SDIO接口驱动的移植描述比较简略这也是我写下这篇实战指南的初衷。rtl8723DS采用SDIO 2.0接口与主机通信最高理论速率能达到50MHz。相比USB接口的Wi-Fi模块SDIO方案在嵌入式系统中有三大优势首先是不占用宝贵的USB接口资源其次是功耗更低实测待机电流比USB方案低30%左右最重要的是延迟表现更好在视频流传输测试中SDIO方案的抖动幅度比USB方案小了近40%。这个模块最吸引我的是它的Concurrent Mode并发模式也就是可以同时工作在AP和STA模式。想象一下这样的场景你的智能设备既能连接家里的路由器STA模式又能自己创建一个热点供手机配置AP模式。我在智能家居网关项目中就充分利用了这个特性设备出厂时默认开启AP模式供手机配网完成配置后自动切换为STA模式连接家庭路由器。2. 驱动移植前的准备工作2.1 搭建交叉编译环境工欲善其事必先利其器。我建议直接使用Buildroot来构建完整的交叉编译工具链这比单独配置gcc工具链要省心得多。以下是具体步骤# 下载buildroot稳定版 wget https://buildroot.org/downloads/buildroot-2023.02.tar.gz tar xvf buildroot-2023.02.tar.gz cd buildroot-2023.02 # 配置为rk3399平台 make rockchip_rk3399_defconfig make menuconfig在menuconfig界面需要特别注意几个选项Toolchain中确保选择aarch64架构System configuration里设置正确的serial port通常是ttyS2Kernel选项中选择使用外部Linux内核后面会单独编译配置完成后执行make这个过程可能需要1-2小时取决于你的网络和主机性能。编译完成后工具链会安装在output/host/bin目录下记得把这个路径加入PATH环境变量export PATH$PATH:$(pwd)/output/host/bin2.2 获取内核源码和驱动包rk3399的官方内核源码可以从Rockchip的GitHub仓库获取git clone https://github.com/rockchip-linux/kernel.git -b develop-5.10对于rtl8723DS驱动我强烈建议直接从Realtek官网获取最新版本当前最新是v5.8.1而不是使用开发板供应商提供的旧版本。新版驱动不仅修复了很多稳定性问题还对双模共存做了优化。我在调试时就遇到过旧版驱动在STA/AP切换时导致内核崩溃的问题升级后完美解决。驱动包解压后你会看到这些关键文件os_dep/linuxLinux平台相关代码hal/硬件抽象层Kconfig内核配置依赖文件Makefile编译主控文件3. 内核配置与驱动编译实战3.1 修改内核配置进入内核源码目录首先需要确保SDIO主机控制器驱动已经启用cd kernel make menuconfig依次进入以下菜单路径进行配置Device Drivers → MMC/SD/SDIO card support确保Rockchip SDMMC Controller编译进内核选择*打开SDIO UART Support选择MDevice Drivers → Network device support → Wireless LAN选择Wireless LAN (IEEE 802.11)选择*确保cfg80211 - wireless configuration API编译进内核选择*保存配置后需要手动修改几处代码以适应rk3399平台。编辑drivers/net/wireless/Kconfig在最后添加source drivers/net/wireless/rtl8723ds/Kconfig然后在同级目录的Makefile中增加obj-$(CONFIG_RTL8723DS) rtl8723ds/3.2 定制驱动Makefile将驱动包整个目录拷贝到drivers/net/wireless/下并重命名为rtl8723ds。然后编辑其中的Makefile找到PLATFORM_I386_PC配置项在其后添加CONFIG_PLATFORM_RK3399 y ifeq ($(CONFIG_PLATFORM_RK3399), y) EXTRA_CFLAGS -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS -DCONFIG_PLATFORM_ARM_RK3399 EXTRA_CFLAGS -DCONFIG_CONCURRENT_MODE # 关键启用双模共存 EXTRA_CFLAGS -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT ARCH : arm64 CROSS_COMPILE : aarch64-buildroot-linux-gnu- KSRC : /path/to/your/kernel MODULE_NAME : rtl8723ds endif这里特别要提醒的是-DCONFIG_CONCURRENT_MODE这个宏定义它就是实现双模共存的关键开关。很多开发者移植后只能使用单一模式往往就是因为漏掉了这个定义。3.3 编译与部署回到内核根目录执行编译make -j$(nproc) modules编译完成后你需要的驱动模块会出现在drivers/net/wireless/rtl8723ds/rtl8723ds.ko。把这个文件拷贝到开发板的/lib/modules/$(uname -r)/kernel/drivers/net/wireless/目录下然后执行depmod -a modprobe rtl8723ds如果一切顺利执行ifconfig -a应该能看到wlan0和wlan1两个网络接口。这里有个小技巧通过dmesg查看内核日志时如果看到rfkill: WiFi RF is blocked的提示需要先执行rfkill unblock all解除软锁。4. 双模共存配置详解4.1 STA模式连接路由器STA模式的配置相对简单主要使用wpa_supplicant这个工具。首先准备配置文件/etc/wpa_supplicant.confctrl_interface/var/run/wpa_supplicant update_config1 network{ ssid你的WiFi名称 psk你的WiFi密码 key_mgmtWPA-PSK priority1 }然后启动连接ifconfig wlan0 up wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf udhcpc -i wlan0这里有个实际项目中的经验在工业环境中WiFi信号可能不稳定建议增加自动重连机制。可以创建/etc/network/if-up.d/wifi_reconnect脚本#!/bin/sh if [ $IFACE wlan0 ]; then while ! ping -c1 8.8.8.8 /dev/null; do killall wpa_supplicant wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf udhcpc -i wlan0 sleep 10 done fi4.2 AP模式创建热点AP模式需要hostapd和dhcp服务器。先安装必要的工具opkg update opkg install hostapd dnsmasq配置hostapd/etc/hostapd.confinterfacewlan1 drivernl80211 ssidMyRK3399AP hw_modeg channel6 wpa2 wpa_passphrase12345678 wpa_key_mgmtWPA-PSK wpa_pairwiseTKIP rsn_pairwiseCCMPdnsmasq配置/etc/dnsmasq.confinterfacewlan1 dhcp-range192.168.50.100,192.168.50.200,255.255.255.0,24h启动服务ifconfig wlan1 192.168.50.1 up hostapd -B /etc/hostapd.conf dnsmasq -C /etc/dnsmasq.conf4.3 双模共存优化要让STA和AP模式真正协同工作还需要一些优化配置频段隔离确保两个接口使用不同的频段iw dev wlan0 set freq 2412 iw dev wlan1 set freq 2437流量转发允许AP客户端访问外网iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE echo 1 /proc/sys/net/ipv4/ip_forward负载均衡通过tc命令限制AP模式的带宽避免影响STA模式的网络质量我在实际测试中发现当STA模式进行大流量传输时AP模式的延迟会明显增加。通过以下QoS配置可以改善tc qdisc add dev wlan1 root handle 1: htb default 1 tc class add dev wlan1 parent 1: classid 1:1 htb rate 1mbps ceil 2mbps5. 常见问题排查指南5.1 驱动加载失败症状insmod rtl8723ds.ko时报错Unknown symbol in module解决方法# 检查内核配置是否开启依赖项 grep CFG80211 /boot/config-$(uname -r) # 重新生成模块依赖 depmod -a5.2 WiFi频繁断开症状STA模式连接不稳定时断时续可能原因及解决电源管理干扰iwconfig wlan0 power off路由器兼容性问题 在wpa_supplicant.conf中添加ap_scan1 bgscansimple:30:-70:3005.3 双模性能下降症状同时启用STA和AP后吞吐量大幅降低优化方案调整CTRL接口位置避免冲突# hostapd.conf中 ctrl_interface/var/run/hostapd # wpa_supplicant.conf中 ctrl_interface/var/run/wpa_supplicant使用不同的频宽iw dev wlan1 set channel 6 HT20 iw dev wlan0 set channel 11 HT406. 实际项目中的应用技巧在智能售货机项目中我们充分利用了双模特性实现了离线支付功能。当网络正常时设备通过STA模式连接云端服务器当网络中断时自动增强AP信号强度允许顾客通过设备热点完成本地支付。关键实现代码如下# 网络检测脚本 while true; do if ! ping -c1 -W2 8.8.8.8; then iw dev wlan1 set txpower 3000 # 增强AP信号 ifconfig wlan1 192.168.100.1/24 systemctl restart hostapd else iw dev wlan1 set txpower 1000 # 恢复默认功率 fi sleep 30 done另一个实用技巧是通过RSSI值自动切换模式。我们在仓库AGV小车上部署了这样的逻辑当检测到仓库AP信号强度低于-75dBm时自动启用设备自身的AP模式确保控制终端始终可以连接rssi$(iw dev wlan0 link | grep signal | awk {print $2}) if [ $rssi -lt -75 ]; then ifconfig wlan1 up hostapd /etc/hostapd.conf -B fi经过三个月的实际运行测试这套方案表现非常稳定。在200台设备规模的部署中平均无故障运行时间达到了1800小时完全满足工业级应用的要求。

相关文章:

rk3399平台rtl8723DS Wi-Fi模块SDIO接口驱动移植与双模配置实战

1. 认识rk3399与rtl8723DS这对黄金搭档 第一次拿到rk3399开发板和rtl8723DS模块时,我就像拿到新玩具的孩子一样兴奋。rk3399这颗六核处理器在嵌入式领域堪称性能怪兽,而rtl8723DS作为Wi-Fi蓝牙二合一模块,2.4GHz频段支持加上双模共存特性&…...

ubuntu命令行中文化脚本,个人用于解决“WSL中安装并使用cc-switch图形化界面乱码”问题

脚本内容:#!/bin/bashecho " WSL Ubuntu 中文环境配置脚本 "# 1. 安装中文 locale echo "[1/4] 安装中文语言包..." sudo apt update sudo apt install -y language-pack-zh-hans# 2. 生成并配置 locale echo "[2/4] 配置系统 locale...&q…...

保姆级教程:STM32+ESP8266接入机智云,从零完成数据点上报与APP控制

STM32与ESP8266接入机智云实战:从数据点定义到APP控制全解析 在智能硬件开发领域,快速实现设备联网与远程控制是许多嵌入式工程师面临的挑战。本文将手把手带您完成一个基于STM32和ESP8266的智能温湿度监测系统,从机智云平台配置到代码移植&a…...

GetQzonehistory:终极QQ空间历史说说备份指南,3步永久保存青春回忆

GetQzonehistory:终极QQ空间历史说说备份指南,3步永久保存青春回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 想要永久保存QQ空间里那些珍贵的青春记忆吗&a…...

计算机网络 之 【HTTP协议】(hppt请求与响应细节、http版本与连接管理)

目录 1.http请求 1.1. http请求方法 1.2.http请求报头 2.http响应 2.1.http响应状态码及其描述 2.2.重定向 3.http版本简介 4.http连接管理 4.1.HTTP 连接管理基础 4.2.连接类型与演进 4.2.1.短连接(HTTP/1.0 默认) 4.2.2.长连接&#xff08…...

贵州辣椒酱:一份榜单,供参考

贵州辣椒酱:一份榜单,供参考贵州是全国最大的辣椒生产基地之一。辣椒酱在当地人的日常饮食中,算是比较基础的调味品。近几年,贵州辣椒酱的市场认知度逐渐提高,品牌也多了起来。2026年,贵州省辣椒产业协会发…...

从二极管整流到晶体管可变电阻:拆解一个学生设计的AGC电路反馈环工作原理

从二极管整流到晶体管可变电阻:拆解一个学生设计的AGC电路反馈环工作原理 在模拟电路设计的浩瀚海洋中,自动增益控制(AGC)电路犹如一位隐形的调音师,默默维持着电子信号的稳定输出。对于电子爱好者和高年级本科生而言&…...

第5章,[标签 Win32] :GDI 函数调用

专栏导航 上一篇:第5章,[标签 Win32] :GDI 的结构与原理 回到目录 下一篇:无 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点&a…...

技术人的孤独:深夜Debug时的思考

——软件测试从业者的精神图鉴一、凌晨三点的独幕剧场屏幕冷光刺破黑暗,键盘敲击声在空旷办公室回荡。当世界沉入睡眠,测试工程师却深陷与Bug的无声博弈:物理空间的隔绝:无人协作的深夜,缺失即时反馈的对话机制&#x…...

mPDF实战指南:5个核心场景深度解析PHP到PDF的高效转换方案

mPDF实战指南:5个核心场景深度解析PHP到PDF的高效转换方案 【免费下载链接】mpdf PHP library generating PDF files from UTF-8 encoded HTML 项目地址: https://gitcode.com/gh_mirrors/mp/mpdf mPDF作为一款强大的PHP PDF生成库,专注于将UTF-8…...

AI Agent高薪岗位盘点:哪些方向最赚钱

第一,也是最重要的,别光看书、别光听课,你得动手干出一个东西来。 如果实在不知道咋整,可以直接抄知学堂新出的 「AILLM应用开发」 ,里面很多实战项目case,自己跟着教程做写到简历里,糊弄hr够用…...

OmenSuperHub:让你的游戏本性能飙升,告别臃肿官方软件

OmenSuperHub:让你的游戏本性能飙升,告别臃肿官方软件 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方Omen Gaming Hub的…...

AI Agent开发者如何准备秋招:时间线与重点

简单说就是你拿到offer后能不能快速上手干活儿做项目,至于学历背景,本科以上基本满足大部分公司的绝大部分职业方向门槛了。下面我直接把我当时走通的路线讲明白,你照这个节奏去做,基本不会偏。 刚开始我也是无从下手,…...

从零玩转ESP32-S3-EYE人脸检测:手把手教你基于ESP-WHO的human_face_detect示例创建自己的项目

从零构建ESP32-S3-EYE人脸检测项目:基于ESP-WHO的实战指南 当ESP32-S3-EYE开发板首次握在手中时,那颗集成了240MHz双核处理器、8MB PSRAM和OV2640摄像头的芯片,仿佛在无声地邀请开发者进入嵌入式视觉的世界。对于已经熟悉ESP-IDF开发环境的工…...

别再自己造轮子了!用这个Vue3+Java开源WMS,30分钟搞定仓库管理系统部署

30分钟极速部署:基于Vue3Java开源WMS的实战指南 当业务部门突然提出仓库管理需求时,技术团队常面临两难选择:自研周期长、成本高,而商业系统又存在预算和定制化难题。今天介绍的这套开源WMS解决方案,正是为解决这种困境…...

深入TC3xx时钟分配单元(CCU):手把手教你为CAN、GPT等外设配置精准时钟(附MCCAN 80MHz实例)

TC3xx时钟分配单元深度实战:从外设需求反推CCU配置的工程方法论 当你在TC3xx平台上调试CAN通信时,是否遇到过这样的困境:明明按照手册配置了波特率参数,但实际通信速率总是存在偏差?这往往源于时钟配置的细微误差。作为…...

Android HAL升级避坑指南:从HIDL切换到Stable AIDL时,如何正确配置FCM和SEPolicy?

Android HAL升级实战:从HIDL迁移到Stable AIDL的完整避坑手册 当Android HAL架构从HIDL向Stable AIDL演进时,系统集成工程师常会在编译部署阶段遭遇各种"隐形陷阱"。本文将从实际项目经验出发,深度解析兼容性矩阵配置、SEPolicy权限…...

某讯滑块验证码VMP架构探秘-从字节码到指令集

1. 某讯滑块验证码VMP架构初探 第一次看到某讯滑块验证码的VMP架构时,我就像发现了一个黑盒子。这个黑盒子会吃掉JavaScript代码,吐出一堆难以理解的字节码。最有趣的是,这个黑盒子还会变形——它的指令集居然会动态变化!这让我想…...

Re:思考·重建·记录 现代C++ C++11篇 (三) 深度解构:可变参数模板、类功能演进与 STL 的新版图

◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。 ⭐️现代C系列个人专栏: 插曲:现代C ⭐️Re系列专栏:我们思考 (Rethink) 我们重建 (Rebuild) 我们记录 (Record) 文章目录概要&序論一&#xff0c…...

STM32G4霍尔有感运行实战:从零配置到电流环闭环调试(附完整代码)

STM32G4霍尔传感器电机控制实战:从电流环配置到闭环调试全解析 霍尔传感器在无刷直流电机(BLDC)控制中扮演着关键角色,它通过检测转子位置为控制系统提供关键的反馈信息。STM32G4系列微控制器凭借其高性能定时器和丰富的外设资源&…...

PDS 2020.3 联合 ModelSim 仿真避坑指南:从编译库到解决 GRS_INST 报错的全流程

PDS 2020.3 联合 ModelSim 仿真实战避坑手册:从环境配置到疑难解析 在数字电路设计流程中,仿真验证环节往往决定着项目成败。当PangoDesign Suite 2020.3(简称PDS)遇上ModelSim这对黄金组合时,理论上应该实现无缝衔接的…...

深入WebRTC客户端架构:手把手解析基于libwebrtc.a与ZLMediaKit的C++推拉流核心模块设计

WebRTC客户端架构深度解析:从模块设计到实战优化 在实时音视频通信领域,WebRTC已经成为事实上的标准技术栈。不同于简单的API调用,一个工业级可用的WebRTC客户端需要精心设计的架构来应对复杂的网络环境和多样化的业务需求。本文将带您深入We…...

大营销平台 —— 抽奖前置规则过滤

一、前言上一期我们实现了权重配置的装配,这一期我们将实现抽奖业务的前置规则过滤,这里主要涉及了两个规则,第一个是黑名单(要求这些用户100积分只能抽到1积分),第二个是权重抽奖(在幸运值达到…...

Android 13手势导航卡顿?深入剖析Launcher3最近任务(Recents)的动画性能优化点

Android 13手势导航卡顿?深入剖析Launcher3最近任务(Recents)的动画性能优化点 在Android 13中,手势导航已经成为主流交互方式,但不少开发者反馈在Launcher3的最近任务(Recents)界面会出现动画卡…...

FRCRN语音增强工具实操手册:批量处理WAV文件的Shell脚本示例

FRCRN语音增强工具实操手册:批量处理WAV文件的Shell脚本示例 你是不是也遇到过这样的烦恼?手头有一堆录音文件,背景里混杂着键盘声、空调声、甚至窗外的车流声,想提取清晰的人声简直是一场耳朵的折磨。或者,你正在处理…...

海南大学交友平台开发实战 day10(后端向前端输出_前端读取数据全流程联调+日志调试落地)

海南大学交友平台开发实战 day10(后端向前端输出/前端读取数据全流程联调日志调试落地) 大家好,欢迎来到海南大学交友平台开发实战系列的第十天!在前九天的开发中,我们已完成登录注册、UI 布局、Flask 后端基础搭建、S…...

KosxPDF批量PDF盖章工具|支持骑缝章+电子章+多文件合并,高效智能文档签章解决方案

温馨提示:文末有联系方式功能亮点:全能PDF批量签章管理 KosxPDF电子文档批量骑缝章管理工具,专为高效处理PDF签章需求设计。 它不仅支持单文件或多文件批量加盖普通电子章,更可智能生成跨页连续骑缝章,确保文档完整性与…...

如何利用国内LLM对Obsidian的笔记进行分析

Win11 下用 Obsidian OpenCode 智谱 GLM 的安装与配置教程适用场景:不能方便走代理,但希望把 Obsidian 接到大模型,用于笔记整理、润色、总结与后续工具扩展。 本教程基于我们已经跑通的方案:Obsidian Agent Client OpenCode A…...

STL迭代器:核心概念与实战指南

迭代器基础概念迭代器是STL的核心组件之一,提供了一种统一的方式来访问容器中的元素。迭代器类似于指针,可以指向容器中的某个元素,并支持解引用、递增等操作。迭代器分为五种类型:输入迭代器、输出迭代器、前向迭代器、双向迭代器…...

CloudSaver 神器上手就会,一键搜全网资源 + 转存网盘!cpolar 内网穿透实验室第 731 个成功挑战

软件名称 CloudSaver(网盘资源整合 转存神器) 操作系统支持 支持群晖 NAS(全型号适配)、Windows/macOS(Docker 环境下)、Linux(Docker 部署),适配 PC 端 移动端&…...