瑞芯微 RK356x 基于Android11移植usb接口rtl8723du wifi和蓝牙一体化

开发环境

平台: 瑞芯微RK356x
操作系统:Android11
WiFi、蓝牙芯片:RTL8723DU
通讯类型:USB协议

RTL8723du介绍

Realtek RTL8723DU是一个高度集成的单片机802.11b/g/n 1T1R WLAN,和一个集成的蓝牙2.1/4.2单片机,USB 2.0多功能。它将一个WLAN MAC、一个支持1T1R的WLAN基带、BT协议栈(LM、LL和LE)、BT基带、调制解调器和WLAN/BT RF结合在单个芯片中。RTL8723DU为一个高性能集成的无线局域网和蓝牙控制器提供了一个完整的解决方案。RTL8723DU WLAN基带实现了1发射和1接收路径的正交频分多路复用(OFDM),并与802.11n规范兼容。其特征包括一个空间流传输,400ns的短保护间隔(GI),空间扩展,以及超过20MHz和40MHz带宽的传输。
在这里插入图片描述
简单来说就是这个芯片是用USB进行通信的,里面集合了wifi和蓝牙这两个功能。RTL8723DU该芯片的wifi或者bt都需要驱动程序才能运行,两者的驱动程序都是分开的,互不干扰。接下来分为wifi移植和蓝牙移植两个部分进行说明。

WiFi部分的移植

内核的配置:

1、配置支持USB设备
在这里插入图片描述

在这里插入图片描述
2、支持WIFI设备

CONFIG_HOSTAP=y
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y

在这里插入图片描述

3、支持IEEE 802.11

CONFIG_CFG80211_WEXT=y
CONFIG_MAC80211=y

在这里插入图片描述

4、将wifi的驱动程序移植到kernel上并且加载。将驱动包拷贝到kernel/drivers/net/wireless/realtek/路径上
在这里插入图片描述
5、修改当前目录下的Makefile和Kconfig文件

##Makefile
obj-$(CONFIG_RTLWIFI)		+= rtlwifi/
obj-$(CONFIG_RTL8XXXU)		+= rtl8xxxu/
obj-y		+= rtl8723du/
##Kconfig
source "drivers/net/wireless/realtek/rtl8723du/Kconfig"

6、重新编译即可
7、如果在Android系统的终端输入ifconfig -a ,看到有wlan0的wifi节点,证明wifi是成功加载上的了,但是在Android系统的界面上点击打开wifi却没有反应,这个有可能是没有把当前型号wifi的vid和pid添加到系统上。可以如下:

## frameworks\opt\net\wifi\libwifi_hal\rt_wifi_ctrl.cpp
static wifi_device supported_wifi_devices[] = {{"RTL8188EU",	"0bda:8179"},{"RTL8188EU",	"0bda:0179"},{"RTL8723BU",	"0bda:b720"},{"RTL8723BS",	"024c:b723"},{"RTL8822BS",	"024c:b822"},{"RTL8723CS",	"024c:b703"},{"RTL8723DU",	"0bda:d723"},/*添加RTL8723DU的id号进去*/{"RTL8723DS",	"024c:d723"},{"RTL8188FU",	"0bda:f179"},{"RTL8822BU",	"0bda:b82c"},{"RTL8189ES",	"024c:8179"},{"RTL8189FS",	"024c:f179"},{"RTL8192DU",	"0bda:8194"},{"RTL8812AU",	"0bda:8812"},{"RTL8821CS",	"024c:c821"},{"RTL8822CU",   "0bda:c82c"},{"RTL8822CS",   "024c:c822"},{"SSV6051",	"3030:3030"},{"ESP8089",	"6666:1111"},{"AP6354",	"02d0:4354"},{"AP6330",	"02d0:4330"},{"AP6356S",	"02d0:4356"},{"AP6335",	"02d0:4335"},{"AP6255",      "02d0:a9bf"},{"RTL8822BE",	"10ec:b822"},{"MVL88W8977",	"02df:9145"},{"SPRDWL",	"0000:0000"},
};

8、如果没有什么意外的话,应该能像手机一样正常连接wifi了。

蓝牙移植

蓝牙移植貌似比wifi移植难多了,好多文件都需要配置。

首先如果是使用RTL系列的蓝牙模块,他有特定的USB 驱动程序rtk_btusb.c进行与 Realtek 蓝牙芯片通信。

1、将rtk_btusb.c、rtk_btusb.h驱动文件放在kernel/driver/bluetooth路径下。
2、修改Makefile文件

obj-$(CONFIG_BT_RTKBTUSB)       += rtk_btusb.o

3、修改Kconfig

config BT_RTKBTUSBtristate "RTK HCI USB driver"depends on USBhelpRTK Bluetooth HCI USB driver

4、kernel中menuconfig选中该选项
在这里插入图片描述

在这里插入图片描述
内核配置方面就到这里为止,接下来是Android系统方面的配置

1、Android系统对Bluetooth的权限

