GNU/Linux >> Linux の 問題 >  >> Ubuntu

カーネルパッチ後のエラーセットイベントフィルター(無効なHciコマンドパラメーター)を使用した偽のCsr 4.0 Bluetoothドングル?

中国から偽のドングルBT4.0を入手し、このスレッドの手順を試してみました:Bluetoothドングルの問題

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

しかし、パッチを適用した後でも、hcidumpを介して以下のエラーが発生します:

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

確認してください:https://bugzilla.kernel.org/show_bug.cgi?id =60824#c155

「PiZeroで同じデバイスと同じ問題。 「#define lmp_bredr_capable(dev)を変更する hci_core.hで falseを返すのがトリックでした。」

その方法がわかりません。#define lmp_bredr_capable(dev)。誰か助けてもらえますか?

私はそれをテストするために完全に利用可能です。

承認された回答:

hci_core.cの296行目と297行目にコメントすることで問題を解決しました。 (プラスパッチ)。

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);

たぶん、「#define lmp_bredr_capable(dev)0」も機能します。確信はないけど。まだbredr_setup()を実行していますが、イベントフィルターのクリア手順をバイパスしています…

obs:2日間完璧に動作します。唯一の問題は、それをHSP \ HSPプロファイルに変換することはできませんが、別の話だと思います(ofono gambiarraの後でも)。 LinuxでのBluetoothは、a$..の苦痛です。

関連:Ubuntuの既存のグループに既存のユーザーを追加する方法は?
Ubuntu
  1. Bluetoothが機能しなくなる–「電源オンの設定に失敗しました:Org.bluez.error.failed」?

  2. 一時停止後もBluetoothを無効のままに設定するにはどうすればよいですか?

  3. Maasで使用するとJujuで無効なSshキーエラーが発生しますか?

  1. ホスト名エラーを変更した後のcPanelの無効なライセンスファイル

  2. set-timezone コマンドを使用してタイム ゾーンを設定または変更する

  3. すべての OS でコマンドを使用してパスワード Zip ファイルを設定する方法

  1. カーネル4.10.0-20-genericでモジュールBtusbをロードする際のエラー?

  2. 「ルートデバイスを開けません」エラーのあるカーネルパニック、「root =」オプションをどこに追加すればよいですか?

  3. この ldapadd コマンドが無効な構文エラーで終了するのはなぜですか?