Android下移植WiFi和BT(USB接口)

一、示例环境

平台:RK3566 Android11
模组:SKI.WB800D80U.2

二、驱动移植

1、流程

a、将驱动代码放入正确的内核目录(通常是 drivers/net/wireless/)
b、修改 KconfigMakefile 以包含新驱动
c、配置.config文件使其编译

2、WiFi驱动移植

2.1、放置驱动代码

将WiFi驱动代码目录放在kernel/drivers/net/wireless/目录下。这是 Linux 内核源码树中网络驱动的标准位置。

2.2、修改 Makefile 和 Kconfig

kernel/drivers/net/wireless/目录中,更新MakefileKconfig以包含新的驱动

a. Makefile 示例:

obj-$(CONFIG_AIC8800_WLAN_SUPPORT) += aic8800/

Makefile

b. Kconfig 示例:

source "drivers/net/wireless/aic8800/Kconfig"

Kconfig

3、BT驱动移植

3.1、放置驱动代码

将BT驱动代码目录放在kernel/drivers/bluetooth目录下

3.2、修改 Makefile 和 Kconfig

kernel/drivers/bluetooth目录中,更新MakefileKconfig以包含新的驱动

a. Makefile 示例:

obj-$(CONFIG_BT_AICBTUSB) += aic_btusb.o

bt_Makefile

b. Kconfig 示例:

config BT_AICBTUSB
	tristate "AIC HCI USB driver"
	depends on USB
	help
	  AIC Bluetooth HCI USB driver.

bt_kconfig

4、设置内核配置

a、方法一:修改内核.config文件
b、方法二:修改配置源文件
直接修改 kernel/arch/arm64/configs/firefly_defconfig 文件(按实际使用的配置文件来修改),添加:

CONFIG_BT_AICBTUSB=m
CONFIG_AIC_WLAN_SUPPORT=m
CONFIG_AIC8800_WLAN_SUPPORT=m
CONFIG_AIC_LOADFW_SUPPORT=m

这将使驱动被编译为一个内核模块
内核配置

三、安卓上层适配

1、复制驱动所需固件文件到文件系统中

BOARD_VENDOR_KERNEL_MODULES:Android 构建系统会使用这个变量来确定哪些内核模块需要被编译和打包到最终的系统镜像中
PRODUCT_COPY_FILES:Android中,该变量用于指定需要在构建过程中复制到目标设备的文件
gujianm

2、设置开机需要加载的驱动

加载驱动

3、WiFi部分

1、WiFi识别流程

a、 开机对 wifi 模块上电,并自动进行扫描 sdio 操作。
b、系统启动打开 wifi 操作时,分别对系统 sys/bus/sdio(sdio wifi), sys/bus/usb(usb wifi),sys/bus/pic (pcie wifi )文件系统下的 uevent 进行读取。
c、获取到 wifi 芯片 vid pid 加载相应的 wifi ko 驱动。
d、识别到 wifi 类型后加载不同的 wpa_supplicant 参数启动 wifi。

2、移植

2.1. 添加 wifi 名称和 wifi vid pid

supported_wifi_devices添加所要移植模组的vid pid
vid

2.2、添加 wifi 驱动 ko 文件存放路径

module_list添加模组对应的驱动和路径驱动路径

2.3、添加 wpa_supplicant 启动参数

a、在wpa_config.txt设置参数
参数
b、wpa_supplicant/main.cmain 函数中添加芯片类型
芯片类型

4、BT部分

a、设置BOARD_HAVE_BLUETOOTH_AIC构建系统变量,用于指示设备使用所使用的蓝牙
设置蓝牙
b、libbt
libbt 负责蓝牙芯片的初始化,不同蓝牙芯片使用不同的 libbt,libbt 一般都由芯片厂家提供。
包含蓝牙对应libbt-vendor库的mk文件,编译生成对应的库文件
在libbt-vendor
c、根据识别到的wifi,来判断用的是哪一个libbt库识别libbt-vendor
d、为蓝牙设备节点赋权限
节点

Q&A

1、识别不到设备

问题:
lsusb没有对应的模组的vid,导致WiFi打不开
在这里插入图片描述

排查方法:

  • 确认硬件是否有问题
  • 排查设备树里相关的配置是否正确

2、check_wifi_chip_type_string返回不正确

问题:
logcat中check_wifi_chip_type_string所返回的模组不正确,导致WiFi打不开
check_wifi_chip_type_string
排查方法:

  • 主板是否识别到设备
  • 安卓上层supported_wifi_devices中的vid和did是否与所适配模组相符

3、libbt加载错误

问题:
安卓上层加载libbt库时,加载的不是模组对应的库
libbt-vendor
排查方法:

  • check_wifi_chip_type_string识别是否正确
  • hardware/interfaces/bluetooth/1.0/default/vendor_interface.cc文件中libbt库相关是否正确设置

4、libbt打不开

libbt正确识别,但是打不开对应的库文件
打不开
排查方法:

  • 确认该板卡上是否有该库文件
  • 库文件是否有编译到,编译出来的库文件是否正确
  • 22
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vis-Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值