uart를 통해 블루투스에 hciattach를 사용하시나요?

uart를 통해 블루투스에 hciattach를 사용하시나요?

QN9021 SoC를 사용하며 컨트롤러 모드(BLE Bluetooth Core Spec v4.0)에서 작동합니다. 일부 표준 HCI 명령과 일부 공급업체별 명령을 지원합니다. 우분투 노트북에 연결하려고 합니다.

내가 사용하는 명령은 입니다 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로 보내도록 지시하는 모듈을 만들려고 합니다. 나는 리눅스 커널 소스 코드(특히 hci_core.c)를 살펴보았습니다. 이 링크를 수정하면 문제가 해결될 수 있을 것 같습니다. 이 링크에서 일부 개발자는 Bluetooth 어댑터를 지원하는 패치를 제공했습니다. 이 패치는 hci_core.c 파일이 특정 HCI 명령을 특정 제조업체의 동글로 보내는 것을 방지합니다.

내가 원하는 것은 이 문제를 해결하는 방법에 대한 조언뿐입니다. Linux 커널을 수정하거나 SoC용 모듈을 작성해야 합니까?

참고:- 이 응용 프로그램은 openwrt Linux에서 실행됩니다.

관련 정보