HCI 设备注册与数据通路

HCI 设备注册与数据通路

1. 注册

典型 transport:

1
2
3
4
5
6
probe
-> hci_alloc_dev
-> set bus/driver callbacks
-> SET_HCIDEV_DEV
-> set quirks
-> hci_register_dev

注册完成后出现 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
2
3
4
event: header 2 bytes + plen
ACL : header 4 bytes + dlen
SCO : header 3 bytes + dlen
ISO : header 4 bytes + dlen

UART parser用 h4_recv_buf()按descriptor表重组;USB由endpoint天然区分部分类型。

6. Setup

setup可在核心初始化命令前/期间进行厂商firmware下载。某些设备下载后USB re-enumerate,初次probe仅负责loader阶段。

7. Unregister

1
2
3
4
disconnect/remove
-> hci_unregister_dev
-> kill work/URBs/IRQ
-> hci_free_dev

先阻止新I/O,再同步取消完成回调。

8. 用户接口

  • mgmt socket供bluetoothd;
  • raw HCI socket供低层工具;
  • sysfs /sys/class/bluetooth/hciN
  • debugfs视配置;
  • rfkill控制radio policy。

Raw HCI并不绕过controller firmware风险,应限制权限。

文章互动

阅读 --

留言

0 条留言

正在加载留言…