imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持

时间:2024-04-09 22:01:21
蓝牙架构
在Linux中蓝牙的stack分层如下:
imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持从总体上看分为两层, 一个在内核态,一个在用户态,内核态。
在内核态中的部分暴露了一个特殊的Socket给用户态,然后用户态使用命令+参数的格式传递给内核态。而如果硬件有反馈信息,一般是事件,那么会有callback消息上来。

硬件说明
对于蓝牙,一般都是模组,例如有些是BT Wifi模组,即BT-Wifi为一体的模组。
这种模组一般是通过UART,SDIO,或者USB接口与SoC的某类总线连接。

而模组本身其实也带有固件,甚至里面自己跑着操作系统,这个时候可能就需要下载固件。这个固件是由内核发现设备的时候从用户态获取,然后通过总线现在到模组中。

内核态的配置
对于现在的比较新的内核一般都有蓝牙的stack支持,以及驱动。
如同前面所说,蓝牙自己在内核态创建了一种新的socket来和上面的用户态通信。我们可以看到内核态中的muenuconfig中,蓝牙位于Networking support中:
imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持
选中了Bluetooth subsystem support后就有驱动等支持。

imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持

对于通用,常用的蓝牙dongle都有对应的驱动:imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持
可以看到支持的范围很广:
  • USB
  • UART
  • SDIO
  • 以及broadcom特殊协议
而协议的话,支持H4 H5等协议。


我们购买的是CSR USB 的蓝牙dongle:
imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持


测试在编译好配置了bt的内核后,编译烧写,启动后我们可以插入Dongle,即可看到log:

imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持

然后就可以看到生成了hci节点了:

imx6ul蓝牙语音识别项目之2: 添加蓝牙Controller支持


至此,蓝牙的内核态支持就好了。