【BlueZ】 与内核 hci_dev 的交互:适配器设备的内核态管理
在 Linux 蓝牙子系统中,hci_dev(Host Controller Interface Device)是内核态对蓝牙适配器的抽象表示。每一个物理或虚拟蓝牙适配器都对应一个内核hci_dev结构体实例。BlueZ 用户态协议栈通过 HCI Socket 与hci_dev进行交互,实现指令下发、事件接收、状态同步等功能。本文深度剖析这套机制。目录一、内核 hci_dev 结构体核心字段二、蓝牙适配器内核态注册与初始化三、HCI Socket 与 hci_dev 指令交互四、状态同步与参数配置五、适配器资源绑定与异常检测六、BLE 与经典蓝牙 hci_dev 差异化处理七、用户态与内核态权责分工八、开发调试排坑经验九、核心函数索引十、总结一、内核 hci_dev 结构体核心字段1.1 内核态 hci_dev 结构Linux 内核蓝牙子系统使用struct hci_dev描述蓝牙适配器:// 内核源码:net/bluetooth/hci_core.h struct hci_dev { const char *name; // 设备名(如 "hci0") unsigned short id; // 设备 ID(如 0, 1...) unsigned long flags; // 设备状态标志 bdaddr_t bdaddr; // 蓝牙设备地址 bdaddr_t dflt_bdaddr; // 默认地址(用于身份轮换) u8 pair_bdaddr_type; // 配对时的地址类型 __le16 hci_ver;