当前位置: 首页 > 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```

相关文章:

  • 超势垒整流器选型参数,结构原理,工艺与注意问题总结
  • TiDB单机版安装和连接访问
  • DWARF简析
  • 理解pytorch的广播语义
  • 第十三届蓝桥杯大赛软件赛省赛CC++大学B组
  • RUST语言函数的定义与调用
  • Useros.environ[“CUDA_VISIBLE_DEVICES“] = “1“
  • 精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)
  • 算法系列--递归,回溯,剪枝的综合应用(2)
  • 洛谷 1331.海战
  • 蓝桥杯真题:路径
  • Hadoop: word count,并将reduce结果写入ES
  • 玩机进阶教程-----高通9008线刷XML脚本修改备份 檫除的操作步骤解析
  • MySQL-SQL编写练习:基本的SELECT语句
  • Vite为什么比Webpack快得多?
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • const let
  • Flannel解读
  • IP路由与转发
  • JavaScript设计模式与开发实践系列之策略模式
  • Java知识点总结(JavaIO-打印流)
  • JS数组方法汇总
  • js作用域和this的理解
  • Logstash 参考指南(目录)
  • mysql 5.6 原生Online DDL解析
  • Python 反序列化安全问题(二)
  • React的组件模式
  • REST架构的思考
  • Vue.js-Day01
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 盘点那些不知名却常用的 Git 操作
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 思考 CSS 架构
  • 我看到的前端
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 大数据全解:定义、价值及挑战
  • ​Spring Boot 分片上传文件
  • ​人工智能书单(数学基础篇)
  • #QT(串口助手-界面)
  • #控制台大学课堂点名问题_课堂随机点名
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $forceUpdate()函数
  • (Java数据结构)ArrayList
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (算法设计与分析)第一章算法概述-习题
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