You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android完整BLE协议栈源码位置查询及全层级实现追踪需求

Android BLE 各层级实现与源码位置追踪

1. Framework 层(Java 上层)

你已找到的上层Java源码集中在以下路径:

  • 核心API类:frameworks/base/core/java/android/bluetooth/,包含BluetoothGatt、BluetoothGattCharacteristic、BluetoothDevice等关键类
  • 系统服务实现:frameworks/base/services/core/java/com/android/server/bluetooth/,比如BluetoothManagerService负责管理蓝牙服务的生命周期和跨进程调用

2. Native 层(JNI 与核心逻辑桥接)

这一层是Java层到底层协议栈的过渡:

  • JNI绑定代码:frameworks/base/core/jni/,比如android_bluetooth_gatt.cpp实现了BluetoothGatt的native方法映射
  • Android蓝牙模块核心:packages/modules/Bluetooth/,其中stack/gatt/子目录是GATT协议的核心实现,包含gatt_client.c(处理客户端侧的读、写、连接)、gatt_server.c(服务端逻辑)等文件

3. 蓝牙协议栈层

Android的蓝牙协议栈分两种情况:

  • 开源BlueZ栈:早期版本使用,源码在external/bluetooth/bluez/,src/目录下的gatt-client.c、gatt-server.c处理GATT协议的具体交互
  • 厂商自研栈:多数现代设备使用厂商定制栈(如高通QCA、联发科MTK栈),源码通常在vendor/<厂商品牌>/bluetooth/,比如高通的vendor/qcom/proprietary/bluetooth/

4. HAL 层(硬件抽象层)

这一层定义了上层协议栈与硬件驱动的交互接口:

  • 接口定义:hardware/interfaces/bluetooth/,比如1.0/IBluetoothGatt.aidl规范了GATT相关的HAL调用
  • 厂商实现:vendor/<厂商品牌>/hardware/bluetooth/,厂商在这里实现具体的硬件适配逻辑,将上层的HCI命令转发给驱动

5. 射频驱动层

最终与蓝牙硬件交互的驱动代码:

  • 通用蓝牙驱动:kernel/drivers/bluetooth/,比如btusb.c(USB蓝牙适配器驱动)、hci_uart.c(UART接口蓝牙驱动)
  • 厂商专属驱动:针对特定蓝牙芯片的驱动,比如高通的qca_bt.c,位于kernel/drivers/bluetooth/或厂商内核目录下,负责将HCI命令转换成硬件可执行的射频指令

标准命令完整流程示例(以连接命令为例)

  1. Java层:调用BluetoothDevice.connectGatt(),触发BluetoothGatt的内部状态机处理
  2. JNI层:通过JNI调用android_bluetooth_gatt.cpp中的connectGatt函数,将Java层参数传递到native侧
  3. Native蓝牙服务:packages/modules/Bluetooth/stack/gatt/gatt_client.c中构建GATT连接请求,转交给L2CAP层处理
  4. 协议栈层:将GATT请求封装为HCI命令(如HCI_LE_Create_Connection),发送到HAL层
  5. HAL层:厂商实现将HCI命令转发给驱动
  6. 驱动层:驱动将HCI命令转换为硬件指令,通过射频发送给目标BLE设备;设备响应后,结果按反向路径逐层返回至Java层

读、写命令的流程逻辑类似,只是在协议栈层会生成对应的HCI_LE_Read_Characteristic或HCI_LE_Write_Characteristic命令,最终通过射频完成数据交互。

内容的提问来源于stack exchange,提问作者user2625768

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:27