全志A40i android7.1 移植wifi驱动的一般流程
一,问题分析
一般情况下移植一款模组,会涉及到驱动,firmware, hal层,方案端的适配。
下面以RTL8723ds为例详细列出移植的通用步骤。
二,移植步骤
1. 移植Wi-Fi驱动
从RTL原厂或者已经支持的其他把内核版本中获取驱动源码。
1.1. 源码重命名为rtl8723ds后放到lichee/linux-3.10/drivers/net/wireless/
1.2. 修改 wireless 目录下的 Kconfig,添加:
source "drivers/net/wireless/rtl8723ds/Kconfig"
1.3. 修改 wireless 目录下的 Makefile添加
obj-$(CONFIG_RTL8822CS) += rtl8723ds/
1.4. 修改 rtl8723ds 目录下的 Makefile
CONFIG_PLATFORM_I386_PC = n
....
CONFIG_PLATFORM_ARM_SUNxI = y
1.5. 修改 platform 文件
SDIO 接口模组 路径:
lichee/linux-3.10/drivers/net/wireless/rtl8189fs/platform/platform_ARM_SUNnI_sdio.c
可以从其他已经支持的模组中拷贝。
完成以上步骤之后,在lichee/linux-3.10/,执行 make menuconfig ARCH=arm,将所需 Wi-Fi driver 编译为模块,进行编译。
2. 添加 BT firmware
路径:android/hardware/realtek/bluetooth/firmware
把 rtl8723ds_config 和 rtl8723ds_fw 添加到此目录,Wi-Fi 不需要 Firmware。
3. 确认 dts 中模组的 GPIO pin 正确分配
lichee/linux-3.10/arch/arm/boot/dts/sun50iw1p1-perf1_v1_0.dts
wlan:wlan {compatible = "allwinner,sunxi-wlan";clocks = <&clk_losc_out>;wlan_power = "vcc-wifi";wlan_io_regulator = "vcc-wifi-io";wlan_busnum = <1>;wlan_regon = <&r_pio PL 2 1 1 1 0>;wlan_hostwake = <&r_pio PL 3 6 0 0 0>;status = "okay";};bt:bt {compatible = "allwinner,sunxi-bt";clocks = <&clk_losc_out>;bt_power = "vcc-wifi";bt_io_regulator = "vcc-wifi-io";bt_rst_n = <&r_pio PL 4 1 1 1 0>;status = "okay";};btlpm:btlpm {compatible = "allwinner,sunxi-btlpm";uart_index = <1>;bt_wake = <&r_pio PL 6 1 1 1 1>;bt_hostwake = <&r_pio PL 5 6 0 0 0>;status = "okay";};};
wifi dts配置说明:
“clocks” 用于配置使用主控提供的 32k 时钟;
“pinctrl-0” 用于配置 pin 的复用功能;
“pinctrl-names” 用于配置 pin state;
4 “wlan_busnum” 表示 WiFi 所使用的 SDIO 控制器号;
“wlan_power” 表示给 WiFi 模组供电的 regulator 名称;
“wlan_io_regulator” 表示给 WiFi 模组的 GPIO 供电的 regulator 名称;
“wlan_regon” WiFi 模组 power on 控制引脚;
“wlan_hostwake” 表示 WiFi 唤醒主控的 GPIO;
“chip_en” 表示 WiFi 模组使能引脚,硬件未使用时不配置;
“power_en” 表示模块外部的电源开关控制引脚;
bt dts配置说明:
“clocks” 用于配置使用主控提供的 32k 时钟;
“bt_power” 表示 BT 模组所用的供电,与 wlan_power 相同;
“bt_io_regulator” 表示 BT 模组所用的 IO 供电,与 wlan_regulator 相同;
“bt_rst_n” 表示 Bt 模组 power on 控制引脚;
“uart_index” 表示 BT 模组使用的硬件通信端口号;
“bt_wake” 表示 BT 模组休眠后被唤醒时的控制引脚;
“uart_index” 表示 BT 模组使用的硬件通信端口号;
“bt_hostwake” 表示 BT 模组中断输出引脚,用于唤醒 AP;
当前 SDK 中的 board.dts 已经有模组的 GPIO 配置,如果硬件连接不一样,请根据实际硬件原理图进行配置
4. 方案端适配 Wi-Fi/BT 模组加载
android/device/softwinner/a40-p1/BoardConfig.mk
# wifi and bt configuration
BOARD_WIFI_VENDOR := realtek
BOARD_USR_WIFI := rtl8723ds
WIFI_DRIVER_MODULE_PATH := "/system/vendor/modules/8723ds.ko"
WIFI_DRIVER_MODULE_NAME := "8723ds"
WIFI_DRIVER_MODULE_ARG := "ifname=wlan0 if2name=p2p0"# 2. Bluetooth Configuration
BOARD_BLUETOOTH_VENDOR := realtek
BOARD_HAVE_BLUETOOTH_NAME := rtl8723ds
“BOARD_WIFI_VENDOR := realtek” 指明使用 realtek 的 Wi-Fi 模组,常见的有 broadcom、realtek、xradio;
“BOARD_USR_WIFI” 指明具体使用的 Wi-Fi 型号;
“WIFI_DRIVER_MODULE_PATH” 表示该模组的驱动 ko 的路径;
“WIFI_DRIVER_MODULE_NAME” 表示该模组的驱动名称;realtek 的各个 Wi-Fi 的驱动名称不一样,需根据实际情况设置;
“BOARD_BLUETOOTH_VENDOR” 指明使用那个厂商的 bt 模组,常见的有 broadcom、realtek、xradio;
“BOARD_HAVE_BLUETOOTH_NAME” 指定蓝牙模组型号。
5.配置init文件
各平台通用,一般不需要修改。
android/device/softwinner/a40-common/init.sun8iw11p1.rc android/device/softwinner/a40-common/init.sun8iw11p1.rc
5.1. Wi-Fi资源和服务配置
on post-fs-data
# Create the directories used by the Wireless subsystem
mkdir /data/vendor/wifi 0771 wifi wifi
mkdir /data/vendor/wifi/wpa 0770 wifi wifi
mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
# broadcom/realtek/xradio wifi sta p2p concurrent service
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \ -O/data/vendor/wifi/wpa/sockets -dd \ -g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
interface android.hardware.wifi.supplicant@1.2::ISupplicant default
socket wpa_wlan0 dgram 660 wifi wifi
class main
disabled
oneshot```
5.2.BT资源和服务配置
on post-fs-data
# Create the directories used by the Wireless subsystem
mkdir /data/vendor/wifi 0771 wifi wifi
mkdir /data/vendor/wifi/wpa 0770 wifi wifi
mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
# broadcom/realtek/xradio wifi sta p2p concurrent service
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \ -O/data/vendor/wifi/wpa/sockets -dd \ -g@android:wpa_wlan0
interface android.hardware.wifi.supplicant@1.0::ISupplicant default
interface android.hardware.wifi.supplicant@1.1::ISupplicant default
interface android.hardware.wifi.supplicant@1.2::ISupplicant default
socket wpa_wlan0 dgram 660 wifi wifi
class main
disabled
oneshot
5.3.init.wireless.bluetooth.rc相关配置文件
on boot
# UART device
chmod 0660 ${persist.vendor.bluetooth_port}
chown bluetooth net_bt_admin ${persist.vendor.bluetooth_port} # bluetooth power up/down interface
chmod 0660 /sys/class/rfkill/rfkill0/state
chmod 0660 /sys/class/rfkill/rfkill0/type
chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/state
chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/type
write /sys/class/rfkill/rfkill0/state 0 # bluetooth MAC address programming
chown bluetooth net_bt_admin ${ro.bt.bdaddr_path}
on property:persist.vendor.bluetooth_vendor=broadcom
insmod /vendor/modules/bcm_btlpm.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=realtek
insmod /vendor/modules/rtl_btlpm.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=xradio
insmod /vendor/modules/xradio_btlpm.ko
insmod /vendor/modules/xradio_btfdi.ko
setprop vendor.driver.lpm.load 1
on property:persist.vendor.bluetooth_vendor=sprd
insmod /vendor/modules/sprdbt_tty.ko
chmod 0666 /sys/class/rfkill/rfkill1/state
chmod 0666 /sys/class/rfkill/rfkill1/type
chmod 0660 /dev/ttyBT0
chown bluetooth net_bt_admin /dev/ttyBT0
setprop vendor.driver.lpm.load 1
on property:vendor.driver.lpm.load=1
chmod 0660 /proc/bluetooth/sleep/lpm
chmod 0660 /proc/bluetooth/sleep/btwrite
chmod 0660 /proc/bluetooth/sleep/btwake
chown bluetooth net_bt_admin /proc/bluetooth/sleep/lpm
chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwrite
chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwake
on property:persist.vendor.bluetooth_vendor=realtek && property:sys.boot_completed=1
setprop persist.vendor.bluetooth.rtkcoex true
on property:persist.vendor.bluetooth_vendor=realtek && property:sys.boot_completed=0
setprop persist.vendor.bluetooth.rtkcoex false
on property:persist.vendor.bluetooth_vendor=xradio && property:vold.post_fs_data_done=1
mkdir /data/vendor/bluetooth 0771 bluetooth bluetooth
mkdir /data/vendor/bluetooth/sdd 0770 bluetooth bluetooth
mkdir /data/vendor/bluetooth/fdi 0770 bluetooth bluetooth```相关文章:
全志A40i android7.1 移植wifi驱动的一般流程
一,问题分析 一般情况下移植一款模组,会涉及到驱动,firmware, hal层,方案端的适配。 下面以RTL8723ds为例详细列出移植的通用步骤。 二,移植步骤 1. 移植Wi-Fi驱动 从RTL原厂或者已经支持的其他把内核版本中获取驱动…...
Qt——Qt绘图之QPainter的使用总结(使用paintEvent实现旋转图片效果)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...
Day83:服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现
目录 J2EE-组件Jackson-本地demo&CVE 代码执行 (CVE-2020-8840) 代码执行 (CVE-2020-35728) J2EE-组件FastJson-本地demo&CVE FastJson < 1.2.24 FastJson < 1.2.47 FastJson < 1.2.80 (利用条件比较苛刻) J2EE-组件XStream-靶场&CVE …...
【QT+QGIS跨平台编译】056:【pdal_kazhdan+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
点击查看专栏目录 文章目录 一、pdal_kazhdan介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_kazhdan介绍 pdal_kazhdan 是 PDAL(Point Data Abstraction Library)相关的 Kazhdan 算法的实现。PDAL 是一个用于处理和分析点云数据的开源库,而 Kazhdan 算法通常…...
泰坦尼克号幸存者数据分析
泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者? 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一,造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…...
Memcached 教程之 PHP 连接 Memcached 服务(十)
PHP 连接 Memcached 服务 在前面章节中我们已经介绍了如何安装 Memcached 服务,接下来我们为大家介绍 PHP 如何使用 Memcached 服务。 PHP Memcache 扩展安装 PHP Memcache 扩展包下载地址:PECL :: Package :: memcache,你可以下载最新稳定…...
【zlm】音视频流与音频流合并的设计
目录 设想一 设想二 方案三 关键技术 测试语句 测试脚本 参考文档 设想一 //开始录制_option.mp4_save_path custom_path;_option.mp4_max_second max_second;vector<Track::Ptr> mytracks getTracks();auto src MediaSource::find( DEFAULT_VHOST, "1&quo…...
typescript的工作流
先coding code.ts代码,由tsc编译code.ts生成code.js格式 npm install —save-dev lite-server 是用来安装轻量级的服务器,只是用来开发的一个服务器,真正到生产环境中时可能会使用类似于Apache的server或者汤姆猫一类的服务器,安…...
MATLAB下载与安装详细教程:从官方获取到成功启动
引言 MATLAB(MATrix LABoratory)作为一款全球知名的高级数值计算与数据分析平台,以其强大的矩阵运算能力、丰富的内置函数库以及直观易用的图形用户界面,深受科研人员、工程师和学生群体的青睐。无论是进行复杂的数学建模、信号处…...
【随笔】Git 高级篇 -- 分离 HEAD(十一)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
mac、windows 电脑安装使用多个版本的node
我们为啥要安装多个不同版本的node? 开发旧项目时,使用低版本Nodejs。开发新项目时,需使用高版本Node.js。可使用n同时安装多个版本Node.js,并切换到指定版本Node.js。 mac电脑安装 一、全局安装 npm install -g n 二、mac电脑…...
vue 浅解watch cli computed props ref vue slot axios nexttick devtools说明使用
Vue.js 是一个强大的前端框架,它提供了很多有用的功能和工具。你提到的这些特性(watch、cli、computed、props、ref、slot、axios、nextTick、devtools)在 Vue 中各自扮演着不同的角色。下面我会逐一解释这些特性如何在 Vue 中使用࿱…...
Unity自定义框架(1)-----------单例模式
前言: Unity作为一款强大的游戏开发引擎,其基础框架的设计对于项目的结构和性能有着重要的影响。其中,单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。 什么是单例模式?…...
04-自媒体文章-自动审核
自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后,开始审核文章 2 审核的主要是审核文章的内容(文本内容和图片) 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片,由于图片存储到minIO中&…...
LeetCode-热题100:763. 划分字母区间
题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…...
IDEA2023创建SpringMVC项目
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 开发环境篇 ✨特色专栏: M…...
ubuntu-server部署hive-part2-安装hadoop
参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 安装hadoop 下载上传 下载地址 https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/ 以root用…...
Python深度学习032:conda操作虚拟环境env的全部命令
文章目录 创建和管理环境环境列表和检查环境的保存与复制更新环境清理 CondaConda 是一个开源的包管理器和环境管理器,可以用于安装、运行和升级包和环境。 使用 Conda,你可以创建、导出、列出、删除和更新环境,这些环境可以包含不同版本的 Python 以及/或软件包。 下面列出…...
使用Java拓展本地开源大模型的网络搜索问答能力
背景 开源大模型通常不具备最新语料的问答能力。因此需要外部插件的拓展,目前主流的langChain框架已经集成了网络搜索的能力。但是作为一个倔强的Java程序员,还是想要用Java去实现。 注册SerpAPI Serpapi 提供了多种搜索引擎的搜索API接口。 访问 Ser…...
Mybatis——一对多关联映射
一对多关联映射 一对多关联映射有两种方式,都用到了collection元素 以购物网站中用户和订单之间的一对多关系为例 collection集合的嵌套结果映射 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import java.util.List;Data public cla…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
