嵌入式技术论坛
直播中

605342

12年用户 111经验值
擅长:EMC/MEI设计,控制/MCU
私信 关注
[经验]

【MYD-Y6ULX试用体验】配置支持蓝牙

` 本帖最后由 Tony_Ho 于 2018-3-3 18:14 编辑

蓝牙架构
在Linux中蓝牙的stack分层如下:
6.png 从总体上看分为两层, 一个在内核态,一个在用户态,内核态。
在内核态中的部分暴露了一个特殊的Socket给用户态,然后用户态使用命令+参数的格式传递给内核态。而如果硬件有反馈信息,一般是事件,那么会有callback消息上来。

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

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

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

2.png

对于通用,常用的蓝牙dongle都有对应的驱动: 3.png
可以看到支持的范围很广:
  • USB
  • UART
  • SDIO
  • 以及broadcom特殊协议
而协议的话,支持H4 H5等协议。


我们购买的是CSR USB 的蓝牙dongle:



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

5.png

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

4.png


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



` 9.png

更多回帖

发帖
×
20
完善资料,
赚取积分