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

全志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驱动的一般流程

一&#xff0c;问题分析 一般情况下移植一款模组&#xff0c;会涉及到驱动&#xff0c;firmware, hal层&#xff0c;方案端的适配。 下面以RTL8723ds为例详细列出移植的通用步骤。 二&#xff0c;移植步骤 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&#xff09; 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、哪些人可能成为幸存者&#xff1f; 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一&#xff0c;造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…...

Memcached 教程之 PHP 连接 Memcached 服务(十)

PHP 连接 Memcached 服务 在前面章节中我们已经介绍了如何安装 Memcached 服务&#xff0c;接下来我们为大家介绍 PHP 如何使用 Memcached 服务。 PHP Memcache 扩展安装 PHP Memcache 扩展包下载地址&#xff1a;PECL :: Package :: memcache&#xff0c;你可以下载最新稳定…...

【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代码&#xff0c;由tsc编译code.ts生成code.js格式 npm install —save-dev lite-server 是用来安装轻量级的服务器&#xff0c;只是用来开发的一个服务器&#xff0c;真正到生产环境中时可能会使用类似于Apache的server或者汤姆猫一类的服务器&#xff0c;安…...

MATLAB下载与安装详细教程:从官方获取到成功启动

引言 MATLAB&#xff08;MATrix LABoratory&#xff09;作为一款全球知名的高级数值计算与数据分析平台&#xff0c;以其强大的矩阵运算能力、丰富的内置函数库以及直观易用的图形用户界面&#xff0c;深受科研人员、工程师和学生群体的青睐。无论是进行复杂的数学建模、信号处…...

【随笔】Git 高级篇 -- 分离 HEAD(十一)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…...

mac、windows 电脑安装使用多个版本的node

我们为啥要安装多个不同版本的node&#xff1f; 开发旧项目时&#xff0c;使用低版本Nodejs。开发新项目时&#xff0c;需使用高版本Node.js。可使用n同时安装多个版本Node.js&#xff0c;并切换到指定版本Node.js。 mac电脑安装 一、全局安装 npm install -g n 二、mac电脑…...

vue 浅解watch cli computed props ref vue slot axios nexttick devtools说明使用

Vue.js 是一个强大的前端框架&#xff0c;它提供了很多有用的功能和工具。你提到的这些特性&#xff08;watch、cli、computed、props、ref、slot、axios、nextTick、devtools&#xff09;在 Vue 中各自扮演着不同的角色。下面我会逐一解释这些特性如何在 Vue 中使用&#xff1…...

Unity自定义框架(1)-----------单例模式

前言&#xff1a; Unity作为一款强大的游戏开发引擎&#xff0c;其基础框架的设计对于项目的结构和性能有着重要的影响。其中&#xff0c;单例模式是一种常用的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 什么是单例模式&#xff1f…...

04-自媒体文章-自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…...

LeetCode-热题100:763. 划分字母区间

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…...

IDEA2023创建SpringMVC项目

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…...

ubuntu-server部署hive-part2-安装hadoop

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 安装hadoop ​​​​​​下载上传 下载地址 https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/ 以root用…...

Python深度学习032:conda操作虚拟环境env的全部命令

文章目录 创建和管理环境环境列表和检查环境的保存与复制更新环境清理 CondaConda 是一个开源的包管理器和环境管理器,可以用于安装、运行和升级包和环境。 使用 Conda,你可以创建、导出、列出、删除和更新环境,这些环境可以包含不同版本的 Python 以及/或软件包。 下面列出…...

使用Java拓展本地开源大模型的网络搜索问答能力

背景 开源大模型通常不具备最新语料的问答能力。因此需要外部插件的拓展&#xff0c;目前主流的langChain框架已经集成了网络搜索的能力。但是作为一个倔强的Java程序员&#xff0c;还是想要用Java去实现。 注册SerpAPI Serpapi 提供了多种搜索引擎的搜索API接口。 访问 Ser…...

Mybatis——一对多关联映射

一对多关联映射 一对多关联映射有两种方式&#xff0c;都用到了collection元素 以购物网站中用户和订单之间的一对多关系为例 collection集合的嵌套结果映射 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import java.util.List;Data public cla…...

Pytorch实用教程:TensorDataset和DataLoader的介绍及用法示例

TensorDataset TensorDataset是PyTorch中torch.utils.data模块的一部分&#xff0c;它包装张量到一个数据集中&#xff0c;并允许对这些张量进行索引&#xff0c;以便能够以批量的方式加载它们。 当你有多个数据源&#xff08;如特征和标签&#xff09;时&#xff0c;TensorD…...

uni-app如何实现高性能

这篇文章主要讲解uni-app如何实现高性能的问题&#xff1f; 什么是uni-app&#xff1f; 简单说一下什么是uni-app&#xff0c;uni-app是继承自vue.js&#xff0c;对vue做了轻度定制&#xff0c;并且实现了完整的组件化开发&#xff0c;并且支持多端发布的一种架构&#xff0c…...

docker 应用部署

