imx6ul蓝牙语音识别项目之3:用户态蓝牙配置

stack的划分
在前面的文章中,我们已经配置好了内核态对蓝牙的支持, 包括驱动以及内核态的stack。
Linux蓝牙的stack为BlueZ, 参考前面的文章的图片,可以知道,内核态和用户态使用的是MGMT接口来通讯。
底层主要负责和Controller数据的传输,而数据的传输接口一般为USB,SDIO以及串口。
具体而言,功能如下:

其中个人认为比较复杂的是SMP,内核态中对:

  • 控制
  • 数据

这两类信息通过socket接口传递到了用户态。MGMT作为控制接口,定义了大量的控制命令。同时将Controller的数据使用HCI方式传递给用户态的BlueZ daemon, 即下面图中说到的bluetoothd

bluetoothd使用D-Bus保留控制和数据接口,用于应用程序与stack的交互。
还有一些工具可以用来完成对stack中信息的获取。


更新stack
现在stack的版本已经到了5.49, 这个版本开始支持mesh了。其中最为重要的是5.47版本,这个版本修正和正式使用D-Bus接口来完成绝大部分操作的接口的暴露。 
同时Gatt的支持也变得比较完善,而Yocto中的版本一般都在5.43左右,属于比较老的版本。



因此我们需要做的事情是升级Yocto中的BlueZ版本。


更新Yocto bb文件
一般bluez的bitbake recipe文件位于poky的connectivity中,我们直接修改URL即可,将其指定为5.49,然后根据我以前写的文章编译即可。编译完成后的内容大致如下:

需要注意的是在5.49版本中,gatttool已经不存在了,因此需要修改bb文件中的对应install行。

测试usersapce stack
当一切都准备好了,那么我们就可以开始测试了。
我们使用bluetoothctl来扫描连接一个设备,使用的命令是:
$bluetoothctl
$ scan on
$ connect XXXXXX
连接后就可以使用info来查看设备信息:

Leave a Reply

Your email address will not be published. Required fields are marked *