GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Gefälschter CSR 4.0-Bluetooth-Dongle mit Fehler beim Festlegen des Ereignisfilters (ungültige HCI-Befehlsparameter) nach Kernel-Patch?

Ich habe einen gefälschten Dongle BT 4.0 aus China und versuche das Verfahren aus diesem Thread:Bluetooth-Dongle-Problem

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal

Device: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    bcdDevice: 88.91
    Kernel: 5.10.3-051003-generic

usb-devices | awk '/0a12/' RS=
T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev=88.91
S:  Product=BT DONGLE10
C:  #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#=0x0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
I:  If#=0x1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

Aber selbst nach dem Patch erhalte ich über hcidump den folgenden Fehler:

HCI Event: Command Complete (0x0e) plen 4
    Set Event Filter (0x03|0x0005) ncmd 1
    status 0x12
    Error: Invalid HCI Command Parameters

Überprüfen Sie es:https://bugzilla.kernel.org/show_bug.cgi?id=60824#c155

„Gleiches Gerät und gleiches Problem auf Pi Zero. „Ändern des #define lmp_bredr_capable(dev) in hci_core.h falsch zurückzugeben hat den Zweck erfüllt.“

Ich weiß nicht, wie das geht #define lmp_bredr_capable(dev). Könnte jemand helfen?

Ich bin voll verfügbar, um es zu testen.

Akzeptierte Antwort:

Ich habe mein Problem gelöst, indem ich die Zeilen 296 und 297 von hci_core.c auskommentiert habe (plus Patches).

static void bredr_setup(struct hci_request *req)
{
    __le16 param;
    __u8 flt_type;

    /* Read Buffer Size (ACL mtu, max pkt, etc.) */
    hci_req_add(req, HCI_OP_READ_BUFFER_SIZE, 0, NULL);

    /* Read Class of Device */
    hci_req_add(req, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);

    /* Read Local Name */
    hci_req_add(req, HCI_OP_READ_LOCAL_NAME, 0, NULL);

    /* Read Voice Setting */
    hci_req_add(req, HCI_OP_READ_VOICE_SETTING, 0, NULL);

    /* Read Number of Supported IAC */
    hci_req_add(req, HCI_OP_READ_NUM_SUPPORTED_IAC, 0, NULL);

    /* Read Current IAC LAP */
    hci_req_add(req, HCI_OP_READ_CURRENT_IAC_LAP, 0, NULL);

    /* Clear Event Filters */
    //flt_type = HCI_FLT_CLEAR_ALL;  HERE!!
    //hci_req_add(req, HCI_OP_SET_EVENT_FLT, 1, &flt_type);

    /* Connection accept timeout ~20 secs */
    param = cpu_to_le16(0x7d00);
    hci_req_add(req, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);

Vielleicht funktioniert auch das „#define lmp_bredr_capable(dev) 0“. Aber ich bin mir nicht sicher. Ich führe immer noch bredr_setup() aus, umgehe aber den Schritt zum Löschen des Ereignisfilters …

obs:Es funktioniert seit 2 Tagen einwandfrei. Einziges Problem, ich kann es nicht in ein HSP\HSP-Profil umwandeln, aber ich denke, es ist eine andere Geschichte (sogar nach dem Ofono Gambiarra). Bluetooth in Linux ist ein Schmerz in einem $..

Verwandte:Wie füge ich einen bestehenden Benutzer zu einer bestehenden Gruppe in Ubuntu hinzu?
Ubuntu
  1. Bluetooth funktioniert nicht mehr – „Failed To Set Power On:Org.bluez.error.failed“?

  2. Ungültiger Ssh-Schlüsselfehler in Juju bei Verwendung mit Maas?

  3. Ungültige cPanel-Lizenzdatei nach Änderung des Hostnamensfehlers

  4. Richten Sie die Zeitzone mit dem Befehl set-timezone ein oder ändern Sie sie

  5. Wie setze ich Passwort-Zip-Dateien mit Command in allen Betriebssystemen?

Wall-Befehl in Linux mit Beispielen

Linux-IP-Befehl mit Beispielen

sysctl-Befehl unter Linux

So richten Sie eine Firewall mit UFW unter Debian 11 ein

Verwenden des tr-Befehls in Linux, um mit Charakteren zu spielen

So überprüfen Sie die VPS-Serverparameter mit dem Linux-Befehl