##Android源码\device\rockchip\rk356x\sepolicy\sepolicy_ebook\bluetooth.te
allow bluetooth mstar_device:chr_file rw_file_perms;
##Android源码\device\rockchip\rk356x\sepolicy_ebook\file_contexts\file_contexts
/dev/rtk_btusb    u:object_r:mstar_device:s0
##Android源码\handware\realtek\rtkbt\vendor\etc\bluetooth\rtkbt.conf#Indicate USB or UART driver bluetooth
BtDeviceNode=/dev/rtkbt_dev
#BtDeviceNode=?/dev/ttyS1:H5

2、重新编译整个SDK包即可。

结论

因为上述的移植过程是基于我的SDK包移植的,有可能在其他的源码包上移植会有点问题。如果可以的话,尽量找原厂或者供应商支持。
而且上述的wifi移植是可以在linux端通用的,亲测有效。但是蓝牙在linux端不行,不知道是不是驱动程序的问题。

驱动资源

WIFI驱动:wifi驱动资源,linux,android通用
蓝牙驱动:蓝牙驱动资源,只有在android下的kernel调通过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么我要自己做一个周易软件

周易是中国数千年流传下来传统文化,在八字、六壬、六爻、奇门遁甲、梅花易数等预测占卜方面应用广泛。很多传统易学工作者或爱好者采用手工排盘的方式,进行相关的排盘。当然现代更多的易学人士采用各自习惯的排盘软件进行排盘,大大节省了排盘…

如何快速将文字转换为语音?三种方法分享给你!

在我们的日常工作和生活中,经常会遇到需要将文字转换为语音的需求。大多数人可能会选择手动阅读并录制,但这种方式既耗时又繁琐,效率并不高。今天,我将为大家介绍三种可以快速将文字转换为语音的方法,让我们一起来看看…

spring-注解开发bean

注解开发bean 使用Component定义bean 在配置文件中通过组建扫描加载bean 3.也可以通过不要配置文件,定义类,使用Configuration,来代替配置文件 基于注解定义bean 1.component,大部分的bean都可以通过这个来定义 1.1Controller&#xf…

剑指Offer-29-顺时针打印矩阵

剑指Offer-29题 题目描述:顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 **题解思路:**使用 模拟 的方法 定义四个边界变量表示当前要遍历的边界:上(top)、下(bottom)、左(left)、右(right)&am…

ActiveMQ详细入门教程系列

一、什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 消息中…

【vue学习】权限管理系统前端实现6-主页面布局

1.新建layout文件夹 新建index.vue 添加router const routes [{path: /,name: 首页,component: () > import(../layout)}, 2.登录添加跳转 loginRef.value.validate(async (valid)>{if(valid){try{let resultawait requestUtil.post("login?"qs.stringify(l…

交通 | 针对Close-Enough旅行商问题的一种分支定界算法

论文解读​:王飞龙,曲晨辉 1、问题背景 \qquad 旅行商问题(TSP)是一种众所周知的路径问题。TSP的目标是在图 G ( V , E ) G(V,E) G(V,E)中找一条以场站为起终点的最短路,访问所有客户点 V V V,同时没有子环路。令 E E E表示网络中…

达梦数据库性能分析

目录 数据库常用性能分析方法... 3 一、服务器监控... 3 1、cpu监控... 3 2、内存... 3 3、swap内存... 3 4、磁盘... 4 5、网络监测... 4 二、数据库实例监控... 6 1、v$sessions. 6 2、慢sql、阻塞、锁... 7 3、内存监控... 10 4、monitor监控工具使用及开启sql日…

Matlab画两个三维曲面在一个画布

clc;clear;close all; data xlsread(Brent等厚度.xlsx); x data(:,1) xmax max(x); xmin min(x); y data(:,2) ymax max(y); ymin min(y); z data(:,3); z1 data(:,4); N 45; …

AI绘画:StableDiffusion炼丹Lora攻略-实战萌宠图片生成

Lora攻略-实战萌宠图片生成 写在前面的话一:准备二、Lora作用1.AI模特2.炼衣服Lora3.改变画风/画面背景Lora模型究竟是什么? 三、如何炼制自己的Lora模型?四、炼丹前的准备(**下载整合包**)五、选择合适的大模型六、高…

win go vscode安装配置-智能提示

win go vscode安装配置-智能提示 0.前提 go1.17.1之后不允许go get安装库 vscode是免费的go开发工具,想要代码智能提示 go推荐go mod和go install,不推荐GOPATH了 1.安装步骤 [1] vscode安装-百度一堆 [2] go安装-从官网 https://go.dev/dl/ 下载win 6…

SpringBoot——在测试阶段验证Web表现层的接口是否正常

验证请求状态 之前我们实现了在测试环境中开启Web环境,并且在测试阶段发送虚拟请求,并看到了返回的结果,这次我们不止要看他的请求结果,还要看他的请求过程和请求状态 匹配请求状态 首先就是查看请求的状态。主要介绍的就是一个…