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

一、基本说明:

目前在嵌入式 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 交叉编译及使用方法:

摘 要:基于对Linux蓝牙协议栈BlueZ 源代码的分析,给出BlueZ的组织结构和特点。分析蓝牙USB 传输驱动机制和数据处理过程, 给出实现蓝牙设备驱动的重要数据结构和流程,并总结Linux 下开发蓝牙USB 设备驱动的一般方法和关键技术。 关键词:Linux 系统;蓝牙协议栈;设备驱动 USB Device Driver for Linux Bluetooth Stack LIANG Jun-xue, YU Bin (Institute of Electronic Technology, PLA Information Engineering University, Zhengzhou 450004) 【Abstract】This paper depicts the structure and characteristics of BlueZ based on analyzing the source code of Linux bluetooth stack BlueZ. It analyzes the implementation of bluetooth USB transport driver scheme and data processing procedure in detail, and gives the key data structure and implementation of bluetooth device driver. It summarizes the approach of developing Linux bluetooth USB device driver and the key technology. 【Key words】Linux system; bluetooth stack; device driver 计 算 机 工 程 Computer Engineering 第 34 卷 第 9 期 Vol.34 No.9 2008 年 5 月 May 2008 ·开发研究与设计技术· 文章编号:1000—3428(2008)09—0273—03 文献标识码:A 中图分类号:TP391 1 概述 蓝牙技术是开放式通信规范,而 Linux 是开放源码的操 作系统。廉价设备与免费软件的结合,促进了蓝牙技术和 Linux 的发展与融合。 Linux最早的蓝牙协议栈是由Axis Communication Inc在 1999 年发布的 OpenBT 协议栈。 随后, IBM 发布了 BlueDrekar 协议栈,但没有公开其源码。Qualcomm Incorporated 在 2001 年发布的 BlueZ 协议栈被接纳为 2.4.6 内核的一部分。此外, Rappore Technology 及 Nokia 的 Affix Bluetooth Stack 都是 Linux 系统下的蓝牙协议栈,应用在不同的设备和领域中。 BlueZLinux 的官方蓝牙协议栈,也是目前应用最广 泛的协议栈,几乎支持所有已通过认证的蓝牙设备。对于基 于主机的蓝牙应用,目前常见的硬件接口有 UART, USB 和 PC 卡等,USB 作为 PC 的标准外设接口,具有连接方便、兼 容性好和支持高速设备等特点,已广泛应用于蓝牙设备。 目前对 LinuxUSB 设备驱动的研究已较为广泛而深 入[1-4] ,但对 Linux 下的蓝牙设备驱动还没有专门的研究。本 文在分析 USB 设备驱动和蓝牙协议栈的基础上,总结了 Linux 下开发蓝牙 USB 驱动程序的一般方法,并深入剖析了 其关键技术。 2 Linux 蓝牙协议栈 BlueZ 简介 BlueZ 目前已成为一个开放性的源码工程。它可以很好 地在 Linux 支持的各种体系的硬件平台下运行,包括各种单 处理器平台、多处理器平台及超线程系统。 BlueZ 由多个独立的模块组成,内核空间主要包括设备 驱动层、蓝牙核心及 HCI 层、L2CAP 与 SCO 音频层、 RFCOMM, BNEP, CMTP 与 HIDP 层、通用蓝牙 SDP 库和后 台服务及面向所有层的标准套接字接口;在用户空间提供了 蓝牙配置、测试及协议分析等工具。其组织结构如图 1 所示, BlueZ 没有实现专门的 SDP 层,而是将其实现为运行在后台 的蓝牙服务库例程(图 1 没有描述该后台服务)。 RFOMM 层支 持标准的套接口,并提供了串行仿真 TTY 接口,这使串行端 口应用程序和协议可以不加更改地运行在蓝牙设备上,例如 通过点对点协议 PPP 可实现基于 TCP/IP 协议簇的所有网络 应用。BNEP 层实现了蓝牙的以太网仿真,TCP/IP 可以直接 运行于其上。 USB设备驱动 (hci_usb.o) L2CAP层(l2cap.o) RFCOMM层 (rfcomm.o) BNEP层 (bnep.o) CMTP层 (cmtp.o) 串口设备驱动 (hci_uart.o) 虚拟串口设备驱动 (hci_vhci.o) 音频 socket RFCOMM socket BNEP socket CMTP socket L2CAP socket HCI socket 内核 空间 用户 空间 串口设备 CAPI设备 输入设备 网络设备 HDIP socket 音频设备 AF_BLUETOOTH socket 音频层(sco.o) PPP TCP/IP AF_INET socket BNEP层 (bnep.o) 其他设备驱动 (bluecard_cs.o等) BlueZ工具和实用程序 HDIP层 (hdip.o) BlueZ核心 及HCI层(bluez.o/bluetooth.o) 图 1 BlueZ 组织结构 3 蓝牙 USB 设备驱动 设备驱动程序在 Linux 内核中起着重要作用,它使某个 硬件能响应一个定义良好的内部编程接口。这些接口隐藏了 设备的工作细节,用户通过一组独立于特定驱动程序的标准 调用来操作设备。而将这些调用映射到作用于实际硬件设备 的特有操作上,则是驱动程序的任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值