L2CAP(Logical Link Control and Adaptation Protocol)是蓝牙协议栈的数据链路层,负责将上层应用数据分割为蓝牙基带包传输,并提供协议复用、组寻址、流量控制等核心能力。Linux 内核实现了完整的 L2CAP 协议栈,BlueZ 用户态通过 L2CAP Socket 与内核交互。本文基于 BlueZ 5.x 源码与 Linux 内核蓝牙子系统,深度拆解用户态与内核态的完整数据交互链路。
目录
一、内核 L2CAP 协议栈架构
二、BlueZ 用户态 L2CAP 实现
三、数据发送完整链路
四、数据接收完整链路
五、分片重组机制
六、流量控制机制
七、BLE 与经典 L2CAP 差异化处理
八、用户态与内核态数据交互边界
九、 异常处理与丢包机制
十、调试与排坑技巧
十一、核心函数速查表
十二、数据结构映射关系
十三、总结
一、内核 L2CAP 协议栈架构
1.1 整体分层模型
1.2 内核核心结构体
1.2.1 l2cap_chan — L2CAP 通道
// 内核源码: net/bluetooth/l2cap.h struct l2cap_chan { // 通道标识 __u16 cid; // Channel ID (0x0001-0xFFFF) __u16 scid; // Source CID __u16 dcid; // Destination CID // 协议类型 __u16 psm;