无连线的Linux——蓝牙的基础

这篇博客介绍了Linux系统中蓝牙的基础知识,包括L2CAP协议的讲解,旨在帮助读者理解Linux环境下如何进行蓝牙连接。
摘要由CSDN通过智能技术生成
               

Linux Without Wires The Basics of Bluetooth

蓝牙技术用于短距离(1米至100米)的通信。 它是最广泛的无线技术,根据功率和通信范围分为多个类别
蓝牙是基于分组的协议,并具有主从结构。 它工作在2400MHz和2483.5MHz频率范围之间,并使用跳频扩频。 蓝牙将数据分成数据包并在79个指定的频道之一上发送。 每个通道具有1MHz的带宽。 蓝牙4.0版本有40个通道,每个通道使用2MHz带宽。


蓝牙堆栈
蓝牙堆栈是用于实现蓝牙主机协议栈的软件。 蓝牙堆栈实现可以有两种类型:
第一种是通常用于台式计算机的通用实现,并且灵活,因为可以通过驱动程序添加额外的蓝牙配置文件。
第二个是嵌入式系统的实现,它是针对资源有限的设备,如外围设备。
蓝牙,Bluedroid,Widcomm,Bluecode +,BlueLet,BlueMagic等市场上有各种类型的蓝牙协议栈(见图2)。


BlueZ
BlueZ是一个通用蓝牙堆栈,用于实现Linux的蓝牙主机协议栈。它是开源软件和官方的Linux蓝牙协议栈。您可以从开发部分的http://www.bluez.org/下载这个软件。
BlueZ将蓝牙协议层映射到内核模块,内核线程,用户空间守护进程,配置工具,实用程序和库(见图3)。 BlueZ的主要组件是:

bluetooth.ko,其中包含BlueZ的核心基础设施。它 传播蓝牙 sockets家族 AF_BLUETOOTH。所有BlueZ模块都利用其服务。
蓝牙HCI数据包通过UART或USB传输。相应的BlueZ HCI实现是hci_uart.ko和hci_usb.ko。
负责分割,重组和协议复用的蓝牙L2CAP层由l2cap.ko实现。
在bnep.ko的帮助下,TCP / IP应用程序可以通过蓝牙运行。这模拟L2CAP层上的以太网端口。名为kbnepd的内核线程负责BNEP连接。
rfcomm.ko负责运行终端等串口应用程序。这模拟了L2CAP层上的串行端口。名为krfcommd的内核线程负责RFCOMM连接。
hidp.ko实现HID(人机界面设备)层。用户模式守护进程隐藏允许BlueZ处理输入设备,如蓝牙鼠标。
sco.ko实现面向同步连接(SCO)层来处理音频。 SCO连接不指定连接到远程主机的通道;只有主机地址被指定。

蓝牙协议栈与OSI模型
将蓝牙协议栈与开放系统互连(OSI)模型进行比较的原因是为了更好地理解前者。假定了OSI模型的知识。
无线电,基带和链路管理器层是在蓝牙芯片组上实现的蓝牙架构的硬件部分。这些层大致映射到OSI模型中的物理层,数据链路层和网络层。主机控制接口(HCI)映射到传输层,并在L2CAP层和蓝牙芯片组之间传输数据。逻辑链路控制和适配协议(L2CAP)映射到会话层。使用射频通信(RFCOMM)的串行端口仿真,使用蓝牙网络封装协议(BNEP)的以太网仿真和服务发现协议(SDP)是功能丰富的表示层的一部分。位于堆栈顶部的各种应用程序环境称为配置文件。由于无线电,基带和链路管理器通常是蓝牙硬件的一部分,操作系统支持从HCI层开始(见图4)。


仔细看看蓝牙协议栈
蓝牙协议栈分为两部分主机和控制器,并由主控制器接口(HCI)层接口(见图5)。

蓝牙主机
主机由堆栈的软件部分组成。因此,它在操作系统级别上实现。它包括核心蓝牙协议的实现:蓝牙堆栈(或主机协议堆栈)和蓝牙架构的高级层(如API和配置文件)。它具有各种层次和协议,如L2CAP,RFCOMM,SDP等,下面将进行解释。

L2CAP(逻辑链路控制和适配协议)L2CAP具有以下特征:
在不同的高层协议之间复用数据的能力;因此,诸如RFCOM,SDP等的各种协议可以对其进行操作
分割和重组
服务质量
它支持一个组抽象,实现将一个组映射到微微网上
RFCOMM(射频通信):RFCOMM位于L2CAP层之上。这是一个串口仿真协议。它通过蓝牙基带仿真RS-232控制和数据信号。
它提供与TCP大致相同的服务和可靠性保证。从网络程序员的角度来看,端口号的选择是TCP和RFCOMM最大的区别。尽管TCP在一台机器上支持多达65,535个开放端口,但RFCOMM仅允许有30个。这对于如何选择服务器应用程序的端口号有重大影响。
SDP(服务发现协议):该协议是所有蓝牙应用程序所必需的,并且是蓝牙协议栈的重要组成部分。借助该协议,设备可以发现附近其他设备支持的服务以及与之连接所需的参数。每个服务都由一个通用唯一标识符(UUID)来标识。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要:基于对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 系统下的蓝牙协议栈,应用在不同的设备和领域中。 BlueZ 是 Linux 的官方蓝牙协议栈,也是目前应用最广 泛的协议栈,几乎支持所有已通过认证的蓝牙设备。对于基 于主机的蓝牙应用,目前常见的硬件接口有 UART, USB 和 PC 卡等,USB 作为 PC 的标准外设接口,具有连接方便、兼 容性好和支持高速设备等特点,已广泛应用于蓝牙设备。 目前对 Linux 下 USB 设备驱动的研究已较为广泛而深 入[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 内核中起着重要作用,它使某个 硬件能响应一个定义良好的内部编程接口。这些接口隐藏了 设备的工作细节,用户通过一组独立于特定驱动程序的标准 调用来操作设备。而将这些调用映射到作用于实际硬件设备 的特有操作上,则是驱动程序的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值