使用 hciattach 通过 uart 进行蓝牙?

使用 hciattach 通过 uart 进行蓝牙?

它使用 QN9021 SoC,工作在控制器模式(BLE 蓝牙核心规范 v4.0)。它支持一些标准 HCI 命令以及一些供应商特定命令。我正在尝试将其连接到我的 ubuntu 笔记本电脑中。

我使用的命令是hciattach.

hciattach -s 9600 /dev/ttyUSBx any 9600 noflow nosleep 

执行 sudo hciconfig hci1 up 时会显示 hcidump。

HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci1 snap_len: 1500 filter: 0xffffffffffffffff
> HCI Event: Command Complete (0x0e) plen 12
    Read Local Supported Features (0x04|0x0003) ncmd 11
    status 0x00
    Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> HCI Event: Command Complete (0x0e) plen 12
    Read Local Version Information (0x04|0x0001) ncmd 11
    status 0x00
    HCI Version: 4.0 (0x6) HCI Revision: 0x400
    LMP Version: 4.0 (0x6) LMP Subversion: 0x400
    Manufacturer: Quintic Corp. (142)
> HCI Event: Command Complete (0x0e) plen 10
    Read BD ADDR (0x04|0x0009) ncmd 11
    status 0x00 bdaddr 08:7C:BE:3E:34:BB
> HCI Event: Command Complete (0x0e) plen 11
    Read Buffer Size (0x04|0x0005) ncmd 11
    status 0x00
    ACL MTU 0:0 SCO MTU 0:0
> HCI Event: Command Complete (0x0e) plen 4
    Read Class of Device (0x03|0x0023) ncmd 11
    status 0x01 class 0x000000
    Error: Unknown HCI Command

hciconfig 命令显示:

hci1:   Type: BR/EDR  Bus: UART
    BD Address: 08:7C:BE:3E:34:BB  ACL MTU: 0:0  SCO MTU: 0:0
    DOWN 
    RX bytes:192 acl:0 sco:0 events:15 errors:0
    TX bytes:60 acl:0 sco:0 commands:15 errors:0

hci0:   Type: BR/EDR  Bus: USB
    BD Address: C4:8E:8F:66:3B:0E  ACL MTU: 820:8  SCO MTU: 255:16
    UP RUNNING PSCAN 
    RX bytes:2457 acl:0 sco:0 events:196 errors:0
    TX bytes:24646 acl:0 sco:0 commands:196 errors:0

我想知道如何防止内核或某些蓝牙内核模块发送不支持的 HCI 命令。我是否需要修补 Linux 内核源代码或为我的 SoC 编写模块?

注意:- 对于此项目,无法更改 SoC 或为其编写固件以支持所有必要的命令。


编辑:

我知道我的 SoC 支持的 HCI 命令列表。我正在考虑创建一个模块来告诉运行的内核和守护进程仅向 SoC 发送受支持的命令。我查看了 linux 内核源代码(特别是 hci_core.c)。我认为通过此链接进行修改可能会解决问题。在此链接中,一些开发人员提供了支持蓝牙适配器的补丁。该补丁可防止 hci_core.c 文件向特定制造商的加密狗发送特定的 HCI 命令。

我想要的只是解决这个问题的建议。我需要修改 Linux 内核或为我的 SoC 编写模块吗?

注意:- 该应用程序将在 openwrt linux 上运行。

相关内容