参考:docker 构建nginx服务 环境 Redhat 9 步骤&#xff1a; 1、docker部署MySQL 安装yum 工具包 [rootadmin ~]# yum -y install yum-utils.noarch 正在更新 Subscription Management 软件仓库。 无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-…...

java.awt.FontFormatException: java.nio.BufferUnderflowException

Font awardFont Font.createFont(Font.TRUETYPE_FONT, awardFontFile).deriveFont(120f).deriveFont(Font.BOLD);使用如上语句创建字体时出现问题。java.awt.FontFormatException: java.nio.BufferUnderflowException异常表明在处理字体数据时出现了缓冲区下溢&#xff08;Buf…...

C++ 枚举类型 ← 关键字 enum

【知识点&#xff1a;枚举类型】● 枚举类型&#xff08;enumeration&#xff09;是 C 中的一种派生数据类型&#xff0c;它是由用户定义的若干枚举常量的集合。 ● 枚举元素作为常量&#xff0c;它们是有值的。C 编译时&#xff0c;依序对枚举元素赋整型值 0,1,2,3,…。 下面代…...

MySQL故障排查与优化

一、MySQL故障排查 1.1 故障现象与解决方法 1.1.1 故障1 1.1.2 故障2 1.1.3 故障3 1.1.4 故障4 1.1.5 故障5 1.1.6 故障6 1.1.7 故障7​ 1.1.8 故障8 1.1.9 MySQL 主从故障排查 二、MySQL优化 2.1 硬件方面 2.2 查询优化 一、MySQL故障排查 1.1 故障现象与解决方…...

如何做一个知识博主? 善用互联网检索

Google 使用引号: 使用双引号将要搜索的短语括起来,以便搜索结果中只包含该短语。例如,搜索 "人工智能" 将只返回包含该短语的页面。 排除词汇: 在搜索中使用减号 "-" 可以排除特定词汇。例如,搜索 "苹果 -手机" 将返回关于苹果公司的结果,但…...

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件&#xff0c;反应电脑存储情况&#xff1a; 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…...

作为一个初学者该如何学习kali linux?

首先你要明白你学KALI的目的是什么&#xff0c;其次你要了解什么是kali&#xff0c;其实你并不是想要学会kali你只是想当一个hacker kali是什么&#xff1a; 只是一个集成了多种渗透工具的linux操作系统而已&#xff0c;抛开这些工具&#xff0c;他跟常规的linux没有太大区别。…...

多线程学习-线程池

目录 1.线程池的作用 2.线程池的实现 3.自定义创建线程池 1.线程池的作用 当我们使用Thread的实现类来创建线程并调用start运行线程时&#xff0c;这个线程只会使用一次并且执行的任务是固定的&#xff0c;等run方法中的代码执行完之后这个线程就会变成垃圾等待被回收掉。如…...

用二级域名做的网站算新站吗/舆情信息

一、背景exe4j 可以很容易吧一个 jar 打包成 exe。但是对于一些刚接触 java 或者刚接触 exe4j 的朋友来说&#xff0c;看看这个教程还是很有帮助的。二、下载地址Exe4j 下载地址&#xff1a;http://dl.dbank.com/c0owlopqf8三、打包步骤1、 从上面网址下载 exe4j 安装文件&…...

wordpress对应国家语言/跨境电商seo

以下資料都來自網上,有不正確之處敬請諒解. http://blog.sina.com.cn/s/blog_661beca00100snex.html jQuery在客户端操作Table学习&#xff1a;不过有很多很多的不足&#xff0c;还需要学习掌握。 <style type"text/css"> .hover { back…...

东营做网站的公司/国际羽联最新排名

本节主要总结以下几个内容&#xff1a; 对model泛化能力进行评估的实验方法model性能的度量指标用统计检验的方法 比较不同model之间性能的差异解析 model 的 bias and variance 一、对model泛化能力进行评估的实验方法 当我们训练好一个模型时&#xff0c;往往希望知道的并…...

网站开发都需要哪些图/电商平台怎么运营的

怎么获得segment header 的dump&#xff1f; 来源于&#xff1a; How to Obtain a Segment Header Dump (文档 ID 249814.1) oracle数据库中的每个segment都有对应的segment header。 segment header通常是分配给这个segment的第一个extent中的第一个block。 segment header包…...

做网站一屏有多大/企业网站的功能

| 来源&#xff1a;七禾网 分享嘉宾&#xff1a;张琛实 本文为摘选 有些朋友可能对缠论的认识比较浅&#xff0c;我先用一点时间和大家简单介绍一下缠论中最基本的一部分内容。 我们今天的主题是&#xff0c;全球疫情升级下&#xff0c;如何用缠论捕捉市场剧烈…...

佛山做外贸网站推广/百度网站怎么提升排名

序 在前面的文章C# 如何插入、修改、删除Word批注一文中介绍了如何操作Word批注的一些方法&#xff0c;在本篇文章中将继续介绍操作Word批注的方法。分以下三种情况来介绍&#xff1a; 插入图片到Word批注读取Word批注回复Word批注所需工具 Spire.Doc for .NET 6.3&#xff08;…...