HCI 设备注册与数据通路
1. 注册
典型 transport:
1 | probe |
注册完成后出现 hciN,HCI Core异步执行 open/setup/config。
2. hci_dev状态
关键状态包括 registered、up/running、init、setup、config、suspend、rfkill。Transport必须保证 open/close和异步completion之间的生命周期。
3. Open
Open通常:
-启动RX endpoints/serial;
-提交URB或使能IRQ;
-初始化queue/parser;
-打开controller电源;
-允许TX。
HCI Core随后发送 Reset、Read Local Version、Read Supported Commands/Features等。
4. TX skb
hci_skb_pkt_type(skb)决定帧类型。Transport在成功接管skb后负责最终释放;错误路径必须遵循对应callback约定,避免double free/leak。
5. RX
Driver必须提交完整、带packet type的 frame:
1 | event: header 2 bytes + plen |
UART parser用 h4_recv_buf()按descriptor表重组;USB由endpoint天然区分部分类型。
6. Setup
setup可在核心初始化命令前/期间进行厂商firmware下载。某些设备下载后USB re-enumerate,初次probe仅负责loader阶段。
7. Unregister
1 | disconnect/remove |
先阻止新I/O,再同步取消完成回调。
8. 用户接口
- mgmt socket供bluetoothd;
- raw HCI socket供低层工具;
- sysfs
/sys/class/bluetooth/hciN; - debugfs视配置;
- rfkill控制radio policy。
Raw HCI并不绕过controller firmware风险,应限制权限。
正在加载留言…