全志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…...
全志D1s/F133 RISC-V处理器架构与应用解析
1. Allwinner D1s/F133 RISC-V处理器深度解析全志科技最新推出的D1s(又称F133)处理器,作为D1 RISC-V处理器的精简版本,在保持核心功能的同时通过集成64MB DDR2内存显著降低了成本。这款处理器主要面向智能摄像头和显示屏市场&…...
从连续到数字:深入解读Matlab离散化函数c2d的6种方法及其在滤波器与控制器设计中的选用
从连续到数字:Matlab离散化函数c2d的6种方法及其在工程实践中的精准选用 在数字信号处理和控制系统的设计中,连续时间系统的离散化是一个无法绕开的关键环节。就像摄影师需要将现实世界的连续光影转化为数码相机中的像素一样,工程师也需要将连…...
FPC连接方案全对比:板对板、金手指、Hotbar还是软硬结合?看完这篇就知道你的项目该选谁(含成本与可靠性分析)
FPC连接方案全对比:板对板、金手指、Hotbar还是软硬结合?看完这篇就知道你的项目该选谁(含成本与可靠性分析) 在消费电子和工控设备的设计中,柔性印制电路板(FPC)的连接方案选择往往成为项目成败…...
用Python+Floyd算法复刻2000年数学建模B题:从钢管运输规划到供应链优化实战
从经典数模到工业实践:PythonFloyd算法在供应链优化中的创新应用 二十年前那道经典的钢管运输数学建模题,至今仍是算法教学中的典型案例。但时代已经改变——当年需要依赖MATLAB和Lingo解决的复杂规划问题,如今用Python生态中的工具链就能优雅…...
英雄联盟客户端效率工具League Akari:从手动操作到智能辅助的全面升级
英雄联盟客户端效率工具League Akari:从手动操作到智能辅助的全面升级 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akar…...
通信数据校验的CRC算法的理论基础
CRC 通信数据校验 理论基础一、核心本质CRC 循环冗余校验 基于「模 2 除法」的多项式除法运算用原始数据除以一个固定生成多项式,得到的余数就是 CRC 校验码。二、数学理论基础(最核心)1. 模 2 运算(Modulo-2)无进位加…...
终极指南:深度掌握SketchUp STL插件高效3D打印工作流
终极指南:深度掌握SketchUp STL插件高效3D打印工作流 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl SketchUp ST…...
同城家政服务小程序维修搬家保洁月嫂保姆足浴推拿上门到家预约服务(3套不同版本)-源码开发
一、首页服务总览与核心入口一站式服务导航平台首页顶部设置搜索栏,支持用户快速查找 “日常保洁”“空调清洗” 等服务;下方展示 “新居开荒、全屋保洁、做饭阿姨、空调清洗” 等热门服务入口,同时覆盖日常保洁、家电清洗、保姆月嫂、育婴师…...
**发散创新:基于角色权限模型的动态访问控制实现与实战优化**在现代软件系统中
发散创新:基于角色权限模型的动态访问控制实现与实战优化 在现代软件系统中,权限管理已不再是简单的“用户-角色-资源”映射,而是需要支持细粒度、可配置、高扩展性的动态访问控制机制。本文以 Python Flask RBAC(基于角色的访问…...
PyQt5 + HFSS:给你的仿真脚本做个专属GUI界面(零基础搭建指南)
PyQt5 HFSS:零基础打造专业仿真GUI全攻略 当你的HFSS脚本开始变得复杂,每次运行都要在命令行里输入一堆参数时,是否想过给它穿上得体的"外衣"?想象一下:一个直观的界面,同事只需点击几下就能启动…...
