山高疑日近,海阔觉天低

蓝牙/Wifi二合一驱动开发

一,Makefile修改

BL_VERS_NUM=6.7.4.0

#
# WAITING FOR KCONFIG {
#
CONFIG_BL_PCIE ?= n
CONFIG_BL_SDIO ?= n
CONFIG_BL_USB ?= y    #这个蓝牙支持USB与SDIO两种方式 这个置为y表示用USB方式
CONFIG_BL_BTUSB ?= y  #蓝牙和Wifi共用一个驱动

# one driver support wifi BT for usb interface
CONFIG_WIFI_BT_USB_ONE_DRV ?= y #蓝牙和Wifi共用一个驱动
# user speicify the configure file location (tx_pwr.conf rf_para.conf)
CONFIG_CFG_FILE_LOCATION_USER_DEFINE ?= n
# configure usb use 2k rx buffer in driver
CONFIG_BL_USB_RX_BUF_2K ?=n

## mp cmds
CONFIG_BL_MP ?= y

## use combo fw for wifi/bt coexit
CONFIG_FW_COMBO ?=y

## FW bin mode or convert to array mode
CONFIG_BL_DNLD_FWBIN ?= y

## use cfg80211 wext standard ioctl to support wext mode
CONFIG_SUPPORT_WEXT_MODE ?= n

## support wpa3 compat if apply patch to kernel (<4.17) to support wpa3
CONFIG_WPA3_SUPPORT ?=n

export CONFIG_BL_MP
export CONFIG_FW_COMBO
export CONFIG_BL_DNLD_FWBIN

CONFIG_DEBUG_FS ?= n

#
# mesh feature support
CONFIG_MESH ?=n

#
# DEBUG OPTIONS
CONFIG_BL_UM_HELPER_DFLT ?= "/dini/dini_bin/bl_umh.sh"

#
# FW ARCH:
CONFIG_BL_SDM ?= n
CONFIG_BL_TL4 ?= n
CONFIG_BL_FW_RETRY ?= y
CONFIG_BL_FPGA ?= n
CONFIG_BL_RX_REORDER ?= y
CONFIG_BL_RX_DEFRAG ?= y
CONFIG_BL_BAND_5G ?= n

# IPC version
CONFIG_BL_OLD_IPC ?= n

# TX/RX profiling
CONFIG_BL_TRX_PROFILE ?= n

# Support of P2P DebugFS for enabling/disabling NoA and OppPS
CONFIG_BL_P2P_DEBUGFS ?= n

# Polling interrupt
CONFIG_BL_INT_POLLING ?= n

ifeq ($(CONFIG_DEBUG_FS),y)
CONFIG_BL_DEBUGFS ?= y
export CONFIG_BL_DEBUGFS ?= y
endif
#
# } // WAITING FOR KCONFIG
#
subdir-ccflags-$(CONFIG_MESH) += -DCONFIG_MESH

subdir-ccflags-$(CONFIG_BL_DEBUGFS) += -DCONFIG_BL_DEBUGFS
subdir-ccflags-$(CONFIG_BL_DEBUGFS) += -DCONFIG_BL_UM_HELPER_DFLT=\"$(CONFIG_BL_UM_HELPER_DFLT)\"
subdir-ccflags-$(CONFIG_BL_P2P_DEBUGFS) += -DCONFIG_BL_P2P_DEBUGFS

# FW VARS
subdir-ccflags-y += -DNX_VIRT_DEV_MAX=2
subdir-ccflags-y += -DNX_REMOTE_STA_MAX=4
subdir-ccflags-y += -DNX_MU_GROUP_MAX=62
subdir-ccflags-y += -DNX_TXDESC_CNT=64
subdir-ccflags-y += -DNX_TX_MAX_RATES=4
subdir-ccflags-y += -DNX_CHAN_CTXT_CNT=3
subdir-ccflags-y += -DCONFIG_BL_FULLMAC
subdir-ccflags-y += -DDEBUG

# FW ARCH:
subdir-ccflags-$(CONFIG_BL_SDM) += -DCONFIG_BL_SDM
subdir-ccflags-$(CONFIG_BL_TL4) += -DCONFIG_BL_TL4
subdir-ccflags-$(CONFIG_BL_OLD_IPC) += -DCONFIG_BL_OLD_IPC
subdir-ccflags-$(CONFIG_BL_FW_RETRY) += -DBL_FW_RETRY
subdir-ccflags-$(CONFIG_BL_RX_REORDER) += -DBL_RX_REORDER
subdir-ccflags-$(CONFIG_BL_RX_DEFRAG)  += -DBL_RX_DEFRAG
subdir-ccflags-$(CONFIG_BL_FPGA) += -DBL_FPGA
subdir-ccflags-$(CONFIG_BL_BAND_5G) += -DBL_BAND_5G
subdir-ccflags-$(CONFIG_BL_TRX_PROFILE) += -DBL_TRX_PROFILE

# driver configure
subdir-ccflags-$(CONFIG_BL_DNLD_FWBIN) += -DCONFIG_BL_DNLD_FWBIN
subdir-ccflags-$(CONFIG_BL_MP) += -DCONFIG_BL_MP
subdir-ccflags-$(CONFIG_FW_COMBO) += -DCONFIG_FW_COMBO
subdir-ccflags-$(CONFIG_SUPPORT_WEXT_MODE) += -DCONFIG_SUPPORT_WEXT_MODE
subdir-ccflags-$(CONFIG_BL_USB_RX_BUF_2K) += -DBL_USB_RX_BUF_2K

subdir-ccflags-$(CONFIG_CFG_FILE_LOCATION_USER_DEFINE) += -DCFG_FILE_LOCATION_USER_DEFINE
subdir-ccflags-$(CONFIG_BL_INT_POLLING) += -DBL_INT_POLLING

subdir-ccflags-$(CONFIG_WPA3_SUPPORT) += -DBL_WPA3_COMPAT

# BT USB driver:
ifeq ($(CONFIG_WIFI_BT_USB_ONE_DRV),y)
export CONFIG_BL_BTUSB = y
export CONFIG_WIFI_BT_USB_ONE_DRV = y
endif
ifeq ($(CONFIG_BL_PCIE),y)
obj-m  += pcie/
endif
ifeq ($(CONFIG_BL_SDIO),y)
obj-m  += sdio/
endif
ifeq ($(CONFIG_BL_USB),y)
obj-m   += usb/
endif
#obj-$(CONFIG_BL_PCIE)  += pcie/
#obj-$(CONFIG_BL_SDIO)  += sdio/
#obj-$(CONFIG_BL_USB)   += usb/

ifeq ($(CONFIG_BL_BTUSB),y)
export CONFIG_BL_BTUSB = y
obj-m += btusb/
endif
KBUILD_CFLAGS += -w

all: modules
	mkdir -p .tmp  #便于复制
	cp btusb/*.ko .tmp
	cp usb/*.ko .tmp
	cp ../*.bin .tmp

ARCH := arm
CROSS_COMPILE := arm-linux-gnueabihf-
KERNELDIR = /home/lee/project/Kernel/linux-5.15
#/lib/modules/$(shell uname -r)/build

modules clean:
	@$(PWD)/mklink.sh
	$(MAKE) -C $(KERNELDIR) O=$(KBUILDDIR) M=$(PWD) $@
#	$(MAKE) -C $(KERNELDIR) O=$(KBUILDDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) $@
	@$(PWD)/mklink.sh clean

调用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 会生成2个ko文件,linux启动的时候可以去加载

二,测试工具
在linux中所有的蓝牙测试工具是hci开头的

1. 蓝牙hcitool工具

hcitool是一个用于配置和连接到蓝牙设备的命令行工具。以下是一些hcitool的常用功能:

  1. 扫描蓝牙设备hcitool scan命令可以用来扫描附近的蓝牙设备。这个命令会列出所有可见的蓝牙设备的地址和名称。

  2. 查看设备信息hcitool info <bdaddr>命令可以用来查看指定蓝牙设备的信息,其中<bdaddr>是设备的蓝牙地址。

  3. 连接到设备hcitool cc <bdaddr>命令可以用来连接到指定的蓝牙设备。

  4. 断开设备连接hcitool dc <bdaddr>命令可以用来断开与指定蓝牙设备的连接。

  5. 读取RSSI值hcitool rssi <bdaddr>命令可以用来读取与指定蓝牙设备的RSSI值,这是一个表示信号强度的值。

  6. 设置设备名称:如前面所述,hcitool name <hciX> <new_name>命令可以用来设置HCI设备的名称

2. 蓝牙hciconfig工具

hciconfig是一个用于配置和连接到蓝牙设备的命令行工具,可以用来开启关闭蓝牙:hciconfig hci0 on/off

3 无线 iw命令
iw是一个低级工具,不支持WPA/WPA2安全性。要连接到使用WPA/WPA2安全性的WiFi热点,你需要使用wpa_supplicant命令.
是一个在Linux系统中用于管理无线设备的命令行工具。它可以用来查看、配置和调试无线网络接口。以下是一些常见的”iw”命令的用途:

  1. 查看无线设备信息iw dev命令可以列出所有的无线设备及其信息。

  2. 扫描无线网络iw dev wlan0 scan命令可以扫描并列出所有可用的无线网络。这里的”wlan0″是无线设备的名称,可能会根据你的系统配置有所不同。

  3. 连接到无线网络:虽然”iw”命令可以用来手动连接到无线网络,但这通常需要一些额外的步骤,如认证和获取IP地址。因此,大多数情况下,我们会使用更高级的工具如”NetworkManager”或”wpa_supplicant”来管理无线连接。

  4. 调试无线连接:”iw”命令提供了许多用于调试无线连接的选项,如查看连接状态、信号强度等。

赞(0) 打赏
未经允许不得转载:Mr.Zhang » 蓝牙/Wifi二合一驱动开发

你的打赏是我的动力

登录

找回密码

注册