bluez是linux官方蓝牙协议栈。
组成
bluez分为两个部分:内核代码和用户态程序及工具集
内核代码:bluez核心协议和驱动程序等模块组成
用户态程序及工具集:应用程序接口和bluez工具集
独立模块:
linux内核蓝牙子系统核心
L2CAP 和 SCO 音频内核层
RFCOMM, BNEP, CMTP 和 HIDP内核实现
HCI UART, USB, PCMCIA 和虚拟设备驱动
通用蓝牙和SDP库和守候进程
配置和测试小工具
协议解码和分析工具
HCI 主机控制接口
RFCOMM 基于ETSI 07.10规范的串口仿真协议
OBEX是一种类似于HTTP的协议
LMP链路管理协议
TCS 电话控制协议
SCO 面向连接
ACL 无连接
L2CAP 逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)
BNEP 蓝牙网络封装协议
Bluetooth Network Encapsulation Protocol
Bluetooth Network Encapsulation Protocol
PCMCIA 网卡的一种规范
实现
1.内核
软件级别的协议从HCI层开始。查看源码,你会发现socket函数的第一个参数都是
PF_BLUETOOTH,为什么呢?
PF_BLUETOOTH,为什么呢?
因为bluez对各层协议的实现是依托于socket,它首先创建一个新的socket中的协议PF_BLUETOOTH,即在网络协议列表中添加PF_BLUETOOTH这一项。
补充:
函数原型 int socket(int domain, int type, int protocol);
domain指定应用程序使用的通讯协议的协议族
type指定要创建的套接字类型
protocol指定应用程序所使用的通讯协议
Bluetooth协议实现在内核源代码 /net/bluetooth中。包括hci,l2cap,hid,rfcomm,sco,SDP,BNEP等协议的实现。
驱动程序放在 /driver/bluetooth中,包含Linux kernel对各种接口的Bluetooth device的驱动。例如:USB接口,串口等。
2.用户应用
应用程序于kernel最方便的交流通道是ioctl(),但这不直观,于是就包装成了API。
今天的文章bluez 扫盲篇分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/5850.html