【ARM】嵌入式 ARM Linux 下移植 USB 蓝牙、交叉编译 bluez 各种版本

2019-07-12 16:51发布

一、基本说明:

目前在嵌入式 Linux 下使用 USB 蓝牙模块,比较好的解决方法就是使用 Linux 官方协议栈 bluez,这同时也是 PC 及 Android 手机上使用的蓝牙协议栈,可以说还是比较靠谱的。 但是!不得不说,bluez 有多种版本,如 bluez-2.25、bluez-3.36、bluez-4.95、bluez-5.28 等,每个大版本从交叉编译、使用方法到内部原理、配置方法都区别相当大!网上资料鱼龙混杂,对于新手来说很混乱,而且还有一部分博主对关键点避而不谈,造成明明编译不过,一步略过,很让人抓狂……因此博主尽力分析不同版本的差异,提供 bluez 不同版本的不同配置方法,旨在答疑解惑,或权当备份…… 提示:遇到问题千万要去 Google,不要百度!基本搜不出来有用的东西,Google 上都是宝贝……
 

二、项目需求:

目前博主需要在嵌入式 ARM Linux 上使用蓝牙模块,开发板是“飞凌 OK6410”,蓝牙模块是 RTL8723A,是一款 Wifi 蓝牙二合一的模块。项目需要在开发板上移植蓝牙,并通过手机 App 与开发板实现数据通信。
 

三、Bluez 版本说明:

移植蓝牙,博主选择使用官方的 bluez,对于 bluez 的 4 个版本,博主都试着摸索了一遍,先说结论:bluez-4.95 目前配置成功,其他版本有各种各样的问题。 注:这里仅说明源码包都是什么,以及交叉编译需要哪些包,具体的步骤请参见本文附录中的博文链接,用者自取。
 

1、bluez-2.25

配置结果: 编译成功,使用基本成功,能通过嵌入式 Linux 的 bluez 连接电脑蓝牙的蓝牙串口服务,并通过串口发送信息,但是反过来没成功…… 需要的包:
  • bluez-libs-2.25.tar.gz
  • bluez-utils-2.25.tar.gz
  • bluez-pin-0.25.tar.gz
说明: bluez-libs-2.25.tar.gz,官网提供,这是 bluez 库文件
bluez-utils-2.25.tar.gz,官网提供,这是 bluez 自带的配置工具
bluez-pin-0.25.tar.gz,非官方,一个 GTK 的图形化 pin 码输入界面,非必须
 

2、bluez-3.36

配置结果: 编译成功,使用失败,源码包自带的配对程序仅支持“简单配对模式(Simple Pairing)”,不支持“pin 码配对(PIN Code Pairing)”,而博主的模块怎么也调不出 pin 码配对模式,导致使用失败。 简单概念说明: 早期蓝牙模块只有 pin 码配对,就是主机发出配对请求,从机要求主机输入 pin 码,然后从机和自己的比对,正确了就配对。 后期出现了简单配对模式,就是主机不输入 pin 了,仅仅生成一个随机 6 位码,问是否配对,从机也是,都认可了就配对。 而对于嵌入式来说,有时候输入输出都没有,怎么办,这就要求 pin 码写死,或者自动应答配对请求,怎么写,写在哪里,怎么自动应答,这就是不同版本的差异,几乎一个版本一个样……具体都怎么用,参见附录博文不同版本的 bluez 交叉编译过程。 需要的包:
  • bluez-libs-3.36.tar.gz
  • expat-2.0.1.tar.gz
  • dbus-1.2.16.tar.gz
  • glib-2.22.4.tar.gz
  • libusb-0.1.12.tar.gz
  • bluez-utils-3.36.tar.gz
说明: bluez-libs-3.36.tar.gz,官网提供,这是 bluez 库文件
expat-2.0.1.tar.gz,网上下载,用于解析 xml,编译 bluez-utils-3.36.tar.gz 需要
dbus-1.2.16.tar.gz,网上下载,用于进程间通信,编译 bluez-utils-3.36.tar.gz 需要
glib-2.22.4.tar.gz,网上下载,编译 bluez-utils-3.36.tar.gz 需要
libusb-0.1.12.tar.gz,网上下载,暂时貌似没用到??没注意……
bluez-utils-3.36.tar.gz,官网提供,这是 bluez 自带的配置工具 依赖关系: bluez-libs
bluez-utils ─┬─ dbus ─── expat
         └─ glib
 

3、bluez-4.95

配置结果: 编译成功,使用成功!!可以配对,但是只是简单配对模式(Simple Pairing),pin 码配对模式(PIN Code Pairing)还没搞出来…… 需要的包:
  • expat-2.0.1.tar.gz
  • dbus-1.4.1.tar.gz
  • glib-2.16.2.tar.gz
  • bluez-4.95.tar.gz
  • bluez-hcidump-2.5.tar
说明: expat-2.0.1.tar.gz,网上下载,用于解析 xml,编译 bluez-4.95.tar.gz 需要
dbus-1.4.1.tar.gz,网上下载,用于进程间通信,编译 bluez-4.95.tar.gz 需要
glib-2.16.2.tar.gz,网上下载,编译 bluez-4.95.tar.gz 需要
bluez-4.95.tar.gz,官网提供,这是 bluez 库文件、自带配置工具
bluez-hcidump-2.5.tar,官网提供,这是调试 hci 包、事件的工具,非必须 依赖关系: bluez ─┬─ dbus ─── expat
     └─ glib
bluez-hcidump
 

4、bluez-5.28

配置结果: 编译失败,编译很复杂,最后 bluez make 时出错,暂时没有找到解决方法 需要的包:
  • expat-2.0.1.tar.gz
  • dbus-1.6.30.tar.gz
  • glib-2.28.6.tar.bz2
  • libical-1.0.tar.gz
  • ncurses-5.9.tar.gz
  • readline-6.3.tar.gz
  • bluez-5.28.tar
说明:基本同上,都是编译 bluez-5.28.tar 依赖的包 依赖关系: bluez ─┬─ dbus ─── expat
     ├─ glib
     ├─ libical
     └─ readline ─── ncurses
 

附录:

1、bluez-2.25 交叉编译及使用方法:
2、bluez-3.36 交叉编译及使用方法:
3、bluez-4.95 交叉编译及使用方法:http://blog.csdn.net/u011408697/article/details/44459239
4、bluez-5.28 交叉编译及使用方法